capital letter

This commit is contained in:
david.alvarez
2026-06-11 13:32:44 +02:00
parent e86778e72d
commit 89315db8af
6 changed files with 18 additions and 18 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Dostalgia — Environment Configuration # DOStalgia — Environment Configuration
# Copy this file to .env and fill in your values: # Copy this file to .env and fill in your values:
# cp .env.example .env # cp .env.example .env
+3 -3
View File
@@ -1,4 +1,4 @@
# This workflow builds and deploys Dostalgia whenever code is pushed to main. # This workflow builds and deploys DOStalgia whenever code is pushed to main.
# The runner has Docker socket access so it can manage containers on the host. # The runner has Docker socket access so it can manage containers on the host.
# Parameters match the docker-compose at: # Parameters match the docker-compose at:
# /appdata/dockhand/stacks/unraid/dostalgia/compose.yaml # /appdata/dockhand/stacks/unraid/dostalgia/compose.yaml
@@ -48,10 +48,10 @@ jobs:
sleep 5 sleep 5
STATUS=$(docker inspect -f '{{.State.Status}}' ${{ env.CONTAINER_NAME }}) STATUS=$(docker inspect -f '{{.State.Status}}' ${{ env.CONTAINER_NAME }})
if [ "$STATUS" = "running" ]; then if [ "$STATUS" = "running" ]; then
echo "✅ Dostalgia container is running" echo "✅ DOStalgia container is running"
echo "--- last logs ---" echo "--- last logs ---"
docker logs ${{ env.CONTAINER_NAME }} --tail 5 docker logs ${{ env.CONTAINER_NAME }} --tail 5
echo "✅ Dostalgia deployed!" echo "✅ DOStalgia deployed!"
else else
echo "❌ Container status: $STATUS" echo "❌ Container status: $STATUS"
docker logs ${{ env.CONTAINER_NAME }} --tail 30 docker logs ${{ env.CONTAINER_NAME }} --tail 30
+1 -1
View File
@@ -1,4 +1,4 @@
# Dostalgia — Quarkus multi-stage build # DOStalgia — Quarkus multi-stage build
# ─── 1. Build frontend ─────────────────────────── # ─── 1. Build frontend ───────────────────────────
FROM node:20-alpine AS frontend FROM node:20-alpine AS frontend
+11 -11
View File
@@ -1,4 +1,4 @@
# DOSTALGIA 🕹️ # DOStalgia 🕹️
A nostalgic DOS game hub. Upload your old DOS games, auto-scrape artwork and metadata from IGDB, and play them directly in your browser via js-dos (DOSBox compiled to WebAssembly). A nostalgic DOS game hub. Upload your old DOS games, auto-scrape artwork and metadata from IGDB, and play them directly in your browser via js-dos (DOSBox compiled to WebAssembly).
@@ -10,18 +10,18 @@ Every uploaded game is packaged into a `.jsdos` bundle — a standard ZIP with e
**Save states are automatic** — js-dos persists your game progress to the browser's storage. Come back anytime and pick up where you left off. **Save states are automatic** — js-dos persists your game progress to the browser's storage. Come back anytime and pick up where you left off.
### 📦 Handles any file structure ### 📦 Handles any file structure
DOS games come in all shapes. Dostalgia handles them transparently: DOS games come in all shapes. DOStalgia handles them transparently:
- **Flattening** — If your ZIP has a single root directory (e.g. `doom/` with all files inside), the extractor flattens it so the game files sit at the bundle root. No extra nesting. - **Flattening** — If your ZIP has a single root directory (e.g. `doom/` with all files inside), the extractor flattens it so the game files sit at the bundle root. No extra nesting.
- **Subdirectory games** — If files are deeper, the autoexec automatically `cd`s to the right directory before launching the executable. - **Subdirectory games** — If files are deeper, the autoexec automatically `cd`s to the right directory before launching the executable.
- **CD images** — Games shipped on CD-ROM often need the disc mounted. Dostalgia detects `.iso`, `.cue`, `.img`, `.ccd`, and `.bin` files, fixes broken CloneCD `.cue` references (where the referenced `.bin` is actually `.img`), and mounts them in both `dosbox.conf` and `jsdos.json`. - **CD images** — Games shipped on CD-ROM often need the disc mounted. DOStalgia detects `.iso`, `.cue`, `.img`, `.ccd`, and `.bin` files, fixes broken CloneCD `.cue` references (where the referenced `.bin` is actually `.img`), and mounts them in both `dosbox.conf` and `jsdos.json`.
- **CD-only games** — If the archive contains only CD images with no executable, a CD-only bundle is created that mounts the disc and drops you at the DOS prompt. - **CD-only games** — If the archive contains only CD images with no executable, a CD-only bundle is created that mounts the disc and drops you at the DOS prompt.
- **Hardcoded paths** — `ConfigPatcher` scans game config files for hardcoded absolute paths (e.g. `C:\FALLOUT1\MASTER.DAT`) that broke after flattening, and rewrites them to relative paths. - **Hardcoded paths** — `ConfigPatcher` scans game config files for hardcoded absolute paths (e.g. `C:\FALLOUT1\MASTER.DAT`) that broke after flattening, and rewrites them to relative paths.
Other solutions such as [RomM](https://www.romm.app/) generate raw ZIP bundles and require you to write your own `dosbox.conf` with manual `mount` and `imgmount` commands. Dostalgia automates all of this for you. Other solutions such as [RomM](https://www.romm.app/) generate raw ZIP bundles and require you to write your own `dosbox.conf` with manual `mount` and `imgmount` commands. DOStalgia automates all of this for you.
### 🔍 Smart executable detection ### 🔍 Smart executable detection
On upload, Dostalgia scans every `.exe`, `.com`, and `.bat` file and picks the best candidate as the main executable using a scoring system: On upload, DOStalgia scans every `.exe`, `.com`, and `.bat` file and picks the best candidate as the main executable using a scoring system:
1. **Not an installer** — INSTALL/SETUP/CONFIG executables are deprioritised 1. **Not an installer** — INSTALL/SETUP/CONFIG executables are deprioritised
2. **DOS executables** — Pure DOS apps are preferred over Windows ones 2. **DOS executables** — Pure DOS apps are preferred over Windows ones
@@ -31,12 +31,12 @@ On upload, Dostalgia scans every `.exe`, `.com`, and `.bat` file and picks the b
All discovered executables are stored and available in the **Edit** page, where you can pick a different one via radio buttons. All discovered executables are stored and available in the **Edit** page, where you can pick a different one via radio buttons.
Again, RomM requires you to manually specify the executable in a custom `dosbox.conf`, while Dostalgia detects and configures it for you. Again, RomM requires you to manually specify the executable in a custom `dosbox.conf`, while DOStalgia detects and configures it for you.
> **⚠️ Cache note:** If you change the executable, the `.jsdos` bundle is patched in-place. Your browser may serve a cached version of the old bundle — if the game doesn't launch with the new executable, **hard-refresh** the play page (Ctrl+Shift+R / Cmd+Shift+R). > **⚠️ Cache note:** If you change the executable, the `.jsdos` bundle is patched in-place. Your browser may serve a cached version of the old bundle — if the game doesn't launch with the new executable, **hard-refresh** the play page (Ctrl+Shift+R / Cmd+Shift+R).
### 🛠 One-click Setup launcher ### 🛠 One-click Setup launcher
Many DOS games include a `SETUP.EXE`, `INSTALL.EXE`, or `CONFIG.EXE` used to configure sound, controls, and graphics. When Dostalgia detects one: Many DOS games include a `SETUP.EXE`, `INSTALL.EXE`, or `CONFIG.EXE` used to configure sound, controls, and graphics. When DOStalgia detects one:
- A **🛠 Setup** button appears on the game detail page - A **🛠 Setup** button appears on the game detail page
- Clicking it launches the setup executable *without modifying the main game bundle* - Clicking it launches the setup executable *without modifying the main game bundle*
@@ -45,7 +45,7 @@ Many DOS games include a `SETUP.EXE`, `INSTALL.EXE`, or `CONFIG.EXE` used to con
This is not supported in RomM, where you would have to run the setup manually from the DOS prompt every time. This is not supported in RomM, where you would have to run the setup manually from the DOS prompt every time.
### 🪟 Windows game detection ### 🪟 Windows game detection
DOSBox can't run Windows executables. Dostalgia's `PlatformDetector` reads MZ/PE/NE headers to detect Windows executables: DOSBox can't run Windows executables. DOStalgia's `PlatformDetector` reads MZ/PE/NE headers to detect Windows executables:
- The game detail page shows a **🪟 Requires Windows 3.1** badge - The game detail page shows a **🪟 Requires Windows 3.1** badge
- The **Play** button is disabled with "Unplayable" text - The **Play** button is disabled with "Unplayable" text
@@ -53,16 +53,16 @@ DOSBox can't run Windows executables. Dostalgia's `PlatformDetector` reads MZ/PE
- Setup executables that are Windows-native are also filtered out from the Setup button - Setup executables that are Windows-native are also filtered out from the Setup button
### 📡 IGDB metadata & media ### 📡 IGDB metadata & media
Dostalgia integrates with [IGDB](https://www.igdb.com/) (via Twitch OAuth2) to auto-populate game info: DOStalgia integrates with [IGDB](https://www.igdb.com/) (via Twitch OAuth2) to auto-populate game info:
- **Auto Scrape** — On upload, Dostalgia searches IGDB by title and fills in year, genre, developer, publisher, description, and cover art. If IGDB finds a DOS result, it prioritises it. - **Auto Scrape** — On upload, DOStalgia searches IGDB by title and fills in year, genre, developer, publisher, description, and cover art. If IGDB finds a DOS result, it prioritises it.
- **Manual Search** — From the game detail page you can search IGDB by any query, browse results with cover thumbnails and DOS badges, and apply the one you want. - **Manual Search** — From the game detail page you can search IGDB by any query, browse results with cover thumbnails and DOS badges, and apply the one you want.
- **Media** — Videos (YouTube embeds) and screenshots (1080p) are fetched and displayed in a scrollable media gallery with a preview player. - **Media** — Videos (YouTube embeds) and screenshots (1080p) are fetched and displayed in a scrollable media gallery with a preview player.
**Setup:** **Setup:**
1. Go to https://dev.twitch.tv/console/apps → **Register Your Application** 1. Go to https://dev.twitch.tv/console/apps → **Register Your Application**
2. Name: `Dostalgia` (or anything), OAuth Redirect URL: `http://localhost`, Category: **Other** 2. Name: `dostalgia` (or anything), OAuth Redirect URL: `http://localhost`, Category: **Other**
3. Copy the **Client ID** and generate a **Client Secret** 3. Copy the **Client ID** and generate a **Client Secret**
4. Provide them via environment variables: 4. Provide them via environment variables:
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 36'><rect x='4' y='6' width='28' height='22' rx='2' fill='%2333FF33' opacity='.15'/><rect x='6' y='8' width='24' height='16' fill='%230A0A0A'/><rect x='8' y='10' width='20' height='10' fill='%2333FF33' opacity='.3'/><rect x='10' y='12' width='6' height='4' fill='%2333FF33' opacity='.6'/><rect x='18' y='12' width='6' height='4' fill='%2333FF33' opacity='.4'/></svg>" /> <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 36'><rect x='4' y='6' width='28' height='22' rx='2' fill='%2333FF33' opacity='.15'/><rect x='6' y='8' width='24' height='16' fill='%230A0A0A'/><rect x='8' y='10' width='20' height='10' fill='%2333FF33' opacity='.3'/><rect x='10' y='12' width='6' height='4' fill='%2333FF33' opacity='.6'/><rect x='18' y='12' width='6' height='4' fill='%2333FF33' opacity='.4'/></svg>" />
<title>Dostalgia</title> <title>DOStalgia</title>
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap" rel="stylesheet" />
+1 -1
View File
@@ -1,4 +1,4 @@
/** API client for Dostalgia backend. */ /** API client for DOStalgia backend. */
const BASE = import.meta.env.PROD ? "" : ""; // Proxy handles it in dev const BASE = import.meta.env.PROD ? "" : ""; // Proxy handles it in dev