A frictionless, spaced-repetition flashcard app. Everything runs client-side — no backend, no account, no server-side database. Your data lives in your browser's IndexedDB and never leaves it unless you export it yourself.
- Projects → Decks → Cards — a flat, simple hierarchy (no nesting, no tags)
- FSRS scheduling — modern spaced-repetition algorithm (the same one Anki now defaults to), not the older SM-2
- Basic and Cloze cards, with image/audio embeds and a live markdown preview while you write
- Review session built for both desktop and mobile: keyboard shortcuts
(
Spaceto reveal,1-4to grade) and swipe gestures, with next-interval previews on every grade button - Dashboard showing what's due today, broken down by project
- Stats — retention rate, review streak, 7-day due forecast
- Reminders — a daily time + minimum-due threshold, surfaced as a browser notification when the installed app is open
- Passphrase lock screen (a UI gate, not encryption — see below)
- Dark/light theme, defaulting to system preference, overridable anytime
- Manual JSON backup (export/import), with a nudge if it's been a while
- Installable PWA — works offline once loaded, add-to-home-screen on mobile and desktop
- No sync between devices/browsers — the manual JSON export/import is the only way to move data around
- The passphrase lock is a UI gate only; data is not encrypted at rest
- No AI-assisted card generation (e.g. from a photo) — everything is typed or pasted in by hand
| Layer | Choice |
|---|---|
| Framework | Angular (standalone components, Signals, zoneless change detection) |
| Scheduling | ts-fsrs |
| Storage | Dexie over IndexedDB |
| Styling | Tailwind CSS v4 |
| UI components | spartan-ng — headless components on Angular CDK |
| Markdown | marked, rendered through Angular's built-in sanitizer |
| Hosting | GitHub Pages, deployed via GitHub Actions |
src/app/
core/
data/ Dexie database definition
models/ Project, Deck, Card, ReviewLogEntry, MediaAsset, AppSettings
services/ FSRS, project/deck/card CRUD, review, settings, theme, lock,
backup, notifications, media, markdown rendering
utils/ cloze parsing, interval formatting, id generation
features/ one folder per screen (dashboard, projects, decks, cards,
review, stats, settings, lock)
shared/ app shell (nav), reusable components (theme toggle, card
preview)
libs/ui/ generated spartan-ng components (button, dialog, card, …)
Requires Node 22 (see .nvmrc).
npm install
ng serveOpen http://localhost:4200/.
ng build # production build to dist/deckle
ng test # unit tests (Vitest)Pushing to main triggers .github/workflows/deploy.yml, which builds the app
with --base-href /<repo-name>/ and publishes it to GitHub Pages via GitHub
Actions.
Before the first deploy:
- The repo must be public (GitHub Pages needs a paid plan to publish from a private repo).
- In the repo's Settings → Pages, set Build and deployment → Source to GitHub Actions.