- 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
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.
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.
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.
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).
