lilith-platform.live/codebase/@features/admin/backend-api
Natalie 93316b46ca feat(rates): per-city rate cards
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.
2026-06-21 13:49:48 -05:00
..
migrations db(admin): 🗃️ Remove payment_methods column from contact table and update migration logic 2026-05-16 00:32:18 -07:00
src feat(rates): per-city rate cards 2026-06-21 13:49:48 -05:00
.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.