19 commits, clean linear history
- 33 backend tests, all passing
- Frontend compiles cleanly
What was built:
Backend (Haskell/Servant):
- PostgreSQL schema (5 tables, 7 indexes)
- Session-based auth (bcrypt + in-memory session store)
- Full REST API: auth (3 endpoints), decks (5), cards (3), drill (3), dashboard (1)
- SM-2 spaced repetition algorithm with unit tests
- Static file serving for the Elm SPA
Frontend (Elm):
- SPA with client-side routing (7 routes)
- Login/Register with session management
- Dashboard with stats, streaks, and recent activity
- Deck list with create/delete
- Deck editor with card CRUD and progressive hints (ordered list with reorder)
- Drill setup with rule selection (Spaced/Random/Missed)
- Drill session with full state machine (question → hints → answer → score → review round)
- Auth guards, empty states, and CSS styling
To run: make build && cabal run flash-server → http://localhost:3100
- 33 backend tests, all passing