Who? · Devlog

Tag 4 · Freitag, 1. Mai 2026

Tag 4 — Eine Tür nach draußen

Marketing-Site, Steckbriefe, Reisen-Sektion

cantinacheatsmarketingpackagescards

Spieler-Sicht

Heute hat das Spiel eine Außenseite bekommen. Bisher landetest du, wenn du den Link teiltest, direkt drinnen — ohne Pitch, ohne Kontext. Jetzt gibt es eine öffentliche Vorderseite mit drei Schichten.

Steckbriefe

Jeder Stammgast hat eine eigene Seite mit Lebensdaten, Werk, Anekdoten und — der Lieblings-Detail — einer Liste der Dinge, die er nicht wissen kann, weil er davor gestorben ist. Tesla hat keine Ahnung von der Atombombe, Diogenes nicht von Heidegger. Außerdem: häufige Falsch- Ratungen mit der Korrektur in der Stimme der jeweiligen Figur.

Reisen

Eine eigene Sektion sammelt die spielbaren Reisen. Konstanz, 1414 ist ausführlich beschrieben — was geschah, wer beteiligt war, was du im Spiel entscheiden wirst.

Cantina-Polish

Die Welt startet jetzt kleiner und kompakter — du spielst nicht mehr in einer halbleeren Halle. Theatrische Reveal-Sequenz, wenn du einen Daily-Charakter errätst. Diogenes kommt zurück als Türsteher, der Animus-Tür-Doppelgänger ist weg, ein paar Patrol-Pfade endlich relativ zur dynamischen Welt.

Macher-Sicht

Was heute gebaut wurde

Marketing-Site in drei Wellen (docs/-Plan im Hauptrepo):

  1. Welle 1: Public-Landing + Figuren-Steckbriefe + Sitemap. / ist nicht mehr Redirect nach /foyer, sondern eine prerender'te Landing mit Hero, Live-Pool-Strip, Bildungs-Pitch. Smart-Redirect via localStorage 'who.played' schickt Returning Users direkt ins Spiel. Dossier-JSONs via Vite-Glob inlined.
  2. Welle 2: Cluster-Seiten /epochen/[slug], /berufe/[slug] und Quest-Landing /reisen/konstanz mit JSON-LD Article + about[]. BreadcrumbList auf allen Detailseiten, Organization+WebSite+ VideoGame-Graph auf /.
  3. Welle 3: 21 dynamische 1200×630-OG-Karten via Satori (JSX → SVG)
    • Resvg (SVG → PNG), EB-Garamond eingebrannt. Pure-JS, keine native Toolchain im Build.

Engine-Refactor in Workspace-Pakete (Phase 0). @who/engine, @who/quest-runtime, @who/capabilities, @who/shared-types als eigenständige pnpm-Workspace-Packages. Erst die Plattform-Schicht extrahiert, dann obstacles/bonus-moves; Smoke-App als Verifikation außerhalb der Hauptapp.

Cantina Audit-B-Welle. 6 Bugs durchgezogen — Patrol-Waypoints + Bench + Trainer relativ zur dynamischen Welt-Größe, Diogenes als Türsteher reaktiviert, Daily-Bearer in Mystery gefaltet (ein Stranger statt zwei), Animus-Tür-Doppler-Bug behoben.

Tradeoffs

Marketing-Site im selben SvelteKit-Build statt Astro-Subdomain. Smart-Redirect, Live-Pool und Reuse der Pixel-Assets sprachen klar für SvelteKit; prerender = true + ssr = true als Per-Page-Override des Root-Layouts (ssr = false für Auth-Layer).

OG-Karten zur Build-Zeit, nicht zur Laufzeit. Satori + Resvg laufen einmal in pnpm og:generate (Build-Hook), Output landet in static/og/. Kein Server-Endpoint, keine Latenz, kein Pferdefuß bei Twitter-Crawlern.

Diff-Stats

17 Commits, +6 171 / -930. Erster Tag, an dem static/og/ einen nennenswerten Anteil ausmacht (10 % der Datei-Bewegungen).

Stats

17
Commits
+6171/-930
Zeilen
187
Files
2.1 h
Aktiv
Erster Commit
15:53 (Freitag)
Letzter Commit
23:03
Spannweite
7.2 Stunden
Aktiv (ohne Pausen > 30min)
2.1 Stunden
Pausen
3
Längster Fokus
0.9 Stunden

Wo wurde gearbeitet

  • 26% apps/web/src/lib
  • 22% {apps/web/src
  • 14% apps/web/src/routes
  • 10% apps/web/static/og
  • 3% {apps/server/src

Commits (17)

Volle Liste aufklappen
  • c75a87c feat(cards): Schema knowledgeHorizon + Place/Item-Pipeline
  • f0e836e fix(cantina): Audit-B-Welle — 6 Bugs + UX-Lücken durchgezogen
  • 7cf68cd feat(cheats): cardstorm + DevMode-Auto-Grant für alle Karten
  • 7df8752 fix(cantina): Patrol-Waypoints + Bench + Trainer relativ + Diogenes-Reaktivierung (Phase A)
  • 9105ee5 feat(cantina): Fenster gegated, kleine Welt mittig, Tile-Lab-Tür raus
  • d5f3aaf refactor(cantina): Daily-Best-Pin entfernt, Animus-Tür entdoppelt
  • 5d1ad30 fix(cheats): cardstorm nutzt api-Client statt naked fetch
  • 723387d fix(cheats): cardstorm refreshed cardsStore nach grant
  • 7bb814c refactor(cantina): Daily-Bearer in Mystery gefaltet — ein Stranger statt zwei
  • 1af9345 diag(cheats): cardstorm + diag mit Console-Logs für Browser-Debug
  • 11308df fix(cheats): cardstorm fügt zusätzlich Fake-Won-Games ein
  • 5ed0afd docs(cantina): Welle 31–38 + Mystery=Daily-Träger-Pivot
  • b546c3d feat(marketing): Cluster-Seiten + Quest-Landing + Sitemap (Welle 2/3)
  • 82e91c6 feat(marketing): Dynamische OG-Karten 1200x630 via Satori (Welle 3/3)
  • c090d06 feat(cantina): Theatrische Daily-Reveal-Sequenz (Welle 3c)
  • 5c54160 refactor(packages): Phase 0 Welle 1 — Engine-Plattform extrahiert
  • 37ce2eb refactor(packages): Phase 0 Welle 2.1 — @who/quest-runtime + obstacles
Geschrieben mit Claude Opus 4.7 (1M context) — Hand veredelt