Local development
Commands below are the ones in pnxt-api-nestjs/package.json, the API README, and documentation-analysis/developer-workflows.md. Migrations are not applied when containers start.
yarn start:api commits outbox rows and serves HTTP. It does not dispatch the outbox and it does not run channel-sync crons. Start the worker and the scheduler as well.
Node version
| Source | Requirement |
|---|---|
pnxt-api-nestjs/package.json engines.node | >=24.0.0 |
pnxt-api-nestjs/README.md and the workspace README | Node.js 20+ |
Unknown — requires developer confirmation: which version CI and production actually run. The engines field is the package contract. Yarn is pinned by the API packageManager field to 1.22.22.
API
From pnxt-api-nestjs:
cp .env.example .env
yarn
yarn prisma:generate
docker compose up -d
docker compose run --rm api yarn migrate:deploy
docker compose run --rm api node dist/cli seed:demo
yarn start:api
yarn start:worker
yarn start:scheduler
yarn dev is nest start --watch. The README uses that as the host API process against Compose dependencies. It still does not replace the worker or the scheduler.
seed:demo is nestjs-command seed:demo. The example env says DEMO_SEED_PASSWORD must be set on any reachable host because a fallback password is committed. Do not copy that fallback into docs or chat.
Compose uses pgvector/pgvector:pg16 behind PgBouncer, Redis, an AI gateway container (bifrost), and a Bharat Address sidecar. Host database URLs stay in .env. Container database URLs are rewritten to PgBouncer. DIRECT_DATABASE_URL bypasses the pooler for migrations.
Required boot settings are listed in Environment.
Swagger UI is mounted only when APP_ENV is not production, at /{doc.prefix} (default /docs). See OpenAPI.
Bull Board is mounted at /admin/queues and protected with HTTP basic auth (BULL_BOARD_USER, BULL_BOARD_PASSWORD). That route is in monitoring.module.ts.
Admin
Package manager is pnpm (pnpm-lock.yaml).
cd pnxt-admin
pnpm dev
pnpm verify
The Vite dev server is the admin app. Point its VITE_API_URL at the API.
Warehouse
Package manager is npm. Scripts in pnxt-warehouse/package.json:
npm start
npm run android
npm run ios
npm run web
Set EXPO_PUBLIC_API_URL. No test script was present in that package.json.
Quality gate before you push API changes
yarn verify
yarn architecture:check
yarn verify runs lint, Prettier check, typecheck, build, and Jest. Details are in Running tests.