Inspiration
I wanted a calorie counter that doesn't feel like homework. Most of them make you search a database and weigh every gram, so people quit in a week. So HolyShot works from a photo: you take a picture of the meal, and about two seconds later you have calories, protein, fat, carbs, sugar and fiber.
Then I noticed the second problem. People who work with a coach still send screenshots in a messenger, and the coach writes the workout plan in a notes app. I wanted all of it in one place.
What it does
For the client (iPhone app):
- Log a meal by photo, text or barcode
- See the day as rings and bars, with a diet quality score and added sugar tracked separately
- Open today's workout from the coach, tick off sets, and get a rest timer that buzzes when time is up
- See the history on a calendar and tap any day to see what was done
For the coach (web dashboard , optimized for smartphone browsers):
- See every client's diary, week chart and meals with photos
- Build a workout program: days, exercises, sets, reps and weight. Typing "bench 4x8 60" adds a full row
- Join exercises into supersets and circuits, even when they have different numbers of sets
- See the plan next to what the client actually did, set by set. Skipped sets are marked
The app and the dashboard speak 10 languages.
How I built it
React and TypeScript on the front, wrapped in Capacitor for iOS. Supabase for the database and edge functions, RevenueCat for subscriptions. I tried to make everything look like it belongs on an iPhone, so I copied the look of Apple Fitness and Health: grouped lists, round check marks, segmented controls.
A workout is stored as one row with every set inside it. The phone keeps the unfinished workout locally and saves it again after each tap, so the gym basement with no signal doesn't lose anything.
Challenges
Privacy. A coach must see only their own active clients, and a client must never be able to edit the plan. I did this with row-level security and column-level permissions, and wrote database tests for every case: other coach, ended connection, guest account, and so on.
Guest accounts. People start without signing in. When they sign in later, their meals, workouts and the coach link have to move to the real account without losing anything.
Supersets. It sounds simple until one exercise has 3 sets and the other has 4. Now the last round has only one exercise, and the rest timer has to know that.
What I learned
Test the permissions first. Every time I found a bug, it was a permission bug. I also learned to show a mockup before building a screen, because "make it more like Apple" means something different every time.
What's next
Progress charts for weights, a coach marketplace, and more languages for the coach dashboard.
Built With
- apple-sign-in
- capacitor
- deno
- edge-functions
- gemini
- google-oauth
- ios
- lovable
- pglite
- postgresql
- radix-ui
- react
- revenuecat
- row-level-security
- shadcn-ui
- supabase
- swift
- tailwindcss
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.