App
Mahi
Fitness accountability with no excuses. Don't show up, lose your streak. Built for iOS and Android.
Mahi
Fitness accountability. No excuses, just results.
The build
Every fitness app tracks workouts. Mahi holds you to them. You post a workout photo every training day, your streak survives; you skip, it dies. No rollovers, no freeze tokens, no gentle nudges. The whole product is built around one behavioural truth: accountability works when it costs something.
Behind the simple rule is a proper social platform: a photo feed, follows and suggested follows, likes, comments, direct messages with message requests, and moderation with blocking and reporting. The streak engine knows your training days from your rest days, so a planned day off never kills a streak, and cheating is blocked at every layer of the stack.
I built Mahi for iOS and Android, product thinking and engineering together, because an accountability app lives or dies on how the pressure feels. Getting lazy? Mahi won't have it.
- Role
- Product, design, build
- Platforms
- iOS · Android
- 1Post a day, enforced in three layers
- 13Database tables behind the streaks
- ~110mLocation rounding for privacy
Technically engineered.
The decisions that make this build hold up.
- 01
A streak engine that plays fair
Training days and rest days are modelled per user, so a planned day off never breaks a streak, and skipping a session always does. One post per day is enforced three times over, in the database, in the security rules, and in the app, because an accountability product can't have loopholes.
- 02
Camera-first, failure-proof uploads
Shutter to feed in one flow, with optimistic streak updates so the app feels instant and automatic cleanup if an upload dies halfway. The moment that matters, proving you showed up, never gets lost to a bad connection.
- 03
A full social layer
Feed, follows, suggested follows, likes, comments, and direct messages with message requests, plus blocking and reporting. Accountability works better with an audience, so Mahi ships one.
- 04
Privacy as a number
Location on a post is opt-in per photo, and coordinates are rounded to roughly 110 metres before they ever leave the phone. Your gym, not your doorstep.
The real stack
React Native + Expo
One codebase for iOS and Android, OTA updates via EAS
TypeScript
End to end, app to API to database types
Supabase (Postgres)
Auth, feed, streaks, messaging, storage, realtime
Zustand
Fourteen focused stores in a strict layered architecture
Edge Functions
OTP sign-up flow over Resend email
PostHog + Sentry
Feature flags, analytics, error monitoring
Where my services came in
Book a call
Loading calendar…
No time that suits? Message Joe on WhatsApp or email hello@calljoe.co.