at play · case study
BabyFoodScan
Scan a jar, get a 0–100 verdict for your child's age — every number traceable to Germany's nutrition and risk institutions.

- role
- design & code
- stack
- Nuxt 4 · Vue 3 · TypeScript
- data
- Open Food Facts · DGE · BfR
- status
- live — free, installable PWA
Four scans, replayed
What the app returns for four real products from German shelves, scored by the rules it ships with. Switch the age — the reference changes with the child.
Real scorer output and DGE/ÖGE reference values (3. Aufl. 2025) — a share of the daily reference, not a maximum limit. Rows without database values hide, exactly as in the app.
Need vs. avoid
Two institutions, two questions, never mixed. DGE — the German Nutrition Society — defines what a child's body needs: 28 nutrients × 2 age groups from the D-A-CH reference values, each stored with its scientific type and a link to the exact DGE source page. BfR — the Federal Institute for Risk Assessment — defines what to avoid. Its findings are category-level science buried in PDF; the app distilled them:
The app says "aflatoxin B1 detected in 31 of 39 tested almond drinks (BfR)" — never "this product contains aflatoxin B1." BfR tests categories, not brands; the app never claims more than its source.
One hand, one screen
Installs from the browser — no store, no account. Portrait, standalone, scan button under the thumb, verdict on one screen, age asked once. Barcode → Open Food Facts; unknown barcode → the camera reads the label with a vision model, framed as guidance, not professional advice. German-first, full English interface.