A detailed walkthrough for getting IssueFit running locally.
| Tool | Version | Notes |
|---|---|---|
| Node.js | >= 22 | .nvmrc pins 22; nvm use picks it up |
| pnpm | 11 | corepack enable uses the version from package.json |
| Docker | any recent | Only needed for the local PostgreSQL |
-
Install dependencies
pnpm install
-
Configure the environment
cp .env.example .env
The defaults match the Docker Compose database; nothing needs editing for local work.
-
Start PostgreSQL
docker compose up -d
Wait for the health check:
docker compose psshould showpostgresashealthy. -
Apply migrations
pnpm db:migrate
-
Build once, then develop
pnpm build pnpm dev
- Web app: http://localhost:3000
- Worker: logs structured JSON to stdout
- The initial
pnpm buildcreates the type declarations of internal packages that the apps import; thedevwatchers keep them up to date afterwards.
pnpm test # unit tests (Vitest)
pnpm exec playwright install chromium # once, downloads the browser
pnpm test:e2e # end-to-end tests (Playwright)pnpm test:e2e starts the web dev server automatically if nothing is listening on port 3000.
- Edit the schema in
packages/database/src/schema/. - Generate a migration:
pnpm db:generate. - Apply it locally:
pnpm db:migrate. - Commit the schema change and the generated files in
packages/database/drizzle/together. CI fails if they drift apart.
DATABASE_URL is not set— copy.env.exampleto.envat the repository root.- Port 5432 already in use — stop any local PostgreSQL, or change the host port in
docker-compose.ymlandDATABASE_URLtogether. pnpm typecheckfails with missing module@issuefit/config— runpnpm buildfirst; apps resolve internal packages through their built declarations.- Playwright cannot find a browser — run
pnpm exec playwright install chromium.