# Dostalgia

A nostalgic DOS game hub — upload, scrape artwork, and play classic DOS games directly in the browser via js-dos.

## Quick Start (Docker)

```bash
docker build -t dostalgia .
docker run -p 8765:8765 -v $(pwd)/data:/data dostalgia
```

## Development

Terminal 1 — Go API:
```bash
DOSTALGIA_DEV=1 go run .
```

Terminal 2 — Frontend dev server:
```bash
cd frontend && npm install && npm run dev
```

Open http://localhost:5173

## Architecture

- **Backend**: Single Go binary. No database — each game is a directory with a `game.json` file.
- **Frontend**: Svelte SPA, embedded in the Go binary at build time.
- **Emulation**: js-dos v8 loaded from CDN, runs DOSBox in WebAssembly.
- **Storage**: `/data/games/{id}/` — contains `game.json`, `.jsdos` bundle, and cover art.

## 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",
  "publisher": "id Software",
  "description": "The iconic first-person shooter...",
  "bundle_type": "standard",
  "bundle_file": "doom.jsdos",
  "has_cover": true,
  "ready": true
}
```
