Operate
Local development
Run the dashboard in demo mode or connect it to the local API service.
Dashboard-only demo
cd apps/web
cp .env.example .env.local
npm install
npm run devNEXT_PUBLIC_SKILLROUTER_DEMO_MODE=true explicitly enables representative browser-local data. Demo mode is opt-in. It does not call a provider, create a payment, or create a usable API key. Set it to false for integrated and production deployments.
Connect the API
NEXT_PUBLIC_SKILLROUTER_API_URL=http://localhost:3001
NEXT_PUBLIC_SKILLROUTER_SITE_URL=http://localhost:3000
NEXT_PUBLIC_SKILLROUTER_DEMO_MODE=falseset -a && source apps/api/.env && set +a
npm run db:setup:dev --workspace @skillrouter/api
npm run dev --workspace @skillrouter/apiDatabase setup is an explicit operator action. Source checkouts use the :dev operator commands; built deployments use the compiled commands without that suffix. Keep AUTO_SETUP_DATABASE=false; production startup validates migrations and seeds but does not run DDL.
Verify changes
npm run typecheck
npm test
SKILLROUTER_TEST_DATABASE_URL=postgres://... npm test
NEXT_PUBLIC_SKILLROUTER_API_URL=https://api.useskillrouter.com \
NEXT_PUBLIC_SKILLROUTER_SITE_URL=https://useskillrouter.com \
NEXT_PUBLIC_SKILLROUTER_DEMO_MODE=false npm run buildPair API and dashboard origins
DASHBOARD_ORIGINS=http://localhost:3000The API allows credentialed browser requests only from configured dashboard origins. List exact origins separated by commas. Do not use a wildcard with session cookies.
Enable one integrated route
- Register the intended account and promote it with the admin:promote:dev server command.
- Run the OpenRouter catalog sync and review a seeded model's metadata, price, route contract, and price ceiling.
- Activate that model and enable the database openrouter_enabled flag while leaving the production resale flag disabled.
- Add test credit through signed Stripe test mode or an audited admin adjustment, then create a limited test API key.
- Use GET /v1/models as the source of truth before sending the first request.