mirror of
https://github.com/skoelle/28k8-moonweb-org.git
synced 2026-09-17 18:30:24 +00:00
2.2 KiB
2.2 KiB
SPEC.md - 28k8.moonweb.org Technical Specification
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
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_ / ANSI_GALLERY / BOX_ 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
- [B] Back (history.back()), [Q] Disconnect (clears localStorage.hasConnected), [I] Legal Notice. Überall statt ad-hoc Links verwenden.
Pre-Build System
prebuild.shwird nur lokal ausgeführt, wenn sich externe Daten ändern- Ergebnis (JSON in src/data/) wird ins Repo committed
- CI/CD (
deploy.yml) ruftnpx astro builddirekt 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 |