every diabetes app assumes you will weigh your food and look up each ingredient. she was never going to do that, and neither would i.
so it takes a photograph. one pass identifies the dishes, a second estimates weights and nutrition ranges. ranges rather than fake precision, because a photograph cannot tell you grams.
everything stays on the device. sync is optional and off by default. a health record for one person did not need a backend.
why two passes
the analysis is split on purpose. one call identifies the visible dishes, a second estimates weight and nutrition ranges for only those dishes. the output is structured json, validated before the app accepts it, with timeouts and bounded retries around both calls.
after the photograph
she reviews what it found and corrects it, then it saves to sqlite on the phone. supabase sync runs in the background only if it is configured. left blank, nothing leaves the device and everything still works.
cgm and healthkit integration is not in the shipped build. that was deferred until the testflight line is stable.








