Arquitetura
Visão geral do 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>
Princípios
- Domínios públicos separados para
app,apieauth - O Postgres é a fonte da verdade
- O cliente iOS é offline-first, com SQLite local e sincronização
- O app web, o app iOS e a superfície de agentes externos compartilham o mesmo modelo de espaço de trabalho
- Agentes externos começam em
GET https://api.flashcards-open-source-app.com/v1/
Clientes suportados
- App web em
app.flashcards-open-source-app.com - App iOS no repositório principal, com armazenamento local em SQLite
- App Android no Google Play
- Clientes de agentes externos por descoberta, bootstrap por OTP e
Authorization: ApiKey
Modelo de dados
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Fluxo de dados
Web
- O navegador faz login por
auth.<domain>. - O app web carrega os dados do espaço de trabalho de
api.<domain>. - As requisições do chat de IA passam por
/chat/local-turn. - Os envios de revisão atualizam o estado do agendador na escrita.
iOS
- O app iOS grava primeiro no SQLite local.
- As alterações locais entram na fila de um outbox.
- A sincronização envia as alterações por
/v1/workspaces/{workspaceId}/sync/push. - A sincronização baixa as atualizações remotas por
/v1/workspaces/{workspaceId}/sync/pull. - O banco local aplica as alterações e avança o cursor de sincronização.
Agentes externos
- Os agentes começam com
GET /v1/. - O bootstrap por OTP roda em
auth.<domain>. - O agente recebe uma chave de API de longa duração.
- O agente carrega
/v1/agent/me, lista os espaços de trabalho, seleciona um se precisar e então usa/v1/agent/sql/querye/v1/agent/sql/execute.
Agendamento
O Nibomo usa o FSRS como agendador de revisões.
Notas de implementação:
- o backend e o iOS mantêm implementações espelhadas do FSRS
- o app web espelha o contrato de dados do agendamento, mas não traz uma terceira cópia do agendador
- as configurações de agendador no nível do espaço de trabalho incluem retenção desejada, passos de aprendizado, passos de reaprendizado, intervalo máximo e fuzz
- o horário real da revisão vem de
reviewedAtClient
Para o contrato detalhado, veja a lógica de agendamento do FSRS no repositório principal.
Autenticação
- OTP por e-mail via Cognito
- Cookies de sessão de navegador em domínio compartilhado para o app web hospedado
- Bootstrap de agente por OTP em
auth.<domain>, com saída de ApiKey de longa duração AUTH_MODE=nonepara desenvolvimento localAUTH_MODE=cognitopara autenticação parecida com a de produção
Formato da implantação
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + backend em Lambdaauth.<domain>-> API Gateway + serviço de autenticação em Lambda- Postgres no Amazon RDS
O domínio apex pode continuar em um site de marketing separado. Se ele estiver livre durante o bootstrap, a infraestrutura pode redirecioná-lo temporariamente para app.<domain>.