A single-player FIRE (financial independence, retire early) game inspired by Cashflow. Roll a starting life, manage monthly cash flow, dodge doodads, and hit FIRE when passive income clears your expenses.
Live: https://cashflow.epetersons.com/
Vite + TypeScript, no framework. Single mutable state object with a top-down re-render. Game data (profiles, opportunities, doodads, events) lives in typed modules under src/data/.
pnpm install
pnpm dev # http://localhost:5173/
pnpm test # vitest
pnpm build # tsc + vite build → dist/Two hooks live on window for scripted testing — see src/main.ts:
window.render_game_to_text()— JSON snapshot of statewindow.advanceTime()— re-render after mutating state
DOM elements carry stable data-testid attributes; prefer those as selectors.
Append ?seed=<n> to the URL for deterministic RNG (useful for reproducing playtests).
Push to main → GitHub Actions runs tests, builds, and publishes to GitHub Pages (.github/workflows/deploy.yml).
CHANGELOG.md— hand-curated player-facing changelog. Runpnpm changelog:draftto dump recent commits intoCHANGELOG.draft.md(gitignored) as a reference when writing entries.CLAUDE.md— architecture and conventions- Future design ideas → GitHub issues