MacroTrack
An AI meal tracker built around one idea — you should be able to say what you ate and be done.
- Role
- Sole developer — schema, Edge Functions, app, iOS submission
- Year
- 2026
- Status
- Not yet released
- Stack
- React 19 · Vite · Tailwind 4 · Supabase · Capacitor · Gemini

The constraint
Macro tracking fails for one reason: it is a chore. Every established app makes you search a database, pick between forty entries for “chicken breast”, and guess a portion. People don’t quit because they stop caring; they quit because logging lunch takes two minutes.
So the whole product is one bet — that removing the search box removes the attrition. You say what you ate, in your own words, and the app does the rest. Every decision below serves that.
Parsing happens server-side, and the key never touches the client
Meal parsing runs in a Supabase Edge Function against Gemini. The client sends text; it never sees the provider credentials.
That sounds obvious until you notice how easy it is to get wrong: anything
prefixed VITE_ is compiled into the bundle and readable by anyone who opens
devtools. The Supabase URL and anon key are in the bundle, deliberately —
row-level security is what restricts access, not secrecy. The provider key is
not, and there is a note in the README saying why, because that is exactly the
shortcut a tired developer takes at midnight.
What it cost: a network hop on every log, and Edge Functions to deploy, version and debug rather than a direct call.
Measure the thing you want to claim
Median parse latency is 1,155 ms; p95 is about 1,690 ms. Cost scales with the number of items returned rather than with usage, varying 3.2× between a simple and a complex meal — which makes “meals per day” a questionable quota unit and “items” the honest one.
Those are server-side numbers, and the benchmark doc says so in as many words. There is no measured end-to-end figure yet, so there is no end-to-end claim.
What it cost: the marketing copy is duller than it could be. “Log a meal in five seconds” is available, unmeasured, and would be a lie by rounding.
The pivot
It started as a barcode scanner. The repository is still named for it.
Barcodes solve the wrong half of the problem: they work for packaged food with a label in reach, which is not what most people eat and not where the friction is. Speech and free text cover the actual case — a plate someone assembled — and the barcode path became a maintained feature serving a shrinking fraction of logs.
What it cost: a working feature deleted, and a repo name that now misleads anyone who reads it before the product.
Where it stands
Built as a web app and wrapped for iOS with Capacitor, from a single codebase. Free with a ceiling of five AI logs a day; a subscription is deferred until the business entity exists to invoice through.
What I’d do differently
Run the benchmark before building the quota. I designed a per-meal limit and then measured that cost varies 3.2× by meal complexity — which means the unit I picked charges a salad the same as a roast dinner. Twenty minutes of measurement first would have changed the design instead of embarrassing it afterwards.
Screens
Captured from the running app against seeded demo data — the people and figures in them are fictional.


