Thank you for helping improve this project. This document describes how we work and what we expect before a pull request is merged.
-
Fork the repository and clone your fork.
-
Create a branch from
main:git checkout -b your-feature-or-fix
-
Install dependencies:
npm ci
-
Add a
.envor.env.localfrom.env.exampleso the app and type-aware tooling can resolveimport.meta.envat dev time. For tests only, the repo includes.env.test.
Run the same checks as CI (see .github/workflows/ci.yml):
npm run lint
npm run typecheck
npm run test:run
npm run buildFor build (and sometimes dev), set:
export VITE_SUPABASE_URL=https://test.supabase.co
export VITE_SUPABASE_ANON_KEY=test-keyOn Windows (PowerShell):
$env:VITE_SUPABASE_URL="https://test.supabase.co"
$env:VITE_SUPABASE_ANON_KEY="test-key"
npm run build- TypeScript is strict; avoid
anyunless there is a strong reason and a narrow scope. - ESLint is the source of truth for lint rules; unused parameters should be prefixed with
_where applicable. - Match existing patterns in the file you edit (imports, naming, component structure).
- Write commit messages in the imperative mood (
Add checkpoint scroll, notAdded). - Keep PRs focused: one concern per PR when possible.
- Describe what changed and why in the PR description.
- Link related issues if any.
- Prefer Vitest tests next to the code:
*.test.tsundersrc/. - Add or update tests when you change behavior in pure functions (parsers, engines, helpers).
- UI changes may use React Testing Library where it adds clear value; not every UI tweak requires a test.
- Update README.md or files under docs/ if you change setup, env vars, architecture, or Supabase expectations.
- Do not introduce
eval,new Function, or dynamic execution of arbitrary user strings without an explicit, reviewed sandbox design. - Do not commit real Supabase service role keys or other secrets. The anon key is public by design in the client but still belongs in env files, not hardcoded.
Open an issue for design questions or larger proposals so maintainers can align before you invest in a big change.