Appearance
Contributing
Guidelines for contributing code to TT Time Tracker.
Branch naming
Use the following prefixes:
| Prefix | When to use |
|---|---|
feat/ | New features |
fix/ | Bug fixes |
chore/ | Maintenance, dependency updates |
docs/ | Documentation changes |
refactor/ | Code improvements without behaviour change |
Examples: feat/invoice-export, fix/entry-approval-race, chore/update-deps
Commit messages
Write imperative, present-tense commit messages:
feat: add CSV export for time entries
fix: prevent double-submission on entry form
chore: update VitePress to 1.6.3Before opening a PR
Lint your code:
bashpnpm lint:fixType-check the frontend:
bashpnpm build:clientRun tests (API):
bashpnpm --filter @tt/api testVerify the app works — start all three services and manually verify the feature you changed.
Pull request checklist
- [ ] Branch name follows the convention
- [ ] No lint errors (
pnpm lint) - [ ] Frontend builds cleanly (
pnpm build:client) - [ ] If you added an API endpoint: the typed SDK has been regenerated (
pnpm openapi) - [ ] If you changed the Prisma schema: a migration has been created and committed
- [ ] PR description explains what changed and why
Monorepo commands
| Command | Description |
|---|---|
pnpm lint | Lint the entire monorepo |
pnpm lint:fix | Auto-fix lint errors |
pnpm build:client | Type-check and build the frontend |
pnpm build:api | Build the NestJS API |
pnpm --filter @tt/api test | Run API unit tests |
pnpm db:generate | Regenerate the Prisma client |