Architecture
Vue d'ensemble du système
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>
Principes
- Des domaines publics séparés pour
app,apietauth - Postgres est la source de vérité
- Le client iOS est offline-first, avec SQLite local et synchronisation
- L'application web, l'application iOS et la surface d'agent externe partagent le même modèle d'espace de travail
- Les agents externes partent de
GET https://api.flashcards-open-source-app.com/v1/
Clients pris en charge
- Application web sur
app.flashcards-open-source-app.com - Application iOS dans le dépôt principal, avec stockage SQLite local
- Application Android sur Google Play
- Clients agents externes via la découverte, l'amorçage OTP et
Authorization: ApiKey
Modèle de données
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Flux de données
Web
- Le navigateur se connecte via
auth.<domain>. - L'application web charge les données de l'espace de travail depuis
api.<domain>. - Les requêtes du chat IA passent par
/chat/local-turn. - Les envois de révision mettent à jour l'état du planificateur à l'écriture.
iOS
- L'application iOS écrit d'abord localement dans SQLite.
- Les modifications locales sont mises en file dans une boîte d'envoi.
- La synchronisation envoie les modifications via
/v1/workspaces/{workspaceId}/sync/push. - La synchronisation récupère les mises à jour distantes via
/v1/workspaces/{workspaceId}/sync/pull. - La base de données locale applique les modifications et avance le curseur de synchronisation.
Agents externes
- Les agents commencent par
GET /v1/. - L'amorçage OTP s'exécute sur
auth.<domain>. - L'agent reçoit une clé API de longue durée.
- L'agent charge
/v1/agent/me, liste les espaces de travail, en sélectionne un si nécessaire, puis utilise/v1/agent/sql/queryet/v1/agent/sql/execute.
Planification
Nibomo utilise FSRS comme planificateur de révisions.
Notes d'implémentation :
- le backend et iOS maintiennent des implémentations FSRS miroir
- l'application web reflète le contrat de données de planification, mais n'embarque pas une troisième copie du planificateur
- les réglages du planificateur au niveau de l'espace de travail incluent la rétention souhaitée, les paliers d'apprentissage, les paliers de réapprentissage, l'intervalle maximal et le fuzz
- l'horodatage réel de la révision provient de
reviewedAtClient
Pour le contrat détaillé, voir la logique de planification FSRS dans le dépôt principal.
Authentification
- OTP par e-mail via Cognito
- Cookies de session navigateur sur domaine partagé pour l'application web hébergée
- Amorçage OTP des agents sur
auth.<domain>, avec production d'une ApiKey de longue durée AUTH_MODE=nonepour le développement localAUTH_MODE=cognitopour une authentification proche de la production
Forme du déploiement
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda backendauth.<domain>-> API Gateway + Lambda du service d'authentification- Postgres sur AWS RDS
Le domaine apex peut rester sur un site marketing séparé. S'il est libre pendant l'amorçage, l'infrastructure peut temporairement le rediriger vers app.<domain>.