Thanks for working on JustPrep. Start with AGENTS.md, then the documents it links. This page covers the mechanics.
pnpm install --frozen-lockfile
cp .env.example .env.local # fill in values (see comments)
pnpm dlx firebase-tools emulators:start --only auth,firestore # in a second terminal
pnpm devlefthook install runs automatically on pnpm install and enables the git hooks.
Optional but recommended: install the gitleaks binary (winget install gitleaks / scoop install gitleaks / brew install gitleaks) so secrets are caught at commit time; CI runs it on every push either way.
If a globally installed older pnpm shadows the pinned version, run commands through corepack pnpm … or upgrade the global install.
- Branch from the current milestone branch (
milestone/p<N>-<name>, seedocs/MILESTONES.md), never frommain:feat/…,fix/…,refactor/…,docs/…,chore/…,security/…. PRs target the milestone branch. Promotion is milestone →dev→main(seePROCESS.md). - Conventional Commits. Examples:
feat(attempt): stream interviewer turns in text modefix(auth): await cookies() in profile updatesecurity(api): require session on /api/voice/session
- Keep PRs small (≈ ≤ 400 changed lines). Split UI and server changes when practical.
- Fill in every section of the PR template. Empty sections block review.
- CI must be green: lint, typecheck, unit, integration (emulator), e2e (critical), build, audit, gitleaks.
- UI changes: attach screenshots at 375 px and 1440 px; confirm the device matrix in
docs/RESPONSIVE.md; tick the anti-AI-look checklist fromdocs/DESIGN_SYSTEM.md§7. - Server changes: tick the checklist in
docs/SECURITY.md§3. - Architecture, vendor, data-model, or token changes: include an ADR in
docs/decisions/. - Update docs in the same PR. Add a
CHANGELOG.mdentry under Unreleased. - Squash-merge into the milestone branch once approved. Milestone →
devanddev→mainpromotions are merge commits so history per phase stays traceable.
Reviewers check, in order: security → correctness → tests → design-system conformance → responsiveness → readability. Style nits are handled by tooling, not comments.
Use the issue templates in .github/ISSUE_TEMPLATE/. Security issues: see SECURITY.md (do not open a public issue).