Before you start
- Get the project running locally — follow the Server Setup and Client Setup guides.
- Check the open issues to see if someone is already working on your idea.
- For significant changes, open a GitHub issue first to discuss the approach before writing code.
Workflow
1
Branch from develop
Always branch from
develop, never from master:2
Make your changes
Keep commits small and focused. Run
npm run lint before each commit — a pre-commit hook will catch most issues automatically.3
Test locally
Make sure the server starts cleanly and existing behaviour is not broken. Run
npm test for unit tests and npm run test:e2e for end-to-end tests.4
Open a PR against develop
Fill in every section of the PR template — especially how to test. Incomplete PRs will be sent back.
5
Review and merge
Every PR passes through three layers before it can merge:
- CodeRabbit auto-reviews when the PR is opened. Resolve every thread it raises.
/pr-review-merge <PR number>(run via Claude Code inside the repo) — a judgment-based review that checks gates and routes the PR with a label and reviewer request.- A maintainer approves and merges in the GitHub UI (squash merge).
6
Staging → production
Once verified on staging (
develop), a separate PR promotes it to master, which triggers the production deploy including migrations.Branch naming
Examples:
feat/bulk-contact-import, fix/attendance-query, chore/update-deps
Commit messages
Use Conventional Commits:npm run commit for an interactive prompt.
Database migrations
When your change modifies a TypeORM entity:- Generate a migration:
npm run migration:generate -- src/migrations/<Name> - Review the generated file carefully.
- Test both directions:
npm run migration:runthennpm run migration:revert. - Commit the entity change and the migration file together in the same PR.
Code style
- ESLint and Prettier are configured on both server and client.
- Run
npm run lintandnpm run formatbefore pushing. - Do not disable lint rules without a clear explanation in a comment.
PR review gates
Before a PR can merge, all of the following must pass:
PRs that touch sensitive paths (entity definitions, migrations, auth/tenant code, finance, deploy workflows) are routed to the Senior Engineering team for review.