47 lines
1.8 KiB
Markdown
47 lines
1.8 KiB
Markdown
# Halfstreet
|
|
|
|
A gothic text adventure. Second person, present tense, sparse — never explains.
|
|
|
|
Style anchors: Le Fanu's *Carmilla*, Shirley Jackson's *The Haunting of Hill House*, M.R. James's ghost stories.
|
|
|
|
Played at [halfstreet.io](https://halfstreet.io).
|
|
|
|
## Stack
|
|
|
|
- [Astro](https://astro.build) static site
|
|
- TypeScript engine — pure (no DOM, `Date`, `Math.random`, or console)
|
|
- World content authored in markdown (rooms, items, encounters, endings) under `src/world/`
|
|
- [Vitest](https://vitest.dev) for tests
|
|
- Optional client error reporting via [GlitchTip](https://glitchtip.com) using `PUBLIC_GLITCHTIP_DSN`
|
|
|
|
## Development
|
|
|
|
```sh
|
|
npm install
|
|
npm test # engine + world tests
|
|
npm run dev # local dev server
|
|
npm run build # type-check + production build
|
|
```
|
|
|
|
To enable GlitchTip in the browser, set `PUBLIC_GLITCHTIP_DSN` in your environment before running or building the site.
|
|
If you want deploy-aware grouping and readable stack traces, also set `PUBLIC_GLITCHTIP_RELEASE` at build time and upload the generated source maps for that same release.
|
|
|
|
## Layout
|
|
|
|
- `src/engine/` — parser, dispatcher, encounter logic
|
|
- `src/ui/` — terminal renderer, theme, chips
|
|
- `src/world/` — markdown content (rooms, items, encounters, endings)
|
|
- `src/pages/index.astro` — entry page
|
|
|
|
## Design docs
|
|
|
|
- `docs/superpowers/specs/halfstreet-bible.md` — content bible (canonical world)
|
|
- `docs/superpowers/specs/2026-05-08-mystery-text-adventure-design.md` — engine/UI architecture
|
|
- `docs/superpowers/specs/halfstreet-followon-notes.md` — pending engine work before authoring more rooms
|
|
- `docs/superpowers/specs/2026-05-09-mystery-markdown-migration-design.md` — markdown content migration design
|
|
- `docs/superpowers/plans/2026-05-09-mystery-markdown-migration.md` — migration plan that was executed
|
|
|
|
## License
|
|
|
|
GPL-3.0-or-later. See [`LICENSE`](LICENSE).
|