Scope: matches Conditions of Satisfaction v3, condition #5. No gamification. Written to be buildable: each story is small, testable, and has acceptance criteria. Priorities use MoSCoW (Must / Should / Could). Build order: Epics 1→2→3→4 form the thin end-to-end slice; 5 and 6 follow.
Personas¶
- Anonymous Shopper — anyone in a supermarket who scans a QR code. No account, no friction.
- Sara (Account Holder) — 24, goes to the gym, follows a high-protein diet, lactose intolerant. Wants to know in seconds, at the shelf, "is this right for me?" and to stop throwing food away.
- Marco (Brand Manager) — works at a mid-sized food brand. Wants proof that consumers engage with his products' QR codes. Sees only anonymized aggregates.
Epic 1 — Scan a product (works for everyone, no login)¶
1.1 — Scan a QR code (Must) As an Anonymous Shopper, I want to scan the QR code on a package with my phone camera, so that I instantly see what the product is.
- Given a GS1 Digital Link QR, when I scan it, then I see the product name, brand, image and basic info in under 3 seconds.
- Works without creating an account or logging in.
- The GS1 code (GTIN, lot, expiry) is decoded on my phone before any network call.
1.2 — See the digital label (Must) As an Anonymous Shopper, I want to see the ingredients, allergens and nutrition values of the scanned product, so that I don't have to read tiny print on the package.
- Ingredients, allergen list and nutrition table (energy, fat, sugar, protein, salt) are shown clearly.
- Allergens are visually highlighted, not buried in text.
1.3 — See where the product comes from (Should) As an Anonymous Shopper, I want to see the product's journey (origin → processing → distribution), so that I can trust what I'm buying.
- The journey is shown as an ordered list of steps with place and date.
1.4 — See the sustainability score (Should) As an Anonymous Shopper, I want a simple 0–100 eco score with a short explanation, so that I can compare products on sustainability at a glance.
- One overall score, expandable into the five pillars (CO₂, recyclability, animal welfare, local sourcing, packaging).
1.5 — Handle unknown products gracefully (Must) As an Anonymous Shopper, I want a clear message when a scanned product isn't in the system yet, so that I'm not confused by an error screen.
- "We don't know this product yet" screen, with a one-tap option to report/request it.
1.6 — Handle partial data gracefully (Must) As an Anonymous Shopper, I want to still see the available information when part of the data can't be loaded, so that one failure doesn't make the whole scan useless.
- If a data source fails (e.g. eco score), the rest of the passport still renders, with a small "temporarily unavailable" note on the missing section.
Epic 2 — My profile and goals (optional account, consent-gated)¶
2.1 — Create an account (optional) (Must) As an Anonymous Shopper, I want to create an account in under a minute, so that I can unlock personalization — but only if I choose to.
- Scanning never requires an account; the app invites me, it never forces me.
- Sign-up asks only the minimum (email + password or equivalent).
2.2 — Give explicit consent for health data (Must) As Sara, I want to explicitly agree before entering any health information, so that I stay in control of my sensitive data.
- The health profile cannot be created without an explicit opt-in (checkbox + timestamp + policy version recorded).
- Declining saves nothing.
2.3 — Set my allergies and conditions (Must) As Sara, I want to select my allergies (e.g. dairy, gluten, nuts) and conditions (e.g. diabetes, lactose intolerance) from a clear list, so that scans can warn me about products that are risky for me.
- Standard EU allergen list selectable with one tap each; conditions list likewise.
- I can edit these at any time.
2.4 — Set my dietary preferences and goal (Must) As Sara, I want to set my diet (e.g. vegan, high-protein, low-sodium) and my current goal (e.g. build muscle, lose weight, eat more sustainably), so that the app can judge products against what I am trying to achieve.
- One primary goal at a time, changeable anytime.
2.5 — Delete my profile (Must) As Sara, I want to delete my health profile (or my whole account) at any time, so that my right to erasure is respected.
- One clear action; deletion is complete, immediate and confirmed.
Epic 3 — "Does this fit me?" (the core moment)¶
3.1 — Get a personal verdict on scan (Must) As Sara, I want every scan to open with a simple personal verdict — Good for you / Be careful / Avoid — so that I get my answer in the first 3 seconds, not after reading a data sheet.
- The verdict appears at the top of the scan result, before any other detail.
- Tapping it reveals the reasons.
3.2 — Get safety alerts (Must) As Sara, I want a prominent red alert when a product contains something I'm allergic to, so that I never buy it by mistake.
- Allergen match → high-severity alert, impossible to miss (color + icon + text).
- Condition conflicts (e.g. diabetes ↔ high sugar) and diet conflicts (e.g. vegan ↔ milk) → medium-severity warnings with a one-line reason.
3.3 — See how the product fits my goal (Must) As Sara, I want to see whether this product supports my current goal (e.g. "high in protein — fits your muscle-building goal"), so that staying adherent to my plan becomes effortless.
- One or two plain-language lines connecting the product's nutrition to my stated goal. Simple language, no jargon.
3.4 — Anonymous users see what they're missing (Should) As an Anonymous Shopper, I want to see that a personal verdict exists ("Create a profile to see if this fits you"), so that I understand the value of an account without being nagged.
- Shown once per scan result, dismissible, never blocking the product info.
Epic 4 — My Fridge (own it, use it, don't waste it)¶
4.1 — Add a scanned product to my Fridge (Must) As Sara, I want to save a scanned product to my Fridge with one tap, so that the app knows what I have at home.
- The same physical item cannot be added twice; multiple items with the same GTIN are allowed.
- The expiry date from the scanned QR (lot/expiry) is stored with it.
4.2 — See my Fridge by freshness (Must) As Sara, I want to see my Fridge sorted by what expires first, with clear fresh / expiring / expired states, so that I use food before it goes bad.
- Expiring (≤5 days) and expired items are visually distinct and shown first.
4.3 — Be warned before food expires (Should) As Sara, I want a notification when something in my Fridge is about to expire, so that I can use it instead of throwing it away.
- One reminder when an item crosses the "expiring" threshold; no spam.
4.4 — Remove or mark items (Must) As Sara, I want to remove items from my Fridge when I've used or discarded them, so that the list stays true.
- Swipe/tap to remove; optional "used" vs "thrown away" so my waste can be tracked honestly.
4.5 — See my waste at a glance (Could) As Sara, I want a simple monthly summary ("you used 14 items, 2 expired"), so that I can see myself wasting less over time.
- Plain numbers, no points, no badges.
Epic 5 — Trust & privacy (cross-cutting)¶
5.1 — Understand what data goes where (Must) As Sara, I want a short, plain-language privacy summary at onboarding, so that I know brands only ever see anonymous aggregates, never me.
- One screen, readable in 30 seconds, written in simple everyday language.
5.2 — My health data stays personal (Must) As Sara, I want my allergies, conditions and goals to never be visible to brands or other users in any identifiable form, so that I can be honest in my profile.
- Brand dashboard queries can only return counts/aggregates; no individual-level health data crosses the wall.
Epic 6 — Brand dashboard (deliberately simple)¶
6.1 — Log in and see my products (Must) As Marco, I want to log in and see the list of my brand's products on the platform, so that I know what's live.
- I only ever see my own brand's products and numbers — never another brand's, anywhere in the dashboard.
6.2 — See scan counts (Must) As Marco, I want to see how many times each of my products was scanned (total and over time), so that I have proof consumers actually engage with the QR code.
- Simple table + one trend line per product. No beautification.
6.3 — See anonymized engagement (Should) As Marco, I want aggregate engagement signals (e.g. % of scans saved to a Fridge, % of scanners with accounts), so that I can judge the depth of interest, not just volume.
- All numbers are aggregates with a minimum group size; nothing traceable to a person.
6.4 — Onboard a product (Should) As Marco, I want to submit my product's data (label, origin, sustainability info) through a simple form or file upload, so that my products appear correctly in consumer scans.
- Manual upload is acceptable for the MVP; no integration required.
Explicitly out of scope for this MVP¶
- Reward points, lottery tickets, referrals, prize draws (cut after advisory feedback — value must come from the product itself).
- Reviews/community features (revisit after traction).
- Automated brand data integrations (manual onboarding only).
- Native app store releases if a mobile web app reaches users faster.