Thanks for taking the time to contribute. OpenClockwork is open source under the Apache License 2.0, and we welcome bug reports, design discussions, and pull requests.
We do not use a Contributor License Agreement. Instead, every commit must be signed off under the Developer Certificate of Origin 1.1, which certifies that you wrote the patch (or otherwise have the right to submit it under the project license).
Sign off your commits with git commit -s. This appends a line to the commit message:
Signed-off-by: Your Name <your.email@example.com>
Use your real name. Anonymous or pseudonymous sign-offs cannot be accepted. The CI checks for this trailer on every commit in a pull request — unsigned commits will block the merge.
If you forgot to sign off, fix the latest commit with git commit --amend -s or rebase and run git rebase --signoff <base> for older commits.
- Bugs: open a GitHub issue with reproduction steps, expected vs. actual behaviour, environment details (OS, Node version, browser).
- Security vulnerabilities: do not open a public issue. See SECURITY.md.
- Feature ideas: open a GitHub Discussion or a "proposal" issue first. We prefer to discuss design before code.
- Fork the repo and create a feature branch from
main. - Review the README, feature overview, and existing code before changing domain rules — OpenClockwork models a real working-time-tracking system, and the rules around break deduction, approval thresholds, etc. are not invented.
- Keep new dependencies aligned with the existing TypeScript, Nx, NestJS, React, Prisma, and Tailwind stack unless the pull request clearly explains the reason for a change.
- Run
pnpm installat the repo root, then usepnpm nx run <project>:<target>(e.g.pnpm nx serve api) for local dev. - Add tests. New endpoints, business rules, or UI flows without tests will not be merged.
- Sign off your commits (
git commit -s). - Open a pull request against
main.
- One logical change per PR. If your branch fixes a bug and refactors something, split it.
- The PR description should explain why, not just what. Link to the issue or discussion.
- All checks (lint, type-check, tests, DCO) must be green before review.
- A reviewer will respond within a few days. Larger changes may take longer; please be patient.
- We reserve the right to decline contributions that do not align with the project goals stated in the README.
- TypeScript strict mode, no
anyoutside of clearly justified boundaries. - Backend: NestJS conventions; controllers thin, services hold the logic.
- Frontend: Tailwind for styling. Component-local state via React; cross-cutting state via the patterns established in
apps/web. - Database: schema changes go through Prisma migrations. Never edit a migration after it has been merged to
main. - All public APIs are documented through their OpenAPI spec (NestJS Swagger). UI uses the generated client.
All participants in the project community are expected to follow the Code of Conduct.
By submitting a pull request, you license your contribution under the project's Apache 2.0 License and certify the Developer Certificate of Origin via your Signed-off-by line. No copyright assignment is required; you keep ownership of your work.