Portfolio
Schreibdran Abenteuer
KI-gestütztes Text-Adventure in der Fantasy-Welt von „Als die Götter erstarrten“ — Next.js, Supabase-Minimal-Stack und LLM-Integration über das Kilo Gateway. Ein kreatives Hobby-Projekt.
Herausforderung
Ein interaktives Text-Adventure zu bauen, das nicht auf vorgefertigten Story-Bäumen beruht, sondern jede Szene dynamisch aus einem Sprachmodell generiert. Die Aufgabe: Eine Fantasy-Welt glaubwürdig erzählen, auf die Entscheidungen der Spielenden reagieren und dabei konsistent bleiben — ohne dass ich jede Verzweigung manuell schreiben muss. Und das Ganze so betreiben, dass es ohne teure Cloud-Dienste läuft.
Ansatz
Das Abenteuer ist ein eigenständiges Next.js-Frontend (schreibdran3, Turborepo mit shared + web) gegen eine schlank selbst gehostete Supabase-Instanz:
- Charakter-Setup — Spielende legen Name, Geschlecht, Beruf, Hintergrund, Motivation und Stärken/Schwächen an. Das Profil wird als Spielkontext in die Prompts eingebettet und beeinflusst den Erzählton.
- LLM-gestützte Szenen — Der Geschichtsverlauf wird aus dem LLM generiert. Jede Entscheidung wird per
char_auth_key(Anon-Key) als Gast gespeichert; wer sich registriert, behält den Charakter dauerhaft. - Dynamische Verzweigung — Statt fester Pfade generiert das Modell die nächste Situation abhängig von den bisherigen Entscheidungen. Der Verlauf bleibt über
Session+Message-Tabellen erhalten.
Self-Hosted statt Cloud
Ursprünglich lief das Abenteuer gegen Supabase Cloud und das Vercel AI Gateway. Beides wurde auf eigene Infrastruktur migriert:
- Supabase-Minimal-Stack (
/opt/prod/schreibdran-supabase):schreibdran-db(Postgres 15.8),schreibdran-auth(GoTrue, Anon-Sign-ins,GOTRUE_DB_NAMESPACE=auth) undschreibdran-rest(PostgREST mit RLS). Traefik routet/auth/v1und/rest/v1auf die Dienste. - Kilo Gateway — Anthropic-kompatibler Endpoint statt Vercel AI Gateway: Modell
z-ai/glm-5.3-flash,authToken(Bearer) stattapiKey, undmax_tokens ≥ 4000— das GLM-„Thinking“ frisst sonst das Budget vor dem Text-Block.NEXT_PUBLIC_SUPABASE_URL/ANON_KEYsind Build-Args (werden zur Build-Zeit ins Client-Bundle gebacken).
Ergebnisse
- Voll funktionsfähiges Text-Adventure unter
adventure.jonaskrauss.de - Konsistente, dynamische Szenen — jeder Spieldurchlauf ist anders
- Gast-Spiel sofort möglich, Registrierung optional für dauerhaft gespeicherte Charaktere
- Komplett selbst gehostet: kein Supabase Cloud, kein Vercel AI Gateway — volle Kontrolle über Daten und Kosten
Tech Stack
- Frontend: Next.js (App Router), React, TypeScript, Tailwind CSS
- Backend/DB: Supabase-Minimal-Stack (Postgres 15.8, GoTrue, PostgREST)
- KI: Kilo Gateway (Anthropic-kompatibel), Modell
z-ai/glm-5.3-flash - Tooling: Turborepo, pnpm, Docker, Traefik (Let's Encrypt), Docker-Compose