Repository guidance for AI coding agents working on LessUp WebRTC.
- Purpose: a polished, learning-oriented WebRTC demo with a Go signaling server and a vanilla JavaScript client
- Runtime scope: WebSocket signaling, 1:1 and small-room mesh calling, DataChannel chat, screen share, browser-side recording
- Primary backend:
cmd/server/main.go,internal/signal/ - Primary frontend:
web/index.html,web/src/ - Public site: Jekyll Pages from the repository root
- Source of truth:
openspec/
openspec/is the only spec and change-management authority.- Do not reintroduce the legacy
/specs/tree or.meta/conventions. - Keep the repo in closeout mode: favor clarity, consolidation, and low-maintenance choices over new scope.
- Public docs must stay polished. Do not mention private archive or reduced-maintenance intent.
- Prefer deletion or consolidation of stale assets over keeping duplicate generations of docs/config.
cmd/server/main.go Go entrypoint and HTTP serving
internal/signal/ Signaling hub, message validation, tests
web/src/core/app.js Frontend entrypoint
web/src/controllers/ Media, peers, signaling, stats, UI
web/src/config.js Browser config and capabilities
docs/ Public docs rendered by Pages
openspec/specs/ Main capability specs
openspec/changes/ Proposed or active changes
.github/workflows/ CI and Pages automation
- For any meaningful change, begin with an OpenSpec change under
openspec/changes/<name>/. - Read
proposal.md,design.md,tasks.md, and any delta specs before editing code. - When runtime or repository behavior changes, update the relevant OpenSpec artifacts.
Recommended flow:
/planor equivalent planning for cross-file work- implement the active OpenSpec tasks
- run targeted validation
- use
/reviewbefore merge or before declaring the closeout batch complete
- Autopilot: good after tasks are explicit and bounded by an OpenSpec change
/fleet: opt-in only; avoid by default because this repo benefits more from longer focused sessions than parallel churn/remoteand/research: useful when GitHub context or external facts are needed, but avoid them for simple local work- MCP/plugin additions: do not add by default; the built-in GitHub integration plus repository instructions are enough for this project
- Primary repo instructions live in
.github/copilot-instructions.md - Repo-level LSP config belongs in
.github/lsp.json - Prefer
/reviewfor final signal rather than inventing extra review flows
CLAUDE.mdshould stay shorter than this file and point back here for project-wide rules.claude/settings.jsonshould remain minimal and only enforce fast, predictable checks
- Consume
AGENTS.mdas the canonical project brief - Do not add extra repo-specific OpenCode config unless there is a stable, documented need
Use the existing commands already supported by the repo:
make check
cd web && npm test
cd e2e && npm test
openspec validate --all --strict- Pages is a project site, not a README mirror.
docs/index.mdis the docs hub.docs/specs*.mdis the public entrypoint for OpenSpec material.- If a page links to specs, it should link to current
openspec/content or to the curated public spec hub. - Avoid outdated module names like
web/app.jsorapp.*.js; use the realweb/src/structure.
A change is only complete when:
- code, docs, and navigation agree with the current structure
- automation and local instructions match the actual toolchain
- GitHub metadata matches the site and the implementation
- the OpenSpec change is ready to apply or archive without ambiguity
These are intentional design choices, not bugs:
- No authentication: This is a demo; production deployments would need auth
- Public STUN only: Uses Google's public STUN server; TURN requires manual configuration
- Chinese UI: Primary audience is Chinese developers
- No video recording backend: Recording is browser-side only (MediaRecorder API)