Thanks for helping. Please read the Code of Conduct first.
Requires Node 22 (see .nvmrc) and pnpm 9+ (via Corepack). Do not use yarn or npm.
pnpm install --frozen-lockfile
pnpm dev # http://localhost:4321Secrets for local dev go in .dev.vars (see .env.example and docs/ENVIRONMENT.md). Never commit them.
pnpm lint # ESLint
pnpm check # type-check
pnpm test # Vitest
pnpm build # production build
pnpm exec prettier --write <files you changed>- Branch from
main, use conventional commits (feat:,fix:,chore:,docs:). - Keep PRs focused. Do not reformat unrelated files.
- Do not build on the dead
*-newpages; work on the live pages and follow DESIGN.md. - If you remove or rename a page, add a 301 in
public/_redirects.
Summarised from CLAUDE.md and docs/SECURITY.md:
- Read env vars through
getEnv(); never hardcode secrets or expose them to client code. - Compare secrets with
constantTimeEqual, not===. - Public POST endpoints validate input and check
Origin; payment side effects are verified against Qgiv. - No
'unsafe-inline'in CSP and nostyle=""attributes. - Never return raw errors to clients or log PII.