A phone-first bowling companion (PWA). Four modes over one shared history:
- Bowl-off — bowl your real frames and compete against a chosen, simulated rival, frame by frame.
- Journal — record your real shots (what you saw → decided → happened) to sharpen your lane read.
- Trace (coming soon) — film a shot; auto-track the ball for laydown, breakpoint, pocket and speed.
- Form (coming soon) — film your approach; on-device pose tracking reads swing plane, posture and footwork, step by step.
See docs/product-direction.md for the full vision, architecture, and the simulation model (rev rate + ball speed are the causal levers; conditions, oil breakdown, ball changes).
SvelteKit + TypeScript, adapter-static (offline-first SPA), deployable to any static host
(Cloudflare Pages / Netlify / a VPS). No backend in v1 — everything is local (localStorage).
pnpm install
pnpm dev # http://localhost:5173 (add --host to test on your phone)
pnpm build # static build → ./build
pnpm preview # serve the production build
pnpm check # type-checksrc/lib/engine/— the simulation + scoring engine (typed; ported from the original Python lib)src/routes/—+pagelaunch mode-picker, andbowloff/journal/trace/form/history/settingstabslanding/— static landing page, deployed to GitHub Pages by.github/workflows/pages.ymlprototype/— throwaway HTML prototypes (bowl-off UX + engine,trace.htmlball-track,form.htmlpose-track)reference/— the original Pythonvirtual_laneslibrary + tests, kept as the canonical scoring reference
MIT — see LICENSE.