Start as a humble tuk-tuk driver renting a tired three-wheeler at Tha Phae Gate. Haggle fares with backpackers, monks, market vendors and digital nomads, learn the one-way moat, hire drivers and grow the biggest tuk-tuk company in Lanna — in a 3D, street-accurate central Chiang Mai generated from OpenStreetMap.
npm install
npm run devOpen http://localhost:5317. Drive your own tuk-tuk (WASD, E to pick up, G for GPS autodrive), press Tab to switch to Manage mode and run the fleet, and M to open the flat city map for planning.
npm run dev— dev server on port 5317 (?statsshows frame statistics;?view=mapopens the flat map instead of the 3D city)npm test— Vitest (node env; loads the real map data frompublic/data)npm run typecheck—tsc --noEmitnpm run build— typecheck + production bundle indist/- Map data, in pipeline order:
npm run map:fetch— download the OSM extracts from Overpass intodata-raw/, which is not checked in (setOVERPASS_URLto use a mirror)npm run map:build— readdata-raw/and write the road graph, places and flat-map layers inpublic/datanpm run city:build— readdata-raw/and the graph's origin and write the 3D city data,public/data/city3d.json(setDATA_RAWto read another checkout'sdata-raw/)node scripts/fetch-glyphs.mjs— download the flat map's label glyphs for the names inpublic/dataintopublic/fonts
Stack: Vite, TypeScript, React 19, three.js for the 3D city, and MapLibre GL 6 for the flat city map (loaded only when it is opened). See docs/design.md for the game design and code structure, docs/3d/architecture.md for how the 3D city is built and drawn, and docs/research for the fact-checked research behind places, fares, costs, festivals and culture.
- Map data © OpenStreetMap contributors, available under the Open Database License (ODbL).
- Map label glyphs: Noto Sans (SIL Open Font License), served by OpenFreeMap.