Add a `city` column to rate_sections (NULL = default/home card) with an additive migration and CMS field. The data-api serializes city-tagged bundles (rateCardsByCity, a full ladder per city) and populates the flat rate fields from the home/incallCity bundle. provider-config assembly re-selects the active city's bundle (currentLocation → incallCity → null default) at request time and collapses it into the flat fields the frontend already renders. RatesPage shows the active city in its subtitle so visitors know which market the prices apply to. Shared types gain RateCardBundle + ProviderData.rateCardsByCity. |
||
|---|---|---|
| .. | ||
| migrations | ||
| src | ||
| .env.development | ||
| .env.local.example | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Admin API
Node.js HTTP server for the Quinn admin control center. Port 3023.
Auth: SSO cookie (via quinn-sso-api) or service bearer token (QUINN_ADMIN_SERVICE_TOKEN).
Dev proxy mode
When PROXY_TARGET is set, the server short-circuits every request (except /health) and proxies it upstream to the target, injecting Authorization: Bearer <QUINN_ADMIN_SERVICE_TOKEN>. No local SQLite is touched.
Copy .env.local.example to .env.local and fill in the token:
cp .env.local.example .env.local
# edit .env.local — get QUINN_ADMIN_SERVICE_TOKEN from /etc/quinn-admin-api/secrets.env on vps-0
The server logs a WARN line at boot when proxy mode is active, and prefixes each proxied request log with [PROXY→prod].
See docs/PROD_DB_UNIFICATION_PLAN.md for full architecture context.