APPS AND AGENTS
Stations
What the salon and its clients use: first running in a sandbox on this salon's config, then where each one stands on the real Lollicut stack.
On the real Lollicut stack
0 of 7 ready on config alone7 engine changes hold the rest back
Booking site
clientsheld back by 5BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Appointment length follows the service (45, 90 min)backend/supabase/migrations/20261114161314_booking_foundation.sql:22Slots every 15 minbackend/app/features/settings/models.py:70The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123A site with Marigold Hair Studio's own facts and lookfrontend/src/features/site/content.ts:100
STILL LOLLICUT-SPECIFICCopy, FAQ and photos are constants in site/content.ts, and the design is Lollicut's. Hours, phone and services already come from GET /salon.
CHECKEDHAC-70: confirmed, slot taken, duplicate, expired quote, lost response and double tap, each against real Postgres.
+ 6 endpoints · 3 folders− endpoints and folders
GET /salonGET /servicesGET /availabilityGET /availabilityPOST /booking-quotesPOST /bookingsfrontend/src/features/site/frontend/src/features/booking/frontend/src/features/seo/
Staff dashboard
front desk, ownerheld back by 4BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Appointment length follows the service (45, 90 min)backend/supabase/migrations/20261114161314_booking_foundation.sql:22Slots every 15 minbackend/app/features/settings/models.py:70The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123
STILL LOLLICUT-SPECIFICReads stylists, services and hours from the settings API. The brand name sits in a few strings.
CHECKEDHAC-71: owner and staff runs on the real backend; 0 axe violations at 390, 1180 and 1440 px.
+ 14 endpoints · 4 folders− endpoints and folders
GET /calendarPOST /staff/bookingsPOST /appointments/{appointment_id}/reschedulePOST /appointments/{appointment_id}/cancelPOST /appointments/{appointment_id}/completePOST /appointments/{appointment_id}/arrivalGET /settingsPUT /settingsPOST /settings/servicesPOST /settings/stylistsGET /customersPATCH /staff/me/preferencesGET /staff-notesPOST /staff-notes/{note_id}/handlefrontend/src/features/calendar/frontend/src/features/overview/frontend/src/features/settings/frontend/src/features/auth/
Staff agent
front desk, ownerheld back by 4BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Appointment length follows the service (45, 90 min)backend/supabase/migrations/20261114161314_booking_foundation.sql:22The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123Agents that speak for Marigold Hair Studio, a hair salon for adult cuts and colour in Princetonagents/photon/lollicut_photon/prompt.py:26
STILL LOLLICUT-SPECIFICThe system prompt names Lollicut and Los Angeles.
CHECKEDHAC-68, HAC-71: a sourced answer, a move applied only after Confirm, a phone change refused.
+ 2 endpoints · 2 folders− endpoints and folders
POST /askPOST /agent-proposals/{proposal_id}/confirmbackend/app/features/agent/frontend/src/features/assistant/
Texting agent
clientsheld back by 5BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Appointment length follows the service (45, 90 min)backend/supabase/migrations/20261114161314_booking_foundation.sql:22Slots every 15 minbackend/app/features/settings/models.py:70The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123Agents that speak for Marigold Hair Studio, a hair salon for adult cuts and colour in Princetonagents/photon/lollicut_photon/prompt.py:26
STILL LOLLICUT-SPECIFICThe prompt and a few facts (lollipops, car chairs) are written for Lollicut. Services, prices, hours and phone load from the backend.
CHECKEDHAC-34: 64 scripted conversations, 471 of 471 assertions, 64 of 64 safety checks. HAC-69: 32 of 32 safety checks on the real backend.
+ 6 endpoints · 2 folders− endpoints and folders
POST /integrations/photon/bookingsPOST /integrations/photon/conversations/lookupPUT /integrations/photon/conversationsPOST /integrations/photon/opt-outsPOST /integrations/photon/eventsPOST /integrations/photon/staff-notesagents/photon/lollicut_photon/agents/photon/evals/
Voice line
clientsheld back by 5BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Appointment length follows the service (45, 90 min)backend/supabase/migrations/20261114161314_booking_foundation.sql:22Slots every 15 minbackend/app/features/settings/models.py:70The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123Agents that speak for Marigold Hair Studio, a hair salon for adult cuts and colour in Princetonagents/photon/lollicut_photon/prompt.py:26
STILL LOLLICUT-SPECIFICThe prompt names Lollicut. The forward number is an environment value.
CHECKEDHAC-37: 46 scripted calls, 244 of 244 assertions, 46 of 46 safety checks on mock telephony. Never run on a live call.
+ 2 endpoints · 1 folders− endpoints and folders
POST /integrations/photon/bookingsPOST /integrations/photon/staff-notesagents/photon/voice/
Reminders
clientsheld back by 2BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9The client books for themselvesbackend/supabase/migrations/20261114161314_booking_foundation.sql:123
STILL LOLLICUT-SPECIFICThe wording is one TOML file, written for Lollicut.
CHECKEDHAC-26: dry run unless live sends are on and the number is allow-listed.
+ 2 endpoints · 1 folders− endpoints and folders
POST /internal/reminders/runGET /reminder-deliveriesbackend/app/features/reminders/
Payments
ownerheld back by 2BEFORE IT CAN GO LIVE HERETimes in America/New_Yorkbackend/supabase/migrations/20261114161314_booking_foundation.sql:9Record credit paymentsbackend/app/features/payments/service.py:26
STILL LOLLICUT-SPECIFICMethods are cash, debit and other.
CHECKEDHAC-71: a payment on a completed visit changes the day's total.
+ 4 endpoints · 2 folders− endpoints and folders
POST /appointments/{appointment_id}/paymentsGET /paymentsPOST /payments/{payment_id}/correctionsGET /payments/dailybackend/app/features/payments/frontend/src/features/payments/