Skip to content
Edson Francisco
  • Hospitality, restaurants & networks

MyGym (FF Gym)

Member, subscription, payment and QR check-in management for a gym in Beira.

Period
2025–2026
Status
In development
Role
Full-stack developer (solo project)
Client
FF Gym

Problem

The gym managed members and payments by hand. It was hard to know who owed money, track attendance and close the month.

Solution

Web app with members, plans priced in meticais, payments (M-Pesa, e-Mola, mKesh, cash, transfer), QR check-in, expiry reminders and reports exported to Excel and PDF. It came after four versions in about three months.

Technical decisions

  1. 01

    Four attempts before settling on one stack

    React/Vite with Express, then Flutter with Supabase, then Ionic/Angular with its own backend (with a written Ionic vs Flutter comparison), and finally Next.js with Prisma. A single full-stack web codebase is what made delivery possible: the core (auth, members, check-in, dashboard) was built in one day.

  2. 02

    Data model with local payment methods

    The Prisma schema has an enum with M-Pesa, e-Mola, mKesh, cash, transfer and card, plus the gym's real packages (registration, monthly, student, weekly). Reports total by payment method without free-text fields.

  3. 03

    Automatic check-out by cron

    Members rarely check out. An hourly cron closes check-ins open for more than 4 hours and, if the day has changed, closes them at 23:59:59, so attendance statistics make sense.

  4. 04

    Member status computed, not typed in

    Active, inactive, suspended or irregular is derived from subscriptions and shown in colour in reports, and a daily cron creates the expiry reminders.

Images

01 / 02 — MyGym sign-in screen with email and password

Technologies

  • Next.js
  • React
  • TypeScript
  • Prisma
  • PostgreSQL
  • Tailwind CSS

Verifiable results

Prisma models
6
API route groups
12

What I learned

Switching stacks three times cost weeks. The lesson was to write the comparison before starting and pick the option that ships the MVP soonest, leaving the mobile app for later.

SDGs

  • SDG 8 · Decent Work and Economic Growthprimary

    Members, subscriptions and QR check-in replace notebooks and spreadsheets at a small gym, with reports and local payment methods (M-Pesa, e-Mola, mKesh).