- 16 × 14 m · section at 1.2 m
- 18 fixtures, sized from models.json
- Counter 12.6 m
- 9 tables · 4 bought with upgrades
- 16 × 14 m · section at 1.2 m
- 18 fixtures, sized from models.json
- Counter 12.6 m
- 9 tables · 4 bought with upgrades
Work / Game
A first-person fast‑food restaurant sim. Every model, texture, sound and song in it is generated by a script.
- Year
- 2026
- Status
- Playable, private build
- Code
- Private repository
Sizzle Stop

Concept
You run a burger restaurant for one day. Take orders, grill, fry, pour, assemble trays, keep the room clean, restock from deliveries, hire staff and buy upgrades. A day runs from 9 AM to 9 PM in six real minutes and ends with a report.
The problem
A restaurant is dozens of stations, and each one exists twice: as a model someone builds, and as colliders, slots and paths the game uses. Built separately, the two drift apart, and every gap becomes a bug.
…so models and gameplay cannot drift apart.


How it works
One data file
src/data/*.jsonholds every dimension. Headless Blender scripts build the models from it, and the game builds collision, navigation and interaction from the same file. The menu and the upgrades are data too.Source: README, Architecture
The whole game runs headless
GameWorldruns headless. Unit tests drive complete days, including a three-day staffed soak test. Presentation lives in a separateGameSession.Source: README, Architecture and Tests
Staff that multitask
Employees take work from a task board with atomic claims and follow step-based plans. Fries go in while the patty grills, and unfinished work gets picked up by whoever is free.
Source: README, employees/
Own physics, own paths
A kinematic collision world with oriented boxes, capsules and ray casts. Customers path on an A* nav grid with string pulling, area masks, avoidance and repathing.
Source: README, physics/ and navigation/
Generated, not downloaded
Models come from headless Blender Python, textures and icons from a procedural generator, and effects, ambience and music from a synthesiser. Identical materials are shared at load and static geometry is merged per material.
Source: README, Credits and Rendering



Built with
- TypeScript
- Three.js
- Vite
- Electron
- Blender Python
- Vitest + Playwright
Numbers
- 135–225
- FPS at 1080p, busy restaurant, vsync off (RTX 4070 Ti)README, tools/dev/perf.mjs
- 4–7 ms
- CPU per frameREADME
- 69
- models, all built by scriptrepo: public/assets/*.glb
- 130+
- unit and integration tests, plus a bot that plays full shiftsREADME, Tests