Document owner: Min Htet Myet · Last reviewed: 2026-05-14
Thanks for considering a contribution. This project ships to non-technical users; the bar for UX, accessibility, and reliability is intentionally high.
bun install
cp .env.example .env.local # add your Groq key
bun run dev- TypeScript strict. No
anyin new code unless wrapped in a typed adapter. - Hooks own state. UI components stay declarative; side effects live in hooks.
- Three.js stays imperative. Talk to
Scene3Dvia its imperative handle. - Tailwind tokens only. No raw hex colors in components — use design tokens
defined in
src/index.cssandtailwind.config.ts. - Status enums over booleans for any flow with three or more states.
- One concern per commit. A refactor and a feature do not share a commit.
- Imperative subject line, ≤ 72 chars (
Add streaming retry to GroqService). - Reference the doc you updated when behavior changes
(
docs/VOICE_PIPELINE.md).
- Build passes (
bun run build). - No new
console.logleft behind (useconsole.warn/errorwith prefix). - New env vars documented in
.env.example+docs/SECURITY.md. - User-visible changes have a screenshot or short clip in the PR description.
- If the voice or perception pipeline changed, the relevant doc is updated.
We optimize for:
- Reliability — the demo must survive flaky networks and missing keys.
- Latency — first token < 600 ms; pose loop < 33 ms.
- Clarity — a new engineer should be productive within a day.
If a change trades any of these for cleverness, it does not ship.