update documentation

This commit is contained in:
2026-08-15 19:49:02 +02:00
parent 443bed4ad6
commit bab3441420
6 changed files with 171 additions and 192 deletions
+3
View File
@@ -16,6 +16,9 @@ jobs:
cache: npm
- run: npm ci
# prebuild.sh wird bewusst übersprungen — die JSON-Daten in src/data/
# wurden lokal generiert und ins Repo committed. Nur lokales `npm run build`
# führt prebuild.sh aus.
- run: npx astro build
- uses: actions/upload-artifact@v4
+5
View File
@@ -138,6 +138,11 @@ npm run preview # → lokaler Production-Server
`prebuild.sh` lädt vor jedem Build externe Daten (JSON) und schreibt sie nach `src/data/`. Die JSON wird committed, der Build hängt nicht vom externen Server ab.
**Wichtig:** `prebuild.sh` wird nur lokal ausgeführt, wenn sich externe Daten
ändern. Das Ergebnis (JSON-Dateien in `src/data/`) wird ins Repo committed.
In der CI/CD (`deploy.yml`) wird `npx astro build` direkt aufgerufen — das
überspringt `prebuild.sh` bewusst, da die JSON-Daten bereits im Repo liegen.
```bash
./prebuild.sh # alle Stages
./prebuild.sh mods # nur MOD-Metadaten
+24 -22
View File
@@ -1,34 +1,36 @@
# PLAN.md - Implementation Roadmap (v2)
# PLAN.md - Implementation Roadmap
## Phase 0 - Scaffold (v1, done) + Phase 0.5 - v2 fixes (done in this drop)
## Phase 0 - Scaffold + v2 Fixes (done)
- [x] Fix: ANSI banner renders (AnsiArt.astro + ansiArt.ts)
- [x] Fix: Disconnect clears state (NavBar.astro)
- [x] Fix: SkyLINE blue accent visible + real header PNG
- [x] 10 boxed ASCII banners w/ dithering bars, 8 gallery patterns, 9 net-boxes
- [x] Tropic DREAMs (4 real), SkyLINE (+3), Kosmos Design (7 new), ESPRIT (4 new)
- [x] MOD Files placeholder tracklist + visual player widget
- [x] MOD Files tracklist + visual player widget
- [x] PHOB!A / Tr@nceMISSION teaser text, favicon.ico + og-image.png
## Phase 1 - Make it actually run
- [ ] npm install, npm run dev, npm run build && npm run preview
- [ ] Modem-Intro-Audio-Clips bereitstellen: public/audio/dial-tone.mp3, dtmf-beeps.mp3, modem-handshake.mp3
## Phase 1 - Build & Infrastructure (done)
- [x] npm install, npm run dev, npm run build && npm run preview
- [x] Modem-Intro-Audio-Clips in public/audio/
- [x] Pre-Build System (fetch_mods.py, prebuild.sh)
- [x] CP437 Webfont (Px437 IBM VGA 8x16, WOFF2+TTF)
## Phase 2 - Real ANSI rendering
- [ ] Feed real .ans files (via OpenCode) into source-assets/ansi/
- [ ] Self-host CP437 webfont under public/fonts/
## Phase 2 - Real ANSI-Art (offen)
- [ ] Echte .ans Dateien aus den 90ern besorgen
- [ ] 8 Filler-Patterns durch echte gescannte/analysierte .ans ersetzen
## Phase 3 - Navigation polish
- [ ] /bbs/atari/ etc. as mobile anchors to /bbs/#atari
- [ ] Astro View Transitions, subtle text-build-in stutter effect
## Phase 3-5 - Content & Visual (fast fertig)
- [x] Tr@nceMISSION, Kosmos Design, ESPRIT, SkyLINE Releases fertig
- [ ] Kosmos Design - outside-sbr.md: Placeholder bereinigen
## Phase 4-5 - Visual + Content
- [ ] Replace filler gallery patterns with real scanned ANSI art
- [ ] Replace placeholder releases with real ones, write real Impressum text
## Phase 6 - MOD Player (fertig)
- [x] chiptune3.js (libopenmpt AudioWorklet) eingebunden
- [x] ModPlayer.tsx mit Playlist
- [x] Echte .mod Dateien werden von moonweb.org gestreamt
## Phase 6 - Amiga MOD player
- [ ] Real WASM MOD player (libopenmpt.js/chiptune3.js), real .mod files
## Phase 7-8 - Infra & Launch
- [ ] files.moonweb.org, public GitHub repo + Cloudflare Pages
- [ ] sitemap.xml/robots.txt, full click-through incl. regression test of
the two v1 bugs (banner visibility + Disconnect)
## Phase 7-8 - Infra & Launch (fertig)
- [x] www.moonweb.org/files/ als Asset-Hosting (Dateien liegen dort)
- [x] GitHub-Repo + Cloudflare Pages Deploy funktioniert
- [x] sitemap.xml / robots.txt
- [x] <title> und <meta description> pro Seite geprüft
- [x] Legal Notice fertig
+26
View File
@@ -29,6 +29,32 @@ npm run preview # serve the production build locally
Cloudflare Pages, connected directly to this repo. Build command
`npm run build`, output directory `dist`.
## Pre-Build System
Das Pre-Build-System lädt vor jedem Build externe Daten (JSON) und schreibt
sie nach `src/data/`. Die JSON wird committed, sodass der Build nicht von
externen Servern abhängt.
```bash
./prebuild.sh # alle Stages
./prebuild.sh mods # nur MOD-Metadaten
```
**Wichtig:** `prebuild.sh` wird nur lokal ausgeführt, wenn sich externe Daten
ändern. Das Ergebnis (JSON-Dateien in `src/data/`) wird ins Repo committed.
In der CI/CD (`deploy.yml`) wird `npx astro build` direkt aufgerufen — das
überspringt `prebuild.sh` bewusst, da die JSON-Daten bereits im Repo liegen.
Aktive Stages:
| Stage | Script | Output | Beschreibung |
|---|---|---|---|
| `mods` | `tools/fetch_mods.py` | `src/data/mods.json` | MOD-Metadaten von moonweb.org |
Neuen Stage hinzufügen:
1. `tools/fetch_<name>.py` erstellen (Output: `src/data/<name>.json`)
2. Case-Block in `prebuild.sh` ergänzen
3. `npm run build` ruft automatisch `prebuild.sh` auf
## WelcomeBanner (Startseite)
Das "THE TEMPLE BBS"-Logo auf der Startseite wird als CP437-Text mit
+51 -32
View File
@@ -1,37 +1,56 @@
# SPEC.md - 28k8.moonweb.org Technical Specification (v2)
# SPEC.md - 28k8.moonweb.org Technical Specification
## v2 changes (bug fixes + requested improvements)
1. Fixed: ANSI banner not visible - v1 only showed a placeholder <pre> comment.
Now rendered via src/components/AnsiArt.astro + src/lib/ansiArt.ts (precomputed
colored HTML via set:html, zero JS required).
2. Fixed: Disconnect not working - v1's mouse link never cleared localStorage,
so '/' bounced straight back to '/bbs/'. Fixed in src/components/NavBar.astro
via a plain onclick attribute that clears state before navigating.
3. More content: Tropic DREAMs (4 real releases), SkyLINE (+3), Kosmos Design
(7, new collection), ESPRIT (4, new collection), MOD Files tracklist, BBS
ANSI Art gallery (8 filler patterns), PHOB!A/Tr@nceMISSION teaser text.
4. More period ASCII art + gradients: 10 full boxed banners (5x7 bitmap font)
each with a dithering gradient bar, plus 9 net-list boxes transcribed
verbatim from the original reference screenshots (Fidonet/Nodelist page).
5. SkyLINE blue accent strengthened (headings/tiles/diz-box/nav-bar) + a real
generated header PNG (public/images/skyline-header.png).
## Architecture
- **Framework:** Astro 4.15+ mit React-Islands
- **Rendering:** Vollständig statisch (SSG), jede Route zur Build-Zeit vorgerendert
- **Hosting:** Cloudflare Pages
- **DNS:** Cloudflare
## Repository layout delta
src/lib/ansiArt.ts, src/components/AnsiArt.astro, src/components/NavBar.astro,
tools/generate_ansi.py, public/images/skyline-header.png, public/favicon.ico,
public/og-image.png, src/content/kosmos-design/*.md, src/content/esprit/*.md
## Repository Layout
```
src/
├── pages/ # Astro-Routing (eine Datei = eine URL)
├── components/ # Astro-Components + React-Islands
├── content/ # Markdown+Frontmatter für Releases
├── data/ # Pre-Build JSON (mods.json)
├── lib/ # ansiArt.ts, keymap.ts, sound.ts
└── styles/ # global.css
public/
├── audio/ # Modem-Intro Sounds
├── js/ # chiptune3.js + WASM Worker
├── fonts/ # CP437 Webfont
└── images/ # skyline-header.png, og-image.png
tools/ # Pre-Build Scripts (Python)
```
## AnsiArt contract
BANNER_<NAME> / ANSI_GALLERY / BOX_<NAME> exports, HTML with CSS classes
c-border-red, c-main-red, c-shadow-red, c-border-blue, c-main-blue,
c-shadow-blue, c-white, c-grey, c-pink, c-cyan (all in global.css).
Render via <AnsiArt html={BANNER_X} />.
## AnsiArt Contract
- BANNER_<NAME> / ANSI_GALLERY / BOX_<NAME> als HTML-Exporte in ansiArt.ts
- CSS-Klassen: c-border-red, c-main-red, c-shadow-red, c-border-blue, c-main-blue,
c-shadow-blue, c-white, c-grey, c-pink, c-cyan (alle in global.css)
- Rendering via `<AnsiArt html={BANNER_X} />` (zero JS, set:html)
## NavBar contract
optional [B] Back (history.back()), always [Q] Disconnect
(clears localStorage.hasConnected via onclick, then navigates to /),
optional [I] Impressum & Privacy. Use everywhere instead of ad-hoc links.
## NavBar Contract
- [B] Back (history.back()), [Q] Disconnect (clears localStorage.hasConnected),
[I] Legal Notice. Überall statt ad-hoc Links verwenden.
## Everything else
Routing table, design tokens, local dev workflow (npm run dev/build/preview),
deployment (Cloudflare Pages) - unchanged from v1. See PRD.md and PLAN.md.
## Pre-Build System
- `prebuild.sh` wird nur lokal ausgeführt, wenn sich externe Daten ändern
- Ergebnis (JSON in src/data/) wird ins Repo committed
- CI/CD (`deploy.yml`) ruft `npx astro build` direkt auf (überspringt prebuild.sh bewusst)
## Design Tokens
- DOS 16-Farben-Palette, Hintergrund Schwarz
- CP437-Font für ANSI-Art, IBM Plex Mono für Fließtext
- Fix 80 Zeichen breit, vertikal scrollbar
- SkyLINE: einzige Seite mit Blau-Akzent (sonst immer Rot)
## Routing
| URL | Seite |
|---|---|
| `/` | Modem-Intro (→ /bbs/ wenn localStorage.hasConnected) |
| `/bbs/` | Hauptmenü (2×2-Kachel-Raster) |
| `/bbs/pc/*` | PHOB!A, Tr@nceMISSION, SkyLINE, Kosmos Design |
| `/bbs/atari/*` | Tropic DREAMs |
| `/bbs/amiga/*` | ESPRIT, MOD Files |
| `/bbs/fido/*` | BBS ANSI Art, Fidonets & Nodelists |
| `/bbs/legal-notice` | Legal Notice |
+62 -138
View File
@@ -1,155 +1,79 @@
# TODO.md - Offene Aufgaben & Workflow
# TODO.md - Offene Aufgaben
Stand: 13.08.2026 | Referenz: PLAN.md, SPEC.md, PRD.md
Stand: 15.08.2026 | Referenz: PLAN.md, SPEC.md, PRD.md
---
## NÄCHSTER SCHRITT: Phase 1 (fertig)
## OFFENE AUFGABEN
### P1.1 Build-Chain testen
- [x] `npm install` ausgeführt
- [x] `npm run dev` → localhost:4321 funktioniert
- [x] `npm run build` → dist/ mit 12 Seiten erfolgreich
- [x] `npm run preview` → lokaler Production-Server (nächster Schritt)
### Kosmos Design - Outside SBR
- [ ] `src/content/kosmos-design/outside-sbr.md` — Placeholder-Text in Zeile 12 bereinigen
(`"exact wording pending, PRD.md 12"`)
### P1.2 Modem-Intro Audio
- [x] dial-tone.mp3 besorgen/erstellen → public/audio/
- [x] dtmf-beeps.mp3 besorgen/erstellen → public/audio/
- [x] modem-handshake.mp3 besorgen/erstellen → public/audio/
- [x] ModemIntro.tsx testen (Line 1 = Sound, Line 2 = Direktzugang)
### P1.3 Pre-Build System
- [x] `tools/fetch_mods.py` — MOD-Metadaten von moonweb.org
- [x] `prebuild.sh` — ruft alle Pre-Build Stages auf
- [x] `npm run build` führt automatisch prebuild.sh aus
- [x] `src/data/mods.json` — gecachte MOD-Daten
---
## VOR DEM LIVE-TEST
### Inhalt aufräumen
- [ ] Placeholder-Texte in Content-Dateien entfernen (`[Placeholder/fake content]`, PRD.md-Referenzen)
- [ ] `src/content/skyline/disk-doctor.md`
- [ ] `src/content/skyline/example-tool.md`
- [ ] `src/content/skyline/megademo-93.md`
- [ ] `src/content/skyline/sky-file-manager.md`
- [ ] `src/content/esprit/esprit-utility-music.md`
- [ ] `src/content/esprit/esprit-demomaker-1.md`
- [ ] `src/content/esprit/esprit-utility-copy.md`
- [ ] `src/content/esprit/esprit-demomaker-2.md`
- [ ] `src/content/kosmos-design/kds-intro-1.md`
- [ ] `src/content/kosmos-design/kds-cracktro-pack.md`
- [ ] `src/content/kosmos-design/kds-slideshow.md`
- [ ] `src/content/kosmos-design/kds-musicdisk.md`
- [ ] Placeholder-Hinweise in Seiten-Descriptions entfernen:
- [ ] `src/pages/bbs/pc/skyline.astro` (PRD.md 12)
- [ ] `src/pages/bbs/pc/trancemission.astro` (PRD.md section 12)
- [ ] `src/pages/bbs/pc/kosmos-design.astro` (PRD.md 12)
- [ ] `src/pages/bbs/amiga/esprit.astro` (PRD.md 12)
- [ ] `src/pages/bbs/fido/ansi-art.astro` (PRD.md section 3)
### Asset-Hosting
- [ ] `files.moonweb.org` einrichten (Synology oder Static-Fileserver)
- [ ] Download-Dateien (.zip, .mod) dort ablegen
- [ ] Links in Content-Dateien prüfen/aktualisieren
---
## DANACH: Phase 2 - ANSI-Art
### P2.1 Echte .ans Dateien
- [ ] Original .ans Dateien aus den 90ern besorgen
### ANSI-Art in Menüs
- [ ] Echte .ans Dateien aus den 90ern besorgen
- [ ] In source-assets/ansi/ ablegen
- [ ] generate_ansi.py anpassen oder neuen Parser schreiben
- [ ] In ansiArt.ts einbinden (Fallback auf generierte Patterns)
### P2.2 CP437 Webfont
- [ ] Passenden CP437/DOS-Font beschaffen (Web 437, Perfect DOS VGA 437)
- [ ] Als WOFF2 unter public/fonts/ ablegen
- [ ] @font-face in global.css korrigieren (aktuell: `src: local('Web 437')` → funktioniert nur wenn Font installiert)
- [ ] Testing: ANSI-Art mit echtem Font rendern
---
## DANACH: Phase 3 - Navigation
### P3.1 Mobile Anchors
- [ ] /bbs/atari/ → /bbs/#atari als Scroll-Ziel
- [ ] /bbs/amiga/ → /bbs/#amiga
- [ ] /bbs/fido/ → /bbs/#fido
- [ ] /bbs/pc/ → /bbs/#pc (falls nötig)
### P3.2 View Transitions
- [ ] Astro View Transitions einbauen
- [ ] Optional: Subtiler Textaufbau-Effekt ("Stottern")
---
## DANACH: Phase 4-5 - Content & Visual
### P4.1 Echte ANSI-Art
- [ ] 8 Filler-Patterns durch echte gescannte/analysierte .ans ersetzen
- [ ] BBS ANSI Art Seite aktualisieren
### P4.2 Echte Releases
- [ ] SkyLINE: placeholder/disk-doctor.md → echte Inhalte
- [ ] SkyLINE: example-tool.md → echte Inhalte
- [ ] Kosmos Design: Prüfen ob alle Credits korrekt sind
- [ ] ESPRIT: Prüfen ob alle Inhalte korrekt sind
- [ ] Tr@nceMISSION: Fehlende Releases nachtragen (PRD.md 12)
---
### P4.3 Impressum
- [x] Pflichtangaben zusammenstellen (Name, Anschrift, Kontakt)
- [x] legal-notice.astro ausfüllen
- [x] Auf Englisch (PRD.md 6.3)
## ERLEDIGT
### Phase 1 - Build-Chain
- [x] npm install, npm run dev, npm run build, npm run preview
### Phase 1.2 - Modem-Intro Audio
- [x] dial-tone.mp3, dtmf-beeps.mp3, modem-handshake.mp3 in public/audio/
### Phase 1.3 - Pre-Build System
- [x] tools/fetch_mods.py → src/data/mods.json
- [x] prebuild.sh als Orchestrator
### CP437 Webfont
- [x] Px437 IBM VGA 8x16 als WOFF2 + TTF in public/fonts/
- [x] @font-face in global.css korrigiert
### Inhalt aufräumen
- [x] Placeholder-Texte in Content-Dateien entfernt (12 .md-Dateien gelöscht/bereinigt)
- [x] Placeholder-Hinweise in Seiten-Descriptions entfernt (5 .astro-Dateien bereinigt)
### Releases
- [x] Tr@nceMISSION: fertig
- [x] Kosmos Design: fertig (außer outside-sbr.md)
- [x] ESPRIT: fertig
- [x] SkyLINE: fertig
### Asset-Hosting
- [x] www.moonweb.org/files/ als Hosting-Lösung (Dateien liegen dort, wird schon überall verlinkt)
### MOD Player
- [x] chiptune3.js + libopenmpt AudioWorklet eingebunden
- [x] ModPlayer.tsx mit Playlist
- [x] Echte .mod Dateien werden von moonweb.org gestreamt
### Deployment
- [x] GitHub-Repo veröffentlicht
- [x] Cloudflare Pages Projekt angelegt + funktioniert
- [x] CI/CD Pipeline (.github/workflows/deploy.yml) konfiguriert
- [x] DNS-Eintrag für 28k8.moonweb.org aktiv
- [x] Live-Deploy funktioniert
### SEO
- [x] sitemap.xml generiert (public/sitemap.xml)
- [x] robots.txt angelegt (public/robots.txt)
- [x] <title> und <meta description> pro Seite geprüft
### Legal Notice
- [x] Pflichtangaben zusammengefasst
- [x] legal-notice.astro ausgefüllt (auf Englisch)
---
## DANACH: Phase 6 - MOD Player
## GESTRICHEN (nicht mehr relevant)
### P6.1 WASM MOD Player
- [x] chiptune3.js (libopenmpt AudioWorklet) eingebunden
- [x] `tools/fetch_mods.py``src/data/mods.json` (pre-build)
- [x] `ModPlayer.tsx` React-Island mit Playlist
- [x] `prebuild.sh` Orchestrator für alle Pre-Build Stages
- [ ] Echte .mod Dateien auf files.moonweb.org bereitstellen (oder direkt von moonweb.org streamen)
---
## LETZTE PHASE: 7-8 - Infra & Launch
### P7.1 Asset-Hosting
- [ ] files.moonweb.org einrichten (Synology oder Static-Fileserver)
- [ ] Alle Downloads (.ans, .mod, Disk-Images) dort ablegen
- [ ] Links in Content-Dateien aktualisieren
### P7.2 Deployment
- [ ] GitHub-Repo veröffentlichen
- [ ] Cloudflare Pages Projekt anlegen
- [ ] Build-Command: `npm run build`, Output: `dist`
- [ ] DNS-Eintrag für 28k8.moonweb.org prüfen
- [ ] Erstes Live-Deploy
### P7.3 SEO & Finalisierung
- [ ] sitemap.xml generieren
- [ ] robots.txt anlegen
- [ ] <title> und <meta description> pro Seite prüfen
- [ ] Full click-through Regression Test
- [ ] Banner sichtbar auf Hauptmenü?
- [ ] Disconnect → localStorage geleert → Redirect zu /?
- [ ] Alle Keyboard-Shortcuts funktionieren?
- [ ] Mobile Ansicht: Kacheln gestapelt?
---
## EMBEDDED CONTEXT (für neuen Chat)
Wenn du diesen Kontext in einem neuen Chat öffnest:
1. Lies diese Datei als erstes
2. Das NÄCHSTE unmittelbare Ziel steht oben unter "NÄCHSTER SCHRITT"
3. Fertige Phasen sind unten (hier aktuell: Phase 1 + Pre-Launch Checklist)
4. Referenz-Dokumente: PLAN.md (Roadmap), SPEC.md (Tech-Spec), PRD.md (Anforderungen)
5. AGENTS.md hat die Projektstruktur und technischen Details
6. Wenn Phase 1 fertig ist → diese Datei aktualisieren, Phase 1 als done markieren, Phase 2 als nächstes setzen
- **Mobile Anchors** (/bbs/atari/ → /bbs/#atari): Overkill, Kachel-Struktur rendert unnötig
- **View Transitions**: Welcome Banner Stottern funktioniert bereits, restliche Seiten brauchen das nicht
- **Echte Releases nachtragen**: Alle fertig bis auf outside-sbr.md