Thanks for your interest in contributing to Sanson!
- Fork and clone the repository
- Install prerequisites: Node.js 24 (
nvm use), pnpm, Docker - Run
pnpm install - Start the database:
docker compose -f docker/compose.yml up -d - Run the tests:
pnpm test
- Read the specifications to understand the project goals and architecture
- Create a branch from
main - Write your code — all code, comments, and commit messages must be in English
- Write tests — integration tests with real PostGIS via Testcontainers, no database mocks
- Run
pnpm testto make sure everything passes - Commit using Conventional Commits (
feat:,fix:,docs:,chore:) - Open a pull request
- TypeScript strict mode — no
any - Raw SQL via
pg— no ORM, no query builder - Fastify route pattern — routes in
src/routes/, registered inapp.ts, with JSON schemas for OpenAPI buildApp(db: Pool)— app factory for testability
- Integration tests use Testcontainers with
postgis/postgis:16-3.4 - One container per
describeblock (beforeAll/afterAll) - Routes that don't need the database use a dummy
{ end: async () => {} } as unknown as Pool hookTimeout: 120_000in vitest config for slow container pulls
See the Out of scope section in the specs. Don't add authentication, WMS/WFS support, ORMs, or Redis.
Open an issue on GitHub. Include steps to reproduce, expected behavior, and actual behavior.