Arquitectura
Descripción 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>
Principios
- Dominios públicos separados para
app,apiyauth - Postgres es la fuente de la verdad
- El cliente iOS primero está fuera de línea con SQLite local más sincronización
- La aplicación web, la aplicación de iOS y la superficie del agente externo comparten el mismo modelo de espacio de trabajo.
- Los agentes externos comienzan desde
GET https://api.flashcards-open-source-app.com/v1/
Clientes admitidos
- Aplicación web en
app.flashcards-open-source-app.com - Aplicación iOS en el repositorio principal con almacenamiento SQLite local
- Aplicación de Android en Google Play
- Clientes de agentes externos a través de descubrimiento, arranque OTP y
Authorization: ApiKey
Modelo de datos
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Flujo de datos
Web
- El navegador inicia sesión a través de
auth.<domain>. - La aplicación web carga datos del espacio de trabajo desde
api.<domain>. - Las solicitudes de chat de IA pasan por
/chat/local-turn. - Revisar los envíos y actualizar el estado del programador al escribir.
iOS
- La aplicación de iOS escribe primero localmente en SQLite.
- Los cambios locales se ponen en cola en una bandeja de salida.
- Sincronizar los cambios de carga a través de
/v1/workspaces/{workspaceId}/sync/push. - Sincronizar descargas y actualizaciones remotas a través de
/v1/workspaces/{workspaceId}/sync/pull. - La base de datos local aplica los cambios y avanza el cursor de sincronización.
Agentes Externos
- Los agentes comienzan con
GET /v1/. - El arranque de OTP se ejecuta en
auth.<domain>. - El agente recibe una clave API de larga duración.
- El agente carga
/v1/agent/me, enumera los espacios de trabajo, selecciona uno si es necesario y luego usa/v1/agent/sql.
Programación
Flashcards utiliza FSRS como programador de revisiones.
Notas de implementación:
- El backend y iOS mantienen implementaciones de FSRS reflejadas
- la aplicación web refleja el contrato de datos de programación, pero no envía una tercera copia del programador
- La configuración del programador a nivel de espacio de trabajo incluye retención deseada, pasos de aprendizaje, pasos de reaprendizaje, intervalo máximo y confusión.
- la marca de tiempo de revisión real proviene de
reviewedAtClient
Para obtener un contrato detallado, consulte lógica de programación FSRS en el repositorio principal.
autenticación
- OTP por correo electrónico a través de Cognito
- Cookies de sesión del navegador de dominio compartido para la aplicación web alojada
- Arranque del agente OTP en
auth.<domain>con salida ApiKey de larga duración AUTH_MODE=nonepara el desarrollo localAUTH_MODE=cognitopara autenticación similar a producción
Forma de implementación
app.<domain>-> NubeFront + S3api.<domain>-> API Gateway + motor Lambdaauth.<domain>-> API Gateway + servicio de autenticación Lambda- Postgres en AWS RDS
El dominio principal puede permanecer en un sitio de marketing independiente. Si está libre durante el arranque, la infraestructura puede redirigirlo temporalmente a app.<domain>.