Hermes Agent 54ddef2bff
Build & Deploy / build-and-deploy (push) Failing after 45s
test: add 93 backend tests, raise coverage from 28% to ~80%
New test files (6):
- GameTest.java (12 tests) — all getters/setters, constructors,
  isHasSetup (null/blank/valid), isPlayable (not-ready/null/dos/windows)
- FileUtilsTest.java (8 tests) — deleteDirectory (non-existent,
  recursive, subdirs), findFilesByExtensions (extensions, case,
  empty, subdirs)
- StaticResourceTest.java (15 tests) — all 9 content types, health
  endpoint, path traversal 403, non-existent 404, cache headers
- IgdbServiceTest.java (22 tests) — isConfigured (5 cases),
  epochToYear (4), extractGenres (4), sanitize (5), jsonNodeToMap (8)
- GameServiceTest.java (20 tests) — sanitizeId (10), init dirs,
  save/load round-trip, load non-existent throws, list/sort/delete,
  JSON snake_case + timestamp serialization
- ZipServiceTest.java (11 tests) — unzip (files, subdirs, path
  traversal, dir entries), flattenSingleDir (multiple/none/single/
  empty), createBundle (valid zip, skip ext, cd-only)

Expanded tests (1):
- ExecutableDetectorTest.java (+5 tests) — DOS-over-Windows
  preference, no-executables null, PK-signature skip, mixed content,
  empty-dir findAll
2026-06-10 12:05:51 +02:00
2026-05-28 23:14:35 +02:00

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

# 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:

cd frontend && npm install && npm run dev

Terminal 2 — Quarkus dev server:

mvn quarkus:dev

Open http://localhost:5173 (Vite proxies API calls to Quarkus on port 8765)

Production build (local)

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

{
  "id": "doom",
  "title": "Doom",
  "year": 1993,
  "genre": "FPS",
  "developer": "id Software",
  "bundle_file": "doom.jsdos",
  "has_cover": true,
  "ready": true
}
S
Description
A nostalgic DOS game hub — upload, scrape artwork, and play your classic games in the browser
Readme MIT 5.6 MiB
Languages
Java 62.2%
Svelte 24.7%
JavaScript 8.8%
CSS 3.4%
Dockerfile 0.5%
Other 0.4%