Kiến trúc
Tổng quan hệ thống
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>
Nguyên tắc
- Các tên miền công khai riêng cho
app,apivàauth - Postgres là nguồn dữ liệu gốc
- Client iOS ưu tiên ngoại tuyến, dùng SQLite cục bộ kèm đồng bộ
- Ứng dụng web, ứng dụng iOS và giao diện cho agent bên ngoài dùng chung một mô hình không gian làm việc
- Agent bên ngoài bắt đầu từ
GET https://api.nibomo.com/v1/
Các client được hỗ trợ
- Ứng dụng web tại
app.nibomo.com - Ứng dụng iOS trong kho mã chính, lưu dữ liệu bằng SQLite cục bộ
- Ứng dụng Android trên Google Play
- Client agent bên ngoài qua URL khám phá, khởi tạo bằng OTP và
Authorization: ApiKey
Mô hình dữ liệu
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
Luồng dữ liệu
Web
- Trình duyệt đăng nhập qua
auth.<domain>. - Ứng dụng web tải dữ liệu không gian làm việc từ
api.<domain>. - Yêu cầu chat AI đi qua
/chat/local-turn. - Mỗi lượt gửi kết quả ôn tập cập nhật trạng thái bộ lập lịch ngay khi ghi.
iOS
- Ứng dụng iOS ghi vào SQLite cục bộ trước.
- Các thay đổi cục bộ được xếp hàng trong một outbox.
- Đồng bộ tải thay đổi lên qua
/v1/workspaces/{workspaceId}/sync/push. - Đồng bộ tải cập nhật từ máy chủ về qua
/v1/workspaces/{workspaceId}/sync/pull. - Cơ sở dữ liệu cục bộ áp dụng các thay đổi và đưa con trỏ đồng bộ tiến lên.
Agent bên ngoài
- Agent bắt đầu bằng
GET /v1/. - Bước khởi tạo bằng OTP chạy trên
auth.<domain>. - Agent nhận một khóa API dùng lâu dài.
- Agent tải
/v1/agent/me, liệt kê các không gian làm việc, chọn một không gian nếu cần, rồi dùng/v1/agent/sql/queryvà/v1/agent/sql/execute.
Lập lịch
Nibomo dùng FSRS làm bộ lập lịch ôn tập.
Ghi chú triển khai:
- backend và iOS giữ hai bản triển khai FSRS song song, giống hệt nhau
- ứng dụng web tuân theo cùng quy ước dữ liệu lập lịch, nhưng không kèm bản sao bộ lập lịch thứ ba
- cài đặt bộ lập lịch ở cấp không gian làm việc gồm tỷ lệ ghi nhớ mong muốn, các bước học, các bước học lại, khoảng cách ôn tập tối đa và độ nhiễu (fuzz)
- thời điểm ôn tập thực tế lấy từ
reviewedAtClient
Để xem quy ước chi tiết, hãy đọc logic lập lịch FSRS trong kho mã chính.
Xác thực
- OTP qua email bằng Cognito
- Cookie phiên trình duyệt trên tên miền dùng chung cho ứng dụng web lưu trữ sẵn
- Khởi tạo agent bằng OTP trên
auth.<domain>, trả về khóa ApiKey dùng lâu dài AUTH_MODE=nonecho phát triển cục bộAUTH_MODE=cognitocho xác thực giống môi trường production
Cấu trúc triển khai
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda cho backendauth.<domain>-> API Gateway + Lambda cho dịch vụ xác thực- Postgres trên AWS RDS
Tên miền gốc có thể tiếp tục dành cho một trang marketing riêng. Nếu tên miền đó còn trống trong lúc khởi tạo, hạ tầng có thể tạm thời chuyển hướng nó tới app.<domain>.