Case study · Full-stack · Business & Product
FITORA
Full-stack fitness app: smart workout logger, AI coach, gym management and an Android app
A fitness app for Indian gym-goers and gym owners. It remembers every set you log and tells you what to lift next time, swaps exercises when equipment is busy, and has an AI coach and food logging that understand Indian meals. Gym owners get members, fees, WhatsApp/UPI reminders, QR check-in and monthly reports. Google sign-in, cloud sync, phone reminders and 5 languages.
- Status
- LiveLive · web + Android app (installed, not yet on Play Store)
- My contribution
- Product owner and builder: I researched what makes people quit gyms, chose the features and the rules (no fake numbers, free-to-use media, privacy by default), set up Firebase, Vercel, Gemini and the Android package, and tested every flow live with my own account and phone.
- Tools
- React 19TypeScriptViteTailwind CSS v4Firebase Auth (Google)Cloud Firestore + security rulesFirebase Cloud MessagingGemini APIVercel serverless functionsGitHub ActionsPWA + Android (TWA)UPI deep links
- How AI was used
- Code was generated and refactored with Claude (Claude Code). I decided what to build and why, set up the cloud accounts and keys, reviewed changes, and tested features end to end on the live site and my Android phone.
The problem
Most people who join a gym stop going within months. The common reasons are not knowing what to do, seeing no progress, and plans that break on a busy day. Gym owners, meanwhile, track fees in registers and WhatsApp and find out someone quit only when the fee doesn't come.
Most fitness apps are also built for Western diets and English speakers. I wanted FITORA to solve the everyday problems for both sides, for Indian users, in their own language.
What I built
- Smart workout logger: remembers every set and suggests next time's weight and reps (double progression, with an automatic step back after two hard sessions)
- In-gym helpers: 'equipment busy?' swaps from the 873-exercise library, warm-up sets, plates per side, and a rest timer with sound and vibration
- Plan builder: a weekly split from days per week, gym or home, goal and experience; missed days can be done today, done as a 30-minute version, or skipped
- AI coach (Gemini) that reads your real logged workouts, food and targets; AI food logging that understands Indian meals and portions
- Real progress only: strength charts, workouts per week, body check-ins and badges, all from what you log, with no sample data
- Google sign-in with cloud sync and offline support; phone reminders for workouts, water and gym fees, sent by an hourly server job
- Gym owner side: members, plans, payments, fees due/overdue, 'at risk' members, WhatsApp reminders with UPI pay links, reception QR check-in, monthly reports
- Installable Android app (Trusted Web Activity) verified with Digital Asset Links; English, Kannada, Telugu, Tamil and Malayalam
Workflow
1Apps
- Website (React + Vite)
- Android app (TWA)
- Works offline in the gym
- 5 languages
2Firebase
- Google sign-in
- Firestore + security rules
- Offline cache & sync
- Push notifications (FCM)
3Serverless (Vercel)
- AI coach & food estimates (Gemini)
- Hourly reminder job
- Key stays on the server
- Per-user rate limit
4For gyms
- Members & fee due dates
- WhatsApp + UPI pay links
- QR check-in
- Monthly reports & CSV
Screenshots
Smart logger: last session, today's target, warm-up ramp and plates to load, then log each set
Plan builder: a weekly split from days per week, gym or home, goal and experience
Exercise library: 873 exercises with real photos, used everywhere in the app
Demo player: start and end photos loop like a slow animation, with a rep counter
Decisions I made
- Firebase instead of Supabase: my Supabase free slots were used, and Firestore's offline cache suits basement gyms with no signal
- Security rules first: each person sees only their own data; members can see their own membership but never other members or payments
- The AI key never reaches the browser: a serverless function checks the user's login and limits requests per hour
- UPI links instead of a payment gateway: money goes straight to the gym owner with no fees; FITORA only records payments
- Fastest working model: the newest Gemini model took over 2 minutes on the free tier, so the coach uses a 'lite' model that answers in about 2 seconds
Replacing the cartoon animations
The first version drew exercises as animated cartoon figures, and they didn't look right. I found a popular exercise GIF dataset, but its licence doesn't allow reuse of the media, so I didn't use it. Instead I switched to Free Exercise DB, which is public domain: 873 exercises with real photos and written instructions.
The photos load on demand from a CDN, the 850 KB exercise list is only downloaded when you open the library, and the old plan exercises were matched to their library versions so saved plans still work.
Where it stands, honestly
FITORA is live and I use it myself; the Android app is installed on my phone but not yet on the Play Store. Tested live: Google sign-in, cloud sync, the smart logger, AI coach and food logging, phone notifications, and the gym owner tools. Not yet tested with real users: the member side of a gym (invite link and QR check-in need a second account), and there are no gyms or customers using it yet. The gym owner screens and AI answers are still in English, and the regional-language text needs review by native speakers.
What I learned
- Check media licences before building around a dataset; 'on GitHub' doesn't mean free to use
- Sample data hurts trust: once real accounts existed, every made-up number had to go
- Security rules need their own testing: a rule that allowed saving workouts but not reading them only showed up live
- Free AI tiers change fast; build in model fallbacks and timeouts from the start
- Real-world features (reminders, payments, an Android app) are mostly setup: keys, permissions and verification files