Contributing
The full guide is .github/CONTRIBUTING.md, and it is the one kept current. This page outlines the cycle, so you know what to expect before you clone. Code, comments and documentation are written in English; the interface ships in French and English, French being the source language.
A question rather than a change goes to Discussions, and so does an installation you cannot get working. The issue tracker takes reproducible defects and feature requests; Getting help explains where each kind of request goes.
Get it running
Section titled “Get it running”You need Node, pnpm, and Docker for the local PostgreSQL. The repository pins the
versions: engines in package.json sets the oldest Node it accepts, and packageManager
names the pnpm, which Corepack installs for you.
-
pnpm install, thendocker compose -f docker-compose.dev.yml up -dfor the database. That stack runs under its own compose project, so it can run beside a self-hosted instance. -
Copy
apps/api/.env.exampletoapps/api/.envand fill in its secrets, or the next step stops on an empty database URL. -
pnpm --filter @badlen/shared build, before anything else typechecks: the API reads that package through its compiled output. -
pnpm --filter @badlen/api exec prisma migrate devfor the schema, thenpnpm dev, which serves the API on:3001and the web app on:5173.
The workspace is eight packages: apps/api (NestJS, Prisma), apps/web (React, Vite,
Tailwind), apps/demo (the online demo), packages/shared (domain types, the import
schema, Decimal money), packages/mcp, docs (Astro and Starlight), which is this site,
site, the front page at badlen.fr, and packages/brand, what those two share; tools/
beside them holds the sweeps run against a live instance.
This site is written in the same repository as the code it describes. Its pages are the
Markdown files under docs/src/content/docs/, the French counterpart under
docs/src/content/docs/fr/, and pnpm --filter @badlen/docs dev serves both.
English is the master and French follows it; pnpm translations says which pages have
fallen behind. The guide has the rest, under The documentation site.
The gate
Section titled “The gate”One command, from the repository root:
pnpm checkIt runs format:check, lint, typecheck, test, build and knip in the order the
check job runs them, stops at the first one that fails and names it on the last line:
check failed at: pnpm <step>.
The suites needing a real PostgreSQL skip themselves in that run, and CI checks that none
of them was skipped there. Replay them as CI does, on a port of your own: PG_PORT=55613 pnpm live.
Opening a pull request
Section titled “Opening a pull request”A schema change ships its generated migration under apps/api/prisma/migrations, a new
user-facing string exists in both locales/fr and locales/en with the same keys, and no
real figures, account numbers or secrets go in the diff. Commit subjects are concise and
imperative, as in Add cost basis to positions view. Keep prose in English, keep dashes out of
it, and add no co-author trailer.
Contributions are licensed under AGPL-3.0. You keep the copyright on what you write, and you also grant the maintainer a non-exclusive right to distribute your contribution under other license terms, including commercial ones, so that a hosted offering remains possible; Badlen itself will continue to be available under a free software license. The code of conduct applies. A security problem goes through SECURITY.md, never a public pull request.