- Root is a Bun + TypeScript monorepo using npm workspaces in
packages/:packages/playhtml(core),packages/react(React bindings),packages/common(shared types),packages/extension(browser extension)
- Site and demos under
website/(built with Vite); static assets inwebsite/public/ - Realtime backend in
partykit/(PartyKit rooms, admin, utils) - public docs in
docs/and internal system design docs ininternal-docs/; templates intemplates/
- Install:
bun install - Site dev:
bun run dev(usesvite.config.site.mts) - PartyKit dev server:
bun run dev-server - Extension dev:
bun run dev-extension(insidepackages/extension) - Build:
bun run build-site,bun run build-packages,bun run build-extension - Type-check/lint:
bun run lint(TypeScript across workspace) - Per‑package tests (Vitest):
- Core:
bun run -C packages/playhtml test - React:
bun run -C packages/react test - Extension:
bun run -C packages/extension test
- Core:
- Language: TypeScript (strict mode). Prefer named exports; avoid default unless conventional (
index.ts[x]). - Indentation: 2 spaces; max line length ~100.
- Filenames: React components
PascalCase.tsx; modules/utilitiescamelCase.ts; tests in__tests__/. - Types and components in
PascalCase; variables/functions incamelCase; constants inSCREAMING_SNAKE_CASEonly when global. - Run
bunx tsc(viabun run lint) before pushing.
- Framework: Vitest; DOM adapters:
jsdom(react) andhappy-dom(core). - Place tests under
__tests__/near sources; name*.test.ts[x]. - Prefer focused unit tests around data updates and DOM effects; avoid network in unit tests.
- Run relevant package tests locally before PRs (see commands above).
- Commits: short imperative subject; scope paths when helpful (e.g.,
react:). Group mechanical changes separately. - Versioning/Releases: use Changesets. Add one with
bun run changesetwhen user‑facing packages change. - PRs: include summary, rationale, screenshots for UI/site/extension changes, reproduction for fixes, and link issues. Ensure
bun run lintand package tests pass.
- Do not commit secrets.
.envexists for local only; PartyKit/Supabase keys must remain private. - Prefer environment variables over literals; never hardcode tokens in code or tests.