Arquitectura
Visió general del sistema
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>
Principis
- Dominis públics separats per a
app,apiiauth - Postgres és la font de referència
- El client d'iOS prioritza el funcionament fora de línia, amb SQLite local i sincronització
- L'app web, l'app d'iOS i la interfície per a agents externs comparteixen el mateix model d'espai de treball
- Els agents externs comencen per
GET https://api.nibomo.com/v1/
Clients admesos
- App web a
app.nibomo.com - App d'iOS al repositori principal, amb emmagatzematge SQLite local
- App d'Android a Google Play
- Clients d'agents externs mitjançant descobriment, configuració inicial amb OTP i
Authorization: ApiKey
Model de dades
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Flux de dades
Web
- El navegador inicia la sessió a través de
auth.<domain>. - L'app web carrega les dades de l'espai de treball des de
api.<domain>. - Les sol·licituds al xat amb IA passen per
/chat/local-turn. - Els repassos enviats actualitzen l'estat del planificador en el moment d'escriure'ls.
iOS
- L'app d'iOS escriu primer localment a SQLite.
- Els canvis locals s'afegeixen a una cua de sortida.
- La sincronització puja els canvis a través de
/v1/workspaces/{workspaceId}/sync/push. - La sincronització baixa les actualitzacions remotes a través de
/v1/workspaces/{workspaceId}/sync/pull. - La base de dades local aplica els canvis i fa avançar el cursor de sincronització.
Agents externs
- Els agents comencen amb
GET /v1/. - La configuració inicial amb OTP s'executa a
auth.<domain>. - L'agent rep una clau d'API de llarga durada.
- L'agent carrega
/v1/agent/me, llista els espais de treball, en selecciona un si cal i després fa servir/v1/agent/sql/queryi/v1/agent/sql/execute.
Planificació
Nibomo fa servir FSRS com a planificador de repassos.
Notes d'implementació:
- el backend i iOS mantenen implementacions equivalents de FSRS
- l'app web reprodueix el contracte de dades de planificació, però no inclou una tercera còpia del planificador
- la configuració del planificador per espai de treball inclou la retenció desitjada, els passos d'aprenentatge, els passos de reaprenentatge, l'interval màxim i la variació aleatòria dels intervals
- la data i hora real del repàs prové de
reviewedAtClient
Per al contracte detallat, consulta la lògica de planificació de FSRS al repositori principal.
Autenticació
- OTP per correu electrònic mitjançant Cognito
- Galetes de sessió del navegador en un domini compartit per a l'app web allotjada
- Configuració inicial amb OTP per a agents a
auth.<domain>, que retorna una clau ApiKey de llarga durada AUTH_MODE=noneper al desenvolupament localAUTH_MODE=cognitoper a una autenticació com la de producció
Estructura del desplegament
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + backend Lambdaauth.<domain>-> API Gateway + servei d'autenticació Lambda- Postgres a AWS RDS
El domini arrel pot continuar allotjant un lloc de màrqueting separat. Si està lliure durant la configuració inicial, la infraestructura el pot redirigir temporalment a app.<domain>.