# Dostalgia A nostalgic DOS game hub. Upload your old DOS games, scrape artwork, and play them directly in the browser via js-dos (WebAssembly DOSBox). ## Quick Start ```bash # Build and run with Docker docker build -t dostalgia . docker run -p 8765:8765 -v $(pwd)/data:/data dostalgia ``` Open http://localhost:8765 ## Development (without Docker) Terminal 1 — Frontend dev server: ```bash cd frontend && npm install && npm run dev ``` Terminal 2 — Quarkus dev server: ```bash mvn quarkus:dev ``` Open http://localhost:5173 (Vite proxies API calls to Quarkus on port 8765) ### Production build (local) ```bash cd frontend && npm install && npm run build mvn package -DskipTests java -jar target/quarkus-app/quarkus-run.jar ``` ## Architecture - **Backend**: Quarkus (Java 21, JAX-RS) — ~5 REST resource classes, zero database - **Frontend**: Svelte 5 SPA with hash-based routing - **Emulation**: js-dos v8 loaded from CDN, runs DOSBox in WebAssembly - **Storage**: JSON-per-game under `/data/games/{id}/game.json` ## API | Method | Path | Description | |--------|------|-------------| | GET | `/api/games` | List all games | | GET | `/api/games/:id` | Get game details | | PATCH | `/api/games/:id` | Update game metadata | | DELETE | `/api/games/:id` | Delete a game | | POST | `/api/upload` | Upload a game ZIP (multipart) | | POST | `/api/games/:id/cover` | Upload cover art | | GET | `/api/igdb/search?q=` | Search IGDB (placeholder) | ## Game JSON Schema ```json { "id": "doom", "title": "Doom", "year": 1993, "genre": "FPS", "developer": "id Software", "bundle_file": "doom.jsdos", "has_cover": true, "ready": true } ```