7cc5bddf73
Build & Deploy / build-and-deploy (push) Successful in 14s
- Add .env.example with Twitch credential instructions - Update docker-compose.yml to use env_file instead of inline comments - Add IGDB Metadata section to README with setup walkthrough - Add .env / .env.local to .gitignore to prevent secret leaks
103 lines
2.8 KiB
Markdown
103 lines
2.8 KiB
Markdown
# 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.
|