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.

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.