A fast, fully client-side flashcard tool. No login, no server, no analytics. Cards live in your browser; export the whole library to JSON any time.
Requires Node 20+ and npm.
npm install
npm run devOpens at http://localhost:5173 with hot module reload.
| Command | What it does |
|---|---|
npm run dev |
Vite dev server with HMR |
npm run build |
Production build β dist/ |
npm run preview |
Serve the production build locally |
npm run check |
svelte-check (types + Svelte diagnostics) |
- Vite β build tool and dev server with HMR.
- Svelte 5 β UI framework with the runes API.
- TypeScript β type safety across the app.
idb-keyvalβ tiny IndexedDB wrapper for local card storage.marked+DOMPurifyβ markdown rendering, sanitized.- Geist Sans + Geist Mono β self-hosted via Fontsource.
Builds to ~46 KB gzipped JS + ~3.5 KB CSS, under the 50 KB target.
src/
βββ App.svelte β top-level layout + view switch
βββ app.css β CSS tokens, shared button system, base styles
βββ main.ts β font imports, mount()
βββ components/
β βββ Header.svelte β brand + nav tabs
βββ lib/
β βββ router.ts β hash-based router
β βββ storage.ts β IndexedDB get/save/delete
β βββ markdown.ts β marked + DOMPurify
β βββ theme.ts β light / dark / system
β βββ shortcuts.ts β global g-chord nav handler
β βββ keyboard-help.ts β shortcut reference rendered on About
β βββ export.ts β JSON backup download
β βββ import.ts β JSON merge restore
β βββ id.ts β URL-safe 8-char id generator
β βββ types.ts β Card type
βββ views/
βββ Add.svelte β capture / edit a card
βββ Browse.svelte β list, export, import, delete
βββ Quiz.svelte β shuffled queue with flip animation
βββ About.svelte β intro, settings, shortcuts, data location
#/addβ capture a new card (default)#/edit/:idβ edit an existing card#/browseβ list of all cards#/quizβ flip through a shuffled queue#/aboutβ intro, theme picker, keyboard shortcuts, data location
Nav is Gmail-style chord shortcuts: g a (Add) Β· g b (Browse) Β· g q (Quiz). Quiz: Space to flip, n/p (or β/β) to navigate, e to edit. Save in Add is β/Ctrl + Enter; Esc clears or cancels.
Full list on the About page.
Cards live in your browser's IndexedDB under the flashcards database. Nothing is sent anywhere.
- Export (Browse) β download the whole library as JSON.
- Import (Browse) β merge a JSON file back in.
- Wipe everything: DevTools β Application β IndexedDB β
flashcardsβ Delete database.
Hosted on Cloudflare Pages with Git integration β every push to main rebuilds and ships.
| Setting | Value |
|---|---|
| Build command | npm run build |
| Build output | dist/ |
| Node version | 20 (via NODE_VERSION env var) |
MIT Β© 2026 Bhargav Kowshik.