Experimental · Case study
Night Tide
An interactive riverfront courier story — typed exits, free-text referee mapping, inventory/HP flags, and multiple endings. No API key required to play.
Playable CLI and local web UI with four endings, save/archive, and a stub referee that swaps for live Jev later.
- Tech stack
- Python
- JavaScript
- CSS
- HTML
- Pydantic
- PyYAML
- Categories
- game-dev · ai-tooling
Problem
Most choose-your-own-adventure prototypes either hard-code every branch or lean on a cloud LLM for every turn. I wanted a story engine where the code owns state (flags, inventory, HP, heat) and a referee only labels which exit the player meant — including free text that is not on the button list.
Approach
Night Tide drops you on a rain-soaked quay with forged papers, one coin, and a sealed packet. You can run:
.venv/bin/python web.py— browser UI at127.0.0.1:5050.venv/bin/python cli.py— terminal, with--newto wipe the save
Nerve, caution, and heat (0–3) move with your choices. Four endings: clean berth, watched berth, detained, or packet gone. Leave TYPESAFE_API_KEY unset and a stub referee plays; set the key later to swap in live Jev — Groq is not wired yet.
Outcome
A self-contained Python story runtime with a thin web shell, finished-run archive under saves/archive/, and a clean seam for a smarter referee without requiring an API key to demo the night.
Changelog
Web UI and archive of finished runs alongside CLI saves.