de279a7c01603cc84a1837f745c5edc0226956c8
Kvitto-skanning (rapporterad krasch 'svar matchar inte schema … invalid value'): - AI-skan-enheter (kvitto/kyl/maltid) normaliseras nu fore validering: 'st'->COUNT, 'kg'->KILOGRAM, 'forp'/'pase'->PACKAGE osv. Okand enhet -> null i stallet for att falla hela svaret. Skarpt kvitto-prompt med exakt enhetslista. 17 nya tester bevisar normaliseringen. Sok pa 'Vad ska vi ata': - Endast TITELN (inte beskrivningen) -> 'pannkaka' ger inte langre appelkompott (som bara namnde pannkakor i beskrivningen). - Stavningstolerant via trigram-similarity: 'pankakor' hittar pannkakor. Hogtidsknapparna (kraftskiva/grill/jul ...): - Filtrerar nu pa recept-holidayTag (slug) i stallet for en titelsok som gav tomt. Har event inga recept an visas ett arligt tomt-lage. Full typecheck gron, ai-contracts 24 tester grona.
Plattformen (arbetsnamn: se brand.config.json)
AI-baserat operativsystem för hushållets mat, recept, nutrition, inköp och matsvinn.
Monorepo för hela plattformen: mobilapp (iOS/Android), Food API, worker, adminpanel och
alla delade paket. Byggd enligt master-specifikationen i docs/.
Struktur
<repo-rot>/
apps/
mobile/ Expo/React Native-app (iOS + Android)
api/ Food API (Fastify) – enda ingången för mobilappen
worker/ BullMQ-workers (bildanalys, kvitton, notiser, subscriptions …)
admin/ Adminpanel (Vite + React)
packages/
shared-types/ Domäntyper, enums och konstanter
validation/ Zod-scheman för API-kontrakt
database/ Drizzle-schema, migrationer, seed, repositories
inventory-engine/ Transaktionsbaserat matlager (Food Twin), FEFO, bäst före
recipe-engine/ Receptmatchning, filtrering, substitution, skalning
nutrition-engine/ Deterministisk näringsberäkning, BMR/TDEE, dagsmål
recommendation-engine/ "Vad ska vi äta?" – poängsättning + förklaringar
ai-contracts/ Typade AAMOS-kontrakt + HTTP-klient (mock för dev/test)
memory-client/ AAMOS Memory – lager, samtycken, "Vad appen vet om mig"
subscriptions/ Planer, entitlements, StoreKit/Play-verifiering
connectors/ Connector-interface + Livsmedelsverket/OFF/hälso-stubs
events/ Eventkatalog + outbox-publicering
feature-flags/ Feature flags (env + databas)
infrastructure/
docker/ Dockerfiles + docker-compose
deployment/ Deploy-skript för befintlig server (steg 1) → ECS (steg 2–3)
migrations/ Genererade SQL-migrationer (källa: packages/database)
monitoring/ Larm, dashboards, healthchecks
security/ IAM-policies, hardening-checklista
docs/ Produkt- och teknikdokumentation (Del 1–20)
Kom igång (lokal utveckling)
Krav: Node ≥ 22, pnpm ≥ 10, Docker.
# 1. Installera beroenden
pnpm install
# 2. Starta Postgres + Redis
docker compose -f infrastructure/docker/docker-compose.dev.yml up -d
# 3. Miljövariabler
cp -n .env.example .env # -n = skriv inte over en befintlig .env
# 4. Migrera + seeda databasen
pnpm db:migrate
pnpm db:seed
# 5. Starta API + worker + admin
pnpm api:dev
pnpm worker:dev
pnpm admin:dev
# 6. Mobilappen
pnpm mobile:start
API:t svarar på http://localhost:4000 (Swagger UI på /docs).
Adminpanelen på http://localhost:5173.
Vanliga kommandon
pnpm typecheck # TypeScript i hela repot
pnpm test # Alla tester (Vitest)
pnpm build # Bygg api/worker/admin
pnpm db:generate # Generera ny SQL-migration från Drizzle-schemat
Kritiska regler (spec §61 – gäller all kod)
- AI får inte hitta på kalorier eller allergener – all nutrition och allergihantering är deterministisk kod.
- Mobilappen pratar aldrig direkt med modelleverantörer – allt går
Mobil → Food API → AAMOS. - Mobilappen innehåller aldrig AI-hemligheter; backend verifierar Premium.
- AI ska visa osäkerhet, och korrigering ska vara enkel.
- Extern data måste vara juridiskt tillåten. Recept och produkter versionshanteras.
Dokumentation
Börja i docs/README.md – där ligger executive summary, beslutslogg, arkitektur,
datamodell, API-referens, säkerhets-/GDPR-checklista, utvecklingsfaser och launch-checklista.
Status
Se docs/STATUS.md för vad som är byggt, vad som är stubbar och vad som står näst på tur.
Description
Languages
TypeScript
97.7%
Shell
0.9%
JavaScript
0.6%
HCL
0.5%
Python
0.2%
Other
0.1%