This page is the full contributor guide.
CONTRIBUTING.md at the
repository root is the short version GitHub surfaces on pull requests —
when one changes, change the other.Setup
Before you push
.github/workflows/checks.yml.
House rules
Commit messages
Commit messages
Short prose sentences — what changed and why. No
feat:/fix: prefixes.
Match git log --oneline -20.Comments
Comments
State constraints code can’t show — why a storage key can’t be renamed,
why an effect reads a ref. Don’t add comments that just restate the next
line.
Tests accompany behavior
Tests accompany behavior
Most modules are TDD’d. A behavior change updates the test that encoded
the old behavior, with a comment saying who decided (see
Watch.test.tsx).Anonymous keyless mode
Anonymous keyless mode
Non-negotiable. Every feature renders without any env keys. Clerk hooks
only behind
useClerkReady().Design non-negotiables
Design non-negotiables
Amber = now, crimson = LIVE, no third accent, no purple, no
glassmorphism, real flag images never emoji, honor
blocklist.json
before any stream plays, drop closed channels only, NSFW stays behind
its off-by-default toggle.Storage keys
Storage keys
Keep the
atlas. prefix forever — renaming discards user data
(src/state/storage.ts).Where things live
Secrets
The one existing allowlist entry in.gitleaks.toml covers upstream IPTV
catalog fixtures whose auth_key URL parameters and playback JWTs look like
secrets but are public tokens served to every viewer, not credentials.