Status: alpha. Functional and tested, but not yet declared stable. Expect rough edges and breaking changes before 1.0.
A self-hosted platform (Docker / Coolify) to upload Anki decks (.apkg) via a
desktop add-on or manual upload, share them behind a single site-wide password,
and give users a browser-based review experience with optional account creation
for progress saving.
| Tier | Auth | Can do |
|---|---|---|
| Visitor | Site-wide password (SITE_PASSWORD) |
Browse decks/cards, download .apkg |
| Registered user | Username + password → JWT | Above + review with progress tracking |
| Admin | Env-var credentials | Upload, manage decks & users, API keys |
cp .env.example .env # then edit secrets (JWT_SECRET, SITE_COOKIE_SECRET, …)
docker compose up -d --build
# API: http://localhost:3000/api/health -> { "status": "ok" }
# Web: http://localhost:3001| Path | What |
|---|---|
server/ |
Node.js + Express API (APKG parser, SRS, auth, admin) |
web/ |
Next.js frontend (App Router) |
anki-addon/ |
Anki Desktop add-on (right-click → share deck) |
docker-compose.yml |
db (Postgres 16) + server + web |
| Doc | Covers |
|---|---|
docs/API.md |
REST API reference + auth matrix |
docs/DEPLOYMENT.md |
Docker/Coolify deploy, env, backups, restore |
docs/SECURITY.md |
Threat model, mitigations, reporting |
CONTRIBUTING.md |
Dev setup, verification, conventions |
NOTES.md |
Review-gate results & known limitations |
PLAN.md |
Full architecture, schema, SRS rules, phased roadmap |
# server/
npm run lint && npm run typecheck && npm test -- --coverage
# web/
npm run lint && npm run typecheck && npm run test:unit
# anki-addon/
python -m pytestSee PLAN.md for the full architecture, schema, API, SRS rules, and phased gates.