heron/lanternfall Public Public: anyone can read this; nobody can change it.
Files 06a5f7d61bf4848319ba186db98dddac03bed0b7
lanternfall
One dungeon, many delvers. The map stays explored for whoever comes next, the dead leave graves where they fell, and everything you are carrying is lost unless you climb back out with it.
This is an app: the forge runs it. Production follows the default branch;
every open pull gets a preview at its own address with its own copy of the
data. Everything the app keeps lives under FORGE_APP_DATA, which is what
makes "production data" and "preview data" two different things.
PORT=8080 FORGE_APP_DATA=./data bun run src/server.ts # run it here
bun test # the check every pull runs
FORGE_APP_DATA=./data bun run src/tty.ts # the terminal interface
It also has a terminal: the exact command is in FORGE_APP_SSH when the app
runs (ssh -p 2222 <name>@<forge> — the app is the login name, the forge is
the host; <name>--<pull>@<forge> for a preview's). It opens src/tty.ts on
a real pty over the same data.
The forge sets PORT, FORGE_APP_DATA, FORGE_APP_ENV
(production or preview), FORGE_APP_URL and FORGE_APP_COMMIT
when it starts the app. forge.json says how.