Arhitectură
Prezentarea sistemului
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>
Principii
- Domenii publice separate pentru
app,apișiauth - Postgres este sursa de adevăr
- Clientul iOS este offline-first, cu SQLite local și sincronizare
- Aplicația web, aplicația iOS și interfața pentru agenți externi folosesc același model de spațiu de lucru
- Agenții externi pornesc de la
GET https://api.nibomo.com/v1/
Clienți acceptați
- Aplicația web pe
app.nibomo.com - Aplicația iOS în repository-ul principal, cu stocare SQLite locală
- Aplicația Android pe Google Play
- Clienți de tip agent extern prin descoperire, inițializare OTP și
Authorization: ApiKey
Modelul de date
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Fluxul de date
Web
- Browserul se autentifică prin
auth.<domain>. - Aplicația web încarcă datele spațiului de lucru de la
api.<domain>. - Cererile către chatul AI trec prin
/chat/local-turn. - Trimiterea unei recapitulări actualizează starea planificatorului la scriere.
iOS
- Aplicația iOS scrie mai întâi local, în SQLite.
- Modificările locale sunt puse într-o coadă de ieșire (outbox).
- Sincronizarea încarcă modificările prin
/v1/workspaces/{workspaceId}/sync/push. - Sincronizarea descarcă actualizările de la distanță prin
/v1/workspaces/{workspaceId}/sync/pull. - Baza de date locală aplică modificările și avansează cursorul de sincronizare.
Agenți externi
- Agenții pornesc cu
GET /v1/. - Inițializarea OTP rulează pe
auth.<domain>. - Agentul primește o cheie API cu durată lungă de valabilitate.
- Agentul încarcă
/v1/agent/me, listează spațiile de lucru, selectează unul dacă e nevoie și apoi folosește/v1/agent/sql/queryși/v1/agent/sql/execute.
Programarea recapitulărilor
Nibomo folosește FSRS ca planificator al recapitulărilor.
Note de implementare:
- backendul și aplicația iOS păstrează implementări FSRS oglindite
- aplicația web oglindește contractul de date pentru programare, dar nu include o a treia copie a planificatorului
- setările planificatorului la nivel de spațiu de lucru includ retenția dorită, pașii de învățare, pașii de reînvățare, intervalul maxim și variația aleatorie (fuzz)
- momentul real al recapitulării provine din
reviewedAtClient
Pentru contractul detaliat, consultă logica de programare FSRS din repository-ul principal.
Autentificare
- OTP pe e-mail prin Cognito
- Cookie-uri de sesiune în browser, pe domeniul comun, pentru aplicația web găzduită
- Inițializarea OTP pentru agenți pe
auth.<domain>, care emite o cheie ApiKey cu durată lungă de valabilitate AUTH_MODE=nonepentru dezvoltarea localăAUTH_MODE=cognitopentru autentificare similară cu producția
Structura implementării
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + backend Lambdaauth.<domain>-> API Gateway + serviciu de autentificare Lambda- Postgres în AWS RDS
Domeniul rădăcină (apex) poate rămâne pe un site de prezentare separat. Dacă este liber în timpul inițializării, infrastructura îl poate redirecționa temporar către app.<domain>.