NouriMe

Draft. This text has not been reviewed by a lawyer and is not in effect.

NouriMe privacy policy — DRAFT

Status        DRAFT. TBD_LEGAL — not reviewed by anyone qualified to approve it.
Derived from  the implementation, not from a template. Every claim below is
              traceable to code; see the "Where this comes from" table at the end.
Publisher     TBD_LEGAL — the named legal entity is an owner decision
Effective     TBD_OWNER
Contact       TBD_EXTERNAL

Do not publish this as-is. It is engineering’s honest account of what the software does, written so a lawyer can review facts rather than invent them. Two rules govern any edit: a statement must match the implementation, and it must not overstate. If a claim here and the code ever disagree, the code is the fact — fix the document, or change the code deliberately.


What NouriMe is

NouriMe is a nutrition decision-support app. It helps you decide whether a meal fits your goals right now, how to adjust it, and what it may change in the rest of your day.

NouriMe provides informational nutrition and wellness guidance. It does not diagnose disease, does not treat anything, and does not replace a doctor or a registered dietitian. It gives no medication or insulin instruction.

The short version


What stays on your phone

All of this is stored locally and is not uploaded:

your diary and logged meals            your streak, XP and achievements
your health profile and conditions     saved meal presets
your allergies and restrictions        decision history and outcomes
your daily targets                     free-text post-meal notes

Local storage is ordinary device storage. It is not encrypted by the app, and anyone with your unlocked phone can read it. Uninstalling the app removes it.

What is sent, and when

Three separate permissions, all off until you turn them on. Nothing is preselected, and you are asked immediately before the first upload rather than buried in a setup flow.

You turn onWhat is sentSent to
Food analysisThe photo, description or barcode, plus a minimised profile and today’s totalsOur server, then an AI provider
Menu analysisThe menu photo only — no profile, no health dataOur server, then an AI provider
Learning memoryNothing. This is local personalisation onlyNowhere

The minimised profile is age, sex, goals, dietary preferences and restrictions, allergies, governed condition categories, language and daily targets. It excludes your name, your weight and height, your recent meal names and times, and your free-text health notes.

Declining blocks the upload. It never silently produces a made-up result.

Photos are processed to answer your request and are not intentionally kept. Our logs deliberately exclude image data, credentials, full profiles, allergy lists and condition lists.

Your account

The app signs you in anonymously the first time you open it. That is a real account with an identifier, but it carries no name, no email and no device identifier. It exists so our server can tell one caller from another and refuse requests that are not yours.

You may optionally create an account with an email and password. If you do, that credential is linked to the identifier you already had, so nothing you have already logged is lost.

Sign-in is provided by Google Firebase Authentication. What reaches Google is your email and password if you create an account, plus the identifier Firebase itself issued. No health data reaches Firebase.

We store, on our own server:

your account identifier         when the account was created
your email, if you gave one     when it was last used
whether it is active            your app version and platform
whether cloud sync is on

Cloud sync

Cloud sync is a separate permission, off by default — and it is not yet built. Nothing in the app uploads your diary, profile or conditions, and there is no switch for it in the app today.

The consequence is real and you should know it before you rely on NouriMe: we hold no server-side copy of your health data, so a reinstall, a reset or a new phone loses your history. An account does not change that — it signs you in, it is not a backup.

If cloud sync ships it will stay off until you turn it on, and this page will say so before it does.

Who can see your data

Our staff can see the account-level facts listed above: identifier, email, dates, status, app version.

They cannot see your health profile, conditions, allergies, diary, meals or notes. This is not a policy promise about restraint — our administration tools have no field that carries those things, and there is no “view as this user” control. Every staff access to anything account-related is written to an append-only log recording who did what, to which account, and when.

We do not sell your data. We do not share it with advertisers. We do not use it to train AI models.

AI providers

Food and menu analysis send your image or description to an AI provider that returns a structured reading of it. The provider receives the content you chose to analyse and, for food analysis, the minimised profile above. It does not receive your identity: your account identifier stays between the app and our server.

AI recognises and explains. It never decides your score. Scoring, simulation and ranking are deterministic code.

Usage measurement

If enabled by us and separately agreed to by you, the app may upload coarse usage counts — which operation was attempted and whether it failed. These carry no meal content, no health data and no free text. It is off by default, you can withdraw at any time, and withdrawal deletes what was collected.

Deleting your data

Two controls, and they do different things:

To delete without the app installed: TBD_EXTERNAL (a web form or an email address; both stores expect one to exist).

Children

NouriMe is not directed at children. TBD_LEGAL — the minimum age is a legal determination, not an engineering one, and it changes what the store questionnaires require.

Changes and contact

TBD_LEGAL / TBD_EXTERNAL.


Where this comes from

For the reviewer: each claim above and the code that makes it true.

ClaimCode
Three consents, all default offfeatures/privacy/remoteAnalysisPolicy.ts, learningConsentPolicy.ts
Consent is re-checked inside the serviceservices/foodAnalysis/FoodAnalysisService.ts
Profile minimisation, and what is excludedservices/api/NouriMeApiClient.ts (safeProfile, safeTodayContext)
Condition data withheld from the AI payloadbackend/src/providers/ai/ChatPersonalizationProvider.ts
Logs exclude images, keys and health databackend/src/utils/logging.ts, backend/tests/logging.test.ts
Anonymous by default; linking preserves the identifierservices/auth/firebaseSession.ts
Only account fields are stored server-sidebackend/src/repositories/UserRepository.ts
Staff cannot read health databackend/src/routes/admin/users.ts — the view has no such field
Every staff access is loggedbackend/src/services/adminAuditService.ts
Account deletion removes record, data and identitybackend/src/routes/me.ts
A declined or failed request never becomes fake dataservices/foodAnalysis/FoodAnalysisService.test.ts
AI never decides the scorefeatures/decision/mealFit.ts, backend/src/services/mealFitScoreService.ts

Engineering detail behind all of this: ../architecture/privacy-boundaries.md and ../adr/ADR-005-accounts-and-admin-access.md.