Contributing
Contributions are welcome. Both applications are independent projects with their own tooling; pick the one you want to work on.
Built with AI assistance
rollnote is developed with substantial help from AI coding assistants (Claude
Code). Each repository’s CLAUDE.md captures the conventions that assistant works
to, and much of the code, tests, and this documentation was written or reviewed
with AI in the loop. Every change is still human-reviewed before it lands. You are
welcome to contribute with or without AI assistance - the same standards apply
either way.
Local setup
Each repo uses pnpm. The API needs a Postgres database, which its dev compose file provides.
API:
cd rollnote-api
pnpm install
docker compose -f dev.compose.yml up -d # Postgres
cp .env.example .env.local # then fill in the blanks
pnpm start:dev # watch mode on :3000 When NODE_ENV is not production, the API mounts an interactive Swagger UI
at /api - the fastest way to explore endpoints.
Frontend:
cd rollnote-front
pnpm install
pnpm start # dev server on :4200 The dev build points at http://localhost:3000, so start the API first.
Tests
# API
pnpm test # unit (Jest, no external deps)
pnpm test:int # integration (throwaway Postgres + Mailpit via testcontainers)
# Frontend
pnpm test # unit (Vitest, jsdom)
pnpm e2e # end-to-end (Playwright, Chromium) Integration tests need a Docker-compatible socket. Email in tests always goes through Mailpit, never a real SMTP relay.
Branch and release workflow
- Feature work branches off
developand targets it in a pull request. - Every PR to
developbumps the version in that repo’spackage.jsonfollowing semver (patch for fixes and refactors, minor for features, major for breaking changes). - The frontend’s release notes are the in-app changelog, seeded from the
API. When a frontend change is user-facing, its
package.jsonversion and the latest changelog entry are kept in lockstep.
The full conventions live in each repo’s CLAUDE.md.
Code style
- API: one module per domain, services touch only their own schema, DTOs validated with class-validator.
- Frontend: standalone components with
OnPushand signals; reach for a PrimeNG component before custom markup; SCSS scoped per component.
Where to send changes
The canonical source is on Forgejo. Open issues and pull requests there.