A pixel-art browser game where you build, tune, and diagnose cars. No driving — pure constraint-satisfaction puzzle. Spec a build, fire the ignition, and see if your machine holds together.
- React 19 + Vite 8
- Zustand — game state with localStorage persistence
- Supabase — anonymous auth + cloud save sync (zero sign-up)
- Framer Motion — UI transitions and ignition sequence
- Tailwind CSS v4
npm install
npm run devOpen http://localhost:5173
npm test # run engine unit tests once
npm run test:watch # watch mode
npm run build # production build- Pick a car — each has base weight, grip, drag, and chassis/drivetrain limits
- Buy parts from the shop or Black Market — organized by slot (engine, intake, forced induction, exhaust, etc.)
- Build diagnostic — stats computed live: HP, torque, 0–60, top speed, quarter mile, reliability
- Fire ignition — pass/fail based on reliability, heat output vs cooling capacity, and drivetrain stress
- Complete objectives to unlock the Black Market and earn currency
- Sell or scrap unwanted parts for currency (75% sell / 18% scrap)
| Action | Value |
|---|---|
| Starting currency | $100,000 |
| Sell part | 75% of cost |
| Scrap part | 18% of cost |
| Mission rewards | $8k – $50k |
src/
assets/sprites/ PNG sprites + rotation frame folders
components/ React UI (garage, shop, diagnostic, ignition, mission)
data/ parts.json, cars.json, objectives.json, blackMarket.json
engine/ Pure stat computation (computeStats, evaluateTags, resolveIgnition)
stores/ Zustand slices (build, inventory, progress, ui, blackMarket)
lib/ Supabase client + save sync hook
On first visit an anonymous Supabase session is created and stored in localStorage. Game state is debounce-synced to the cloud every 2 seconds, keyed to the anonymous user ID. Switching devices loads the remote save automatically — no account required.
To enable: go to your Supabase project → Authentication → Providers → Anonymous sign-ins → toggle on.