- Electron - Desktop application framework
Frontend
- React + Javascript
- TailwindCSS
- Vite
Backend
- Node.js + Express
- NoSQL (MongoDB)
Root Directory
npm startto start the electron appnpm run start:fullto start frontend + backend + electron together
These scripts are configured to run on Windows, macOS, and Linux.
- Copy
.env.exampleto.envin the project root. - Set
MONGODB_URI(local example:mongodb://127.0.0.1:27017/slammer). - Install server dependencies:
cd servernpm install
- Start backend:
npm run start
GET /health-> server + DB readiness stateGET /cards-> paginated cards (?deckId=<id>&page=1&limit=50&q=term&sourceFile=file.txt&sortBy=createdAt&sortOrder=desc)PATCH /cards/:cardId-> update card fields (front,back,frontHtml,backHtml)DELETE /cards/:cardId-> delete a single cardPOST /upload(multipart/form-data, field namefile) -> parses Anki-style TXT, creates/fetches deck, and saves cardsGET /decks-> paginated decks (?page=1&limit=50&q=biology&sortBy=name&sortOrder=asc)POST /decks-> create deck (or return existing by name)GET /decks/:deckId/cards-> paginated cards for a specific deckDELETE /decks/:deckId-> delete deck and cascade delete its cards
Versioned API is also mounted at /api/v1 with the same routes (for example /api/v1/decks).
/api/v1 responses use envelope policy:
- Success:
{ "apiVersion": "v1", "data": { ... } } - Error:
{ "apiVersion": "v1", "error": "message" }
- Start backend in one terminal:
cd servernpm run start
- In another terminal run smoke test:
cd servernpm run smokenpm run smoke:v1npm test(integration tests)npm run migrate(schema/data migrations)
- Write routes (
POST,PATCH,DELETE) require API key auth. - Send header:
x-api-key: <LOCAL_API_KEY>(orAuthorization: Bearer <LOCAL_API_KEY>).
- Rate limit is enabled (defaults: 120 requests/min per route+IP).
- JSON/urlencoded payload limit:
1mb. - Uploads only accept
.txtfiles up to2mb.