A single-scene Three.js experience where players count yellow chicks in a stylized voxel forest within 20 seconds. The repo is structured for static hosting (Vercel-ready) with a lightweight landing page that links to the game.
public/
├─ index.html # Landing page with CTA to /forest
├─ assets.json # Manifest consumed by forest/index.html
├─ ASSET_INDEX.md # Human-readable mirror of assets.json (deployed)
├─ assets/ # GLTF models referenced by the manifest
└─ forest/
├─ index.html # Main Three.js experience
├─ PRD.md # Product requirements
└─ TDD.md # Technical design
vercel.json # Static hosting config (clean URLs, caching)
Key rule: anything under public/ gets deployed. Keep tooling/docs outside this folder so they never leak to production.
npm install -g serve # or use npx serve
serve publicThen visit:
http://localhost:3000/— landing pagehttp://localhost:3000/forest/— game (loads/assets.jsonand/assets/**/*.gltffrom the same origin)
- In the Vercel dashboard, create a project from this repo.
- Framework preset: Other. Leave the build command empty.
- Set the output directory to
public(or rely onvercel.jsonwhich declares it). - Deploy. Clean URLs are enabled, so
/forestand/forest/both work. Static assets in/assetsare cached withCache-Control: public,max-age=31536000,immutable.
public/assets.jsonis the single source of truth for model paths.forest/index.htmlfetches it and resolves the URLs at runtime.public/ASSET_INDEX.mdmirrors the manifest for humans (and is visible at/ASSET_INDEX.mdonce deployed).- When adding or pruning models, update both the manifest and index so the scene and docs stay aligned.
The build leans on the local threejs-builder skill for reference-frame contracts, animation handling, and ES-module patterns. See .codex/skills/threejs-builder/SKILL.md if you need to extend the scene.
- TinyPRD — build concise product briefs (used for this game's PRD)
Happy counting!
