Mise
Marigold Hair Studiosample salonDay 1 of 2
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 5
Public page with the salon's facts and a three-step booking form. A booking is confirmed at once or clearly refused.
BEFORE 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
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 4
The day's book with a column per stylist. Staff add, move, cancel and complete visits, mark arrivals and edit settings.
BEFORE 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
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 4
Answers questions from the records and cites them. A change is a proposal that waits for a Confirm tap.
BEFORE 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
POST /askPOST /agent-proposals/{proposal_id}/confirmbackend/app/features/agent/frontend/src/features/assistant/

Texting agent

clientsheld back by 5
Answers questions and books by text under the same rules as the site. Code, not the model, writes the confirmation.
BEFORE 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
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 5
A voice layer over the texting agent's tools. It reads the booking back before booking, and pressing 1 rings the salon.
BEFORE 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
POST /integrations/photon/bookingsPOST /integrations/photon/staff-notesagents/photon/voice/

Reminders

clientsheld back by 2
A confirmation at booking and a reminder the day before, only to clients who opted in. Every delivery is recorded.
BEFORE 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
POST /internal/reminders/runGET /reminder-deliveriesbackend/app/features/reminders/

Payments

ownerheld back by 2
The owner records what was paid for a completed visit and sees the day's total. Recorded, not processed.
BEFORE 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
POST /appointments/{appointment_id}/paymentsGET /paymentsPOST /payments/{payment_id}/correctionsGET /payments/dailybackend/app/features/payments/frontend/src/features/payments/