# 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 ### With Docker Compose (easiest) ```bash # 1. (Optional) Enable IGDB metadata auto-scrape cp .env.example .env # Edit .env with your Twitch credentials (see IGDB section below) # 2. Build & run docker compose up -d ``` Open http://localhost:8765 ### With Docker ```bash docker build -t dostalgia . docker run -p 8765:8765 -v $(pwd)/data:/data \ -e TWITCH_CLIENT_ID=your_id \ -e TWITCH_CLIENT_SECRET=your_secret \ dostalgia ``` ## 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 } ``` ## IGDB Metadata (Optional) Dostalgia can auto-populate game metadata (year, genre, developer, cover art, screenshots, videos) from the [IGDB](https://www.igdb.com/) database. This requires a Twitch API application. **Setup:** 1. Go to https://dev.twitch.tv/console/apps → **Register Your Application** 2. Name: `Dostalgia` (or anything), OAuth Redirect URL: `http://localhost`, Category: **Other** 3. Copy the **Client ID** and generate a **Client Secret** 4. Provide them via environment variables: | Method | How | |--------|-----| | Docker run | `-e TWITCH_CLIENT_ID=xxx -e TWITCH_CLIENT_SECRET=yyy` | | Docker Compose | Copy `.env.example` to `.env` and fill in the values | | Local dev | `export TWITCH_CLIENT_ID=xxx TWITCH_CLIENT_SECRET=yyy` | IGDB features degrade gracefully — if credentials aren't set, uploads and metadata editing still work, just without auto-scrape.