52 lines
7.1 KiB
Markdown
52 lines
7.1 KiB
Markdown
# Status – vad som är byggt, vad som är stubbar, vad som återstår
|
||
|
||
> Uppdaterad efter i18n-faserna M1–M7 + M10. Varumärket är INTE beslutat:
|
||
> alla namn/ID:n är platshållare ur `brand.config.json` (se `namnbyte.md`).
|
||
|
||
## Verifierat grönt (senaste körning)
|
||
|
||
| Kontroll | Resultat |
|
||
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `pnpm typecheck` | 17/17 paket |
|
||
| `pnpm test` | 30 tasks, 113 tester (motorer inkl. mjölkprincipen, subscriptions, i18n, måttvisning) – tidszonsoberoende: hela sviten körd utan cache under Europe/Stockholm, Pacific/Auckland och America/Los_Angeles |
|
||
| `pnpm build` | api + worker + admin |
|
||
| `pnpm db:migrate && pnpm db:seed` | 54+ tabeller, 101 ingredienser (+ en-översättningar), 22 recept, enhetsetiketter, marknadsprofiler |
|
||
| E2E-smoke | register → hushåll (valuta) → lager (kanoniska enheter) → rekommendationer → AI-översättning → publicering → engelsk användare får engelskt innehåll → accentokänslig sök → marknadsprofiler |
|
||
|
||
## Färdigbyggt
|
||
|
||
- **Mobilapp** (Expo/React Native): auth, onboarding, fyra flikar (Vad ska vi äta / Skanna / Min dag / Hemma), receptdetalj + cooking mode, skanningsgranskning, inköpslista, matlådor, hushåll, minne ("Vad appen vet om mig"), paywall, profil med språkval. i18next på 12 språk – sv/en/es/it/de/fr/da/nb/fi/nl/pl/pt (~200 basnycklar per språk, paritetstestade, korrekta pluralformer inkl. polskans one/few/many), automatisk enhetsspråksdetektering vid första start (D-031, D-032), pengar via Intl, måttvisning per måttsystem.
|
||
- **Food API** (Fastify): ~70 endpoints – auth/JWT-rotation, hushåll, lager (FEFO, bäst före), recept (säkerhetsfiltrering, skalning, varianter), rekommendationer, veckoplan, inköpslista, skanningar, måltidsloggning, nutrition, minne, GDPR (export/radering), subscriptions/entitlements, budget (minor units + valuta), i18n-endpoints (locale-preferenser, enhetsetiketter, näringsprofil), adminpanel-API med översättningsflöde.
|
||
- **Worker** (BullMQ): bildanalys/kvitton via AAMOS, moderering, veckoplan, receptöversättning med deterministisk verifiering, notiser, minnessync, prenumerationssvep, träningsexport, outbox.
|
||
- **Deterministiska motorer**: nutrition (Mifflin-St Jeor, per-100, enhetskonvertering som vägrar volym↔massa utan densitet), inventory (transaktionsbalans, FEFO, utgångsklassning), recipe (allergen/diet/religion-säkerhet, täckningsgrad, substitution, kostnad i minor), recommendation (poängsättning + förklaringar, cravings, säsonger).
|
||
- **AAMOS-integration**: 16 typade kontrakt (Zod-validerade kuvert med localeContext + pseudonymiserat subjectRef + consentFlags), HTTP-klient med retries + mock för dev/test.
|
||
- **Internationalisering (M1–M7, M10)**: språkneutrala enhetskoder, locale-preferenser, minor units + valuta per hushåll, översättningstabeller med AI-utkastflöde, i18next, måttvisning, marknadsprofiler för nutrition/allergener, accentokänslig fuzzy-sök, minnesrendering per språk.
|
||
- **Admin** (Vite/React): användare, moderering, flags, subscriptions, jobböversikt, hälsa, auditlogg, AI-korrigeringar.
|
||
- **Lösenordsåterställning**: forgot/reset-endpoints med hashade engångstokens (30 min TTL), familjeåterkallelse av alla sessioner, mejlmallar per språk via utbytbar mailer (log-läge i dev, leverantör kopplas i fas 7), mobilskärmar med app-länk.
|
||
- **Admin-2FA**: TOTP (RFC 6238, inga externa beroenden) med step-up-inloggning, engångsskydd per steg och MFA-tvång på admin-API:t; UI i adminpanelen.
|
||
- **E-postverifiering**: icke-blockerande verifiering med mallar per språk, resend och profilhint.
|
||
- **AAMOS-utvärderingssvit**: golden cases med semantiska kontroller per uppgiftstyp; resultat till ai_eval_runs; CI-vänlig exitkod.
|
||
- **Driftverktyg**: dagligt retentionsjobb (GDPR), skriptad backup-restore-övning, lasttest med trösklar, larmwebhook för 5xx/fallerade jobb.
|
||
- **CI**: GitHub Actions med varumärkesvakt, Prettier, typecheck, tester, build, migrate+seed mot riktig Postgres 16 (med sök-extensions) och API-röktest.
|
||
- **Infrastruktur**: Dockerfiles (non-root), compose dev/prod, deploy-skript med backup-krav, create-database.sql (minsta privilegier + sök-extensions), hardening-checklista, larm/dashboards-underlag.
|
||
|
||
## Stubbar / medvetet senare
|
||
|
||
| Vad | Läge |
|
||
| -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
||
| Apple/Google butiksverifiering i produktionsläge | Sandbox-läget komplett; App Store Server API v2 + Play Developer API kopplas i fas 7 (kräver riktiga konton) |
|
||
| Hälsointegrationer (Apple Health / Health Connect) | Connector-interface + samtycken klara; native-koppling görs i app-butiksfasen |
|
||
| Livsmedelsverket/Open Food Facts-import | Connector-stubbar med rätt interface; juridisk granskning av licenser först (spec §61.5) |
|
||
| Push-notiser via Expo | Tokenhantering + notistabeller klara; EXPO_PUSH_ENABLED=false tills appen finns i butikerna |
|
||
| M8 store-metadata per marknad | Ops-uppgift i butikskonsolerna inför lansering |
|
||
| M9 admin på flera språk | Beslut D-024: svenskt internverktyg tills internationell ops finns |
|
||
| Riktig AAMOS-drift | AAMOS_MODE=http + URL/nyckel sätts i produktion; mock används endast lokalt (produktion vägrar starta med mock) |
|
||
|
||
## Nästa steg
|
||
|
||
Allt som kan byggas utan namn/externa konton ÄR byggt. Återstår (kräver Johan/konton):
|
||
se **docs/21-lanseringsplan.md** – körbar runbook fas 0–6 med exakta kommandon.
|
||
Kortversion: namn → infra-provisionering (halvdag) → `pnpm eval:aamos` mot riktig
|
||
AAMOS → e-postleverantör (en klass) → butikskonton + EAS → juristgranskning av
|
||
docs/23-utkasten → soft launch SE.
|