From ae106e390ad9953ed3f67d8778f0e823240b00f5 Mon Sep 17 00:00:00 2001 From: "david.alvarez" Date: Wed, 10 Jun 2026 18:24:57 +0200 Subject: [PATCH] readme --- README.md | 178 +++---------- frontend/package-lock.json | 512 ------------------------------------- images/edit.jpeg | Bin 0 -> 124999 bytes images/game.jpeg | Bin 0 -> 268547 bytes images/library.jpeg | Bin 0 -> 321347 bytes 5 files changed, 34 insertions(+), 656 deletions(-) create mode 100644 images/edit.jpeg create mode 100644 images/game.jpeg create mode 100644 images/library.jpeg diff --git a/README.md b/README.md index 6e553f5..43a4d2a 100644 --- a/README.md +++ b/README.md @@ -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). @@ -9,15 +9,6 @@ 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. -### 📡 IGDB metadata & media -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. -- **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. - -Everything degrades gracefully — if Twitch credentials aren't configured, uploads and editing work fine, just without auto-scrape. - ### đŸ“Ļ Handles any file structure DOS games come in all shapes. Dostalgia handles them transparently: @@ -27,6 +18,8 @@ DOS games come in all shapes. Dostalgia handles them transparently: - **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. +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 On upload, Dostalgia scans every `.exe`, `.com`, and `.bat` file and picks the best candidate as the main executable using a scoring system: @@ -38,6 +31,8 @@ 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. +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). ### 🛠 One-click Setup launcher @@ -47,6 +42,8 @@ Many DOS games include a `SETUP.EXE`, `INSTALL.EXE`, or `CONFIG.EXE` used to con - Clicking it launches the setup executable *without modifying the main game bundle* - The setup bundle is generated **on-the-fly** by the server — a modified `.jsdos` is streamed with the setup executable in the autoexec, then discarded. Nothing is written to disk. +This is not supported in RomM, where you would have to run the setup manually from the DOS prompt every time. + ### đŸĒŸ Windows game detection DOSBox can't run Windows executables. Dostalgia's `PlatformDetector` reads MZ/PE/NE headers to detect Windows executables: @@ -55,41 +52,33 @@ DOSBox can't run Windows executables. Dostalgia's `PlatformDetector` reads MZ/PE - If you click Play anyway, a warning overlay explains the limitation with a **Try anyway** fallback - Setup executables that are Windows-native are also filtered out from the Setup button -## How it works +### 📡 IGDB metadata & media +Dostalgia integrates with [IGDB](https://www.igdb.com/) (via Twitch OAuth2) to auto-populate game info: -``` - ┌──────────────────────────────────────────┐ - │ Upload ZIP (multipart) │ - └────────────â”Ŧ─────────────────────────────┘ - â–ŧ - ┌──────────────────────────┐ - │ Unzip & flatten dirs │ - │ Fix .cue references │ - │ Fix absolute paths │ - └────────────â”Ŧ─────────────┘ - â–ŧ - ┌──────────────────────────┐ - │ Detect executables │ - │ Detect CD images │ - │ Detect platform (DOS/W) │ - └────────────â”Ŧ─────────────┘ - â–ŧ - ┌──────────────────────────┐ - │ Build .jsdos bundle │ - │ (ZIP + dosbox.conf + │ - │ jsdos.json) │ - └────────────â”Ŧ─────────────┘ - â–ŧ - ┌──────────────────────────┐ - │ Auto-scrape IGDB │ - │ (year, genre, cover, │ - │ videos, screenshots) │ - └────────────â”Ŧ─────────────┘ - â–ŧ - ┌──────────────────────────┐ - │ Save game.json │ - └──────────────────────────┘ -``` +- **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. +- **Media** — Videos (YouTube embeds) and screenshots (1080p) are fetched and displayed in a scrollable media gallery with a preview player. + +**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. + +### 📷 Screenshots + +![library](images/library.jpeg "Library") +![game](images/game.jpeg "game") +![edit](images/edit.jpeg "edit") ## Quick Start @@ -143,103 +132,4 @@ java -jar target/quarkus-app/quarkus-run.jar - **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` -- **Saves**: Browser localStorage / indexedDB (managed by js-dos) - -## 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/games/:id/setup-bundle` | Stream a setup .jsdos bundle (on-the-fly) -GET | `/api/games/:id/download` | Download the game's .jsdos bundle -GET | `/api/igdb/status` | Check if IGDB is configured -GET | `/api/igdb/search?q=` | Search IGDB for a game -POST | `/api/igdb/scrape/:id` | Auto-scrape or apply specific IGDB result - -## Game JSON Schema - -```json -{ - "id": "doom", - "title": "Doom", - "year": 1993, - "genre": "FPS", - "developer": "id Software", - "publisher": "id Software", - "description": "You've signed up for...", - "bundle_file": "doom/doom.jsdos", - "executable": "DOOM.EXE", - "executables": ["DOOM.EXE", "SETUP.EXE"], - "setup_exe": "SETUP.EXE", - "has_setup": true, - "platform": "dos", - "bundle_size": 4194304, - "has_cover": true, - "screenshots": ["https://..."], - "videos": ["dQw4w9WgXcQ"], - "igdb_id": 3498, - "ready": true, - "created_at": "2026-05-27T10:00:00Z", - "updated_at": "2026-05-27T10:00:00Z" -} -``` - -## IGDB Metadata (Optional) - -Dostalgia can auto-populate game metadata (year, genre, developer, publisher, 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. - -## Comparison with RomM - -[RomM](https://www.romm.app/) is a popular ROM manager with web-based emulation. Here's how Dostalgia compares specifically for MS-DOS games: - -| Feature | Dostalgia | RomM | -|---|---|---| -| **Emulator** | js-dos v8 (dedicated DOSBox WebAssembly) | EmulatorJS with dosbox-pure core | -| **Bundle format** | Auto-generated .jsdos with embedded config | Raw ZIP + manual .conf file | -| **Executable detection** | Automatic (smart scoring: depth, size, platform, installer filtering) | Manual — user must type `mount`, `cd`, and `exe` commands or write a .conf | -| **CD mounting** | Automatic — detects .iso/.cue/.img/.ccd/.bin, fixes broken cues, mounts in config | Manual — user must write `imgmount` commands in .conf | -| **Setup executable** | Auto-detected, one-click launch via on-the-fly streaming bundle | Not supported — user must run setup manually from DOS prompt | -| **Windows detection** | PE/NE header analysis, UI badge, disabled play button with fallback | Not supported | -| **IGDB integration** | Yes — auto-scrape, manual search, cover, genre, dev, publisher, videos, screenshots | Not for DOS specifically | -| **Config patching** | Automatic — `ConfigPatcher` rewrites hardcoded `C:\` paths in game configs | Not available | -| **GOG DOS games** | Supported (after flattening + path patching) | Explicitly NOT supported | -| **Database** | None — JSON files per game | PostgreSQL | -| **Upload size** | 2 GB limit | Depends on configuration | -| **Save states** | Yes (browser storage via js-dos) | Yes (via EmulatorJS) | -| **Target audience** | DOS-only, streamlined | Multi-platform, general-purpose | - -**When to use RomM:** If you're managing ROMs across many platforms (NES, SNES, Genesis, PS1, etc.) alongside DOS games. - -**When to use Dostalgia:** If you have a focused DOS collection and want a zero-fuss experience where you upload a ZIP and everything just works — executable detection, CD mounting, metadata, screenshots. - -## Publishing the Docker image - -The Docker image is fully self-contained (Java JAR + static frontend, no database). To publish: - -```bash -docker build -t dostalgia . -docker tag dostalgia ghcr.io/yourname/dostalgia:latest -docker push ghcr.io/yourname/dostalgia:latest -``` - -Secrets are never baked into the image — users provide `TWITCH_CLIENT_ID` / `TWITCH_CLIENT_SECRET` at runtime via environment variables (or skip IGDB entirely). +- **Saves**: Browser localStorage / indexedDB (managed by js-dos) \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d63c0e0..66c0173 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -561,24 +561,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", @@ -595,24 +577,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", @@ -629,24 +593,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/sunos-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", @@ -2944,420 +2890,6 @@ } } }, - "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/vitest/node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/vitest/node_modules/@vitest/mocker": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz", @@ -3385,50 +2917,6 @@ } } }, - "node_modules/vitest/node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, "node_modules/vitest/node_modules/vite": { "version": "8.0.16", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", diff --git a/images/edit.jpeg b/images/edit.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a6e41dccec957c6b28f1d50acce6d3bc3b16dd6e GIT binary patch literal 124999 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 dimeqC^Oe7J0}~C^ZWC7(u2yL~<=f!_SfYm~kYc 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%0DGP)YsGxO>v4!=ojbj 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