Arkitektur
Systemoverblik
iOS app / agent client -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
Web app -> app.<domain> -> CloudFront -> SPA
Browser and agent auth -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
Apex fallback -> <domain> -> CloudFront redirect -> app.<domain>
Principper
- Separate offentlige domæner til
app,apiogauth - Postgres er den autoritative datakilde
- iOS-klienten er offline-first med lokal SQLite plus synkronisering
- Webappen, iOS-appen og grænsefladen for eksterne agenter deler den samme model for arbejdsområder
- Eksterne agenter starter fra
GET https://api.nibomo.com/v1/
Understøttede klienter
- Webapp på
app.nibomo.com - iOS-app i hovedrepositoriet med lokal SQLite-lagring
- Android-app på Google Play
- Eksterne agentklienter via discovery, opstart med engangskode og
Authorization: ApiKey
Datamodel
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Dataflow
Web
- Browseren logger ind via
auth.<domain>. - Webappen henter arbejdsområdets data fra
api.<domain>. - Forespørgsler til AI-chatten går gennem
/chat/local-turn. - Indsendte repetitioner opdaterer planlæggerens tilstand ved skrivning.
iOS
- iOS-appen skriver først lokalt til SQLite.
- Lokale ændringer sættes i kø i en udbakke.
- Synkroniseringen uploader ændringer via
/v1/workspaces/{workspaceId}/sync/push. - Synkroniseringen henter opdateringer fra serveren via
/v1/workspaces/{workspaceId}/sync/pull. - Den lokale database anvender ændringerne og flytter synkroniseringsmarkøren frem.
Eksterne agenter
- Agenter starter med
GET /v1/. - Opstarten med engangskode kører på
auth.<domain>. - Agenten modtager en langtidsgyldig API-nøgle.
- Agenten indlæser
/v1/agent/me, henter listen over arbejdsområder, vælger et om nødvendigt og bruger derefter/v1/agent/sql/queryog/v1/agent/sql/execute.
Planlægning
Nibomo bruger FSRS som planlægger for repetitioner.
Implementeringsnoter:
- backend og iOS har spejlede FSRS-implementeringer
- webappen spejler datakontrakten for planlægningen, men leverer ikke en tredje kopi af planlæggeren
- planlæggerens indstillinger på arbejdsområdeniveau omfatter ønsket retention, læringstrin, genindlæringstrin, maksimalt interval og fuzz
- det faktiske tidspunkt for repetitionen kommer fra
reviewedAtClient
Den detaljerede kontrakt finder du i FSRS-planlægningslogikken i hovedrepositoriet.
Godkendelse
- Engangskode på e-mail via Cognito
- Browsersessionscookies på det fælles domæne til den hostede webapp
- Opstart af agenter med engangskode på
auth.<domain>, som udsteder en langtidsgyldig ApiKey AUTH_MODE=nonetil lokal udviklingAUTH_MODE=cognitotil produktionslignende godkendelse
Udrulningens opbygning
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda-backendauth.<domain>-> API Gateway + Lambda-godkendelsestjeneste- Postgres i AWS RDS
Apex-domænet kan blive på et separat marketingsite. Hvis det er ledigt under opstarten, kan infrastrukturen midlertidigt omdirigere det til app.<domain>.