Most fitness apps cover a single piece: workouts, or food, or a WhatsApp chat with your coach — and almost none are built for Arabic-speaking users. I designed and built VOLT FIT end-to-end to bring all of it into one place. It is live on Google Play.
People who train seriously end up juggling several apps: one to log workouts, another to count calories, and WhatsApp to talk to their coach. Nothing connects, and most of these apps treat Arabic as an afterthought.
VOLT FIT puts it all in one place: AI-generated training and diet plans, macro and vitamin tracking backed by real USDA food data, a rest timer between sets, and a coach dashboard to follow trainees and talk to them. It also ships features made specifically for the region — full Arabic and RTL support, a Ramadan mode that moves meals to fasting hours, and prayer-time awareness so reminders never land during prayer.
Every change is saved locally first (Zustand + device storage). The app works fully offline.
Changed keys go to pendingSyncKeys, then upload once after a debounce. Large lists are split into hashed chunks.
Firestore stores the data. Chat runs over short REST requests and new messages arrive by push notification.
Only the chunks whose hash changed are uploaded — the app stays fast offline and Firestore writes stay low.
Chat and sync had to work reliably on the free Firebase plan, which allows only 100 simultaneous open connections. A typical WebSocket-style chat would hit that ceiling fast.
SolutionI replaced long-lived connections with short REST requests for sending, receiving and delivery receipts. New messages reach the user through push notifications — so connections are never held open.
Users log sets and meals constantly, often with a weak connection. Writing every change straight to Firestore would be slow offline and expensive in writes.
SolutionEach change is saved on the device first and marked in a pendingSyncKeys list, then uploaded to the cloud in one batch after a debounce. Large lists like the food log are split into chunks, each with its own hash, so only the chunk that changed is uploaded. This cut Firestore writes dramatically.
The rest timer between sets must ring even when the app is closed or the screen is locked — which a JavaScript timer can't guarantee on Android.
SolutionI wrote a native Android foreground service in Kotlin that keeps the timer alive and rings on time, bridged to the React Native app.