Architektura
Przegląd systemu
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>
Zasady
- Osobne domeny publiczne dla
app,apiiauth - Postgres jest źródłem prawdy
- Klient iOS działa w modelu offline-first z lokalną bazą SQLite i synchronizacją
- Aplikacja webowa, aplikacja iOS i interfejs dla zewnętrznych agentów korzystają z tego samego modelu obszaru roboczego
- Zewnętrzni agenci zaczynają od
GET https://api.nibomo.com/v1/
Obsługiwani klienci
- Aplikacja webowa pod adresem
app.nibomo.com - Aplikacja iOS w głównym repozytorium z lokalną bazą SQLite
- Aplikacja na Androida w Google Play
- Zewnętrzni klienci agentów przez discovery, inicjalizację OTP i
Authorization: ApiKey
Model danych
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Przepływ danych
Web
- Przeglądarka loguje się przez
auth.<domain>. - Aplikacja webowa wczytuje dane obszaru roboczego z
api.<domain>. - Żądania czatu AI przechodzą przez
/chat/local-turn. - Wysłane powtórki aktualizują stan harmonogramu w momencie zapisu.
iOS
- Aplikacja iOS najpierw zapisuje dane lokalnie w SQLite.
- Lokalne zmiany trafiają do kolejki zmian oczekujących na wysłanie.
- Synchronizacja wysyła zmiany przez
/v1/workspaces/{workspaceId}/sync/push. - Synchronizacja pobiera zdalne aktualizacje przez
/v1/workspaces/{workspaceId}/sync/pull. - Lokalna baza danych stosuje zmiany i przesuwa kursor synchronizacji.
Zewnętrzni agenci
- Agenci zaczynają od
GET /v1/. - Inicjalizacja OTP odbywa się w
auth.<domain>. - Agent otrzymuje długoterminowy klucz API.
- Agent wczytuje
/v1/agent/me, pobiera listę obszarów roboczych, w razie potrzeby wybiera jeden, a następnie korzysta z/v1/agent/sql/queryi/v1/agent/sql/execute.
Planowanie powtórek
Nibomo używa FSRS do planowania powtórek.
Uwagi implementacyjne:
- backend i iOS utrzymują lustrzane implementacje FSRS
- aplikacja webowa odwzorowuje kontrakt danych planowania, ale nie zawiera trzeciej kopii mechanizmu planowania
- ustawienia planowania na poziomie obszaru roboczego obejmują docelową retencję, kroki nauki, kroki ponownej nauki, maksymalny odstęp i fuzz
- rzeczywisty czas powtórki pochodzi z
reviewedAtClient
Szczegółowy kontrakt opisuje logika planowania FSRS w głównym repozytorium.
Uwierzytelnianie
- OTP z e-maila przez Cognito
- Pliki cookie sesji przeglądarki we wspólnej domenie dla hostowanej aplikacji webowej
- Inicjalizacja OTP dla agentów w
auth.<domain>, której wynikiem jest długoterminowy ApiKey AUTH_MODE=nonew lokalnym środowisku deweloperskimAUTH_MODE=cognitodo uwierzytelniania zbliżonego do produkcyjnego
Struktura wdrożenia
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + backend na Lambdzieauth.<domain>-> API Gateway + usługa uwierzytelniania na Lambdzie- Postgres w AWS RDS
Domena główna może nadal obsługiwać osobną witrynę marketingową. Jeśli przy pierwszym wdrożeniu jest wolna, infrastruktura może tymczasowo przekierowywać ją na app.<domain>.