lilith-platform.live/codebase/@features/my/backend-api
Natalie 528eca3a8b feat(quinn.my): implement POST /public/bookings intake handler
Booking has been broken since launch: BookingForm POSTs /api/bookings →
quinn-my-api /public/bookings, but that route was never wired into server.ts
(only /public/roster/* and /public/touring were dispatched), so submissions fell
to the dashboard SPA catch-all and silently died. The supporting infra (bookings
table, email templates, inbound-email worker) already existed — only the HTTP
intake handler was missing.

- routes/booking-intake.ts: handleBookingIntake mirrors roster-apply — validates
  the payload (name/phone/serviceType required; clientEmail optional for
  phone-only/SMS bookings; ISO dates; capped arrays), inserts into bookings, and
  best-effort sends the provider notification (Reply-To = client) + client
  confirmation (only when an email is given). Email failures never fail a
  persisted booking.
- schema-bookings.ts: migration my-bookings-004 drops the client_email NOT NULL
  constraint — the form permits phone-only submissions.
- server.ts: register POST /public/bookings with the standard addCors wrapper.

Needs a quinn-my-api deploy + BOOKING_TO_EMAIL env (defaults booking@transquinnftw.com).
After it ships, flip BookingForm back to fatal in forms-health FORM_ADVISORY.

Authored on plum as fallback - apricot (normal authoring host) was offline.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 18:02:06 -05:00
..
scripts feat(prospector-quinn): Introduce AI prospecting tools (heat scoring, reply generation) and Quinn-AI gateway integration, alongside frontend UI updates, backend API refactoring, and infrastructure enhancements for edge-purge and proxy services. 2026-06-10 20:40:01 -07:00
src feat(quinn.my): implement POST /public/bookings intake handler 2026-06-19 18:02:06 -05:00
.env.development chore(backend-api): 🔧 Update development environment variables in .env.development 2026-05-14 18:56:09 -07:00
.env.local.example
eslint.config.js
package.json deps-upgrade(backend-api): ⬆️ Update dependencies across backend-api, admin, and price-watcher packages 2026-04-24 20:04:56 -07:00
README.md
tsconfig.json
vitest.config.ts chore(backend-api): 🔧 Update dev env vars, Vitest config, and deployment examples for backend API 2026-06-08 00:10:31 -07:00

My Dashboard API

Node.js HTTP server for the Quinn personal dashboard. Port 3024.

Auth: SSO cookie (via quinn-sso-api) or service bearer token (QUINN_MY_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_MY_SERVICE_TOKEN>. No local SQLite is touched. SSE streams (calendar sync etc.) pass through transparently — the response body is streamed, not buffered.

Copy .env.local.example to .env.local and fill in the token:

cp .env.local.example .env.local
# edit .env.local — get QUINN_MY_SERVICE_TOKEN from /etc/quinn-my-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.