AskCal
Live on both storesA calorie counter that admits what it cannot see.
MobileExpo SDK 57React Nativeexpo-routerUniWindZustandMMKVRevenueCatFirebase FunctionsZodTurborepo



- Screens
- 37 mobile
- Wiki
- 64 pages
- Architecture
- How it fits together
- Checked by canon
- 8 modules · canon 6.7.0
- Privacy
- Policy · delete account
How it ships
As of 2026-11-10
The stages work on AskCal goes through. I approve at the marked ones and can send them back. A dashed stage has not started. Tap a count to open it.
- Problemwhat hurts
6problems
- 3 being solved
- 3 solved
- Researchdiscoveries, findings
- Planthe approach
1plan
- 1 approved
- Featurewhat gets built
9features
- 5 shipped
- 4 planned
- Bugwhat gets fixed
8bugs
- 7 fixed
- 1 open
- Designevery screen, in HTML3 turned down
- Codethe build1 turned down
- Reviewa merged pull request
- Releasea version
- Androidlive · 1.4.4
- iOSlive · 1.4.4
- Liveanyone can use it
- Marketingposts drafted
- Videoscript, render, publish
ProblemsThinkingBuildingShipping
- Versions cut
- 9
- iOS approved
- 0
- Store rejections
- 3+
- Decisions reverted
- 1
- Experiments discarded
- 3
- Features shelved
- 0
Turned down: my chat since 2 Oct 2026, read and sampled by hand. Approximate, and a minimum. Store rejections are a minimum too.
Where each surface is
- Android live · 1.4.4
- iOS live · 1.4.4
Next up
4 planned
The idea
Every camera-first calorie app turns a photo into one confident number. A photo cannot show the oil a dish was cooked in, cannot separate a sandwich's layers, and gives a different answer from a different angle. Those failures cluster on mixed, sauced, oil-cooked, shared-serving food — which is most of what the world actually eats, and almost everything cooked at home.
Asking is friction, and frictionlessness is what the incumbents sell. That is precisely why they will not copy it.
What it does
- Estimates from a photo and marks every value Seen, Label, Guessed or Unknown.
- Asks one or two questions. how many pieces, which oil, your share or the whole dish.
- Resolves the answer against USDA FoodData Central rather than the model's recall.
- Shows a range where a single number would be false.
- Keeps totals honest. a total always equals the sum of its rows.
Decisions worth defending
- The estimator is a config value, not an import. One file per vision provider behind a single interface. Quota, caching and the app never know which one ran, so swapping the model is one line.
- Accuracy is the product, so it is measured. A harness answers whether asking beats guessing. It imports the same prompts the server sends, so it measures the estimator that ships, and a change is not done until it has run.
- Grams are the quantity of record. A unit a person would say out loud — two eggs, a glass of juice — is only how the amount is spoken. Macros scale from grams, and a measure that disagrees is dropped, not repaired.
- “We could not check” is not “you have not paid”. The entitlement check returns three values. Collapsing unknown into false once metered a paying subscriber against the free allowance; unknown now touches no counter.