External dashboards

Give an LLM the Salon dashboard skill to adapt the built-in experience or create a separate client.

To create a custom Salon dashboard, copy the skill and give it to your LLM. The skill will explain how features/dashboard supplies the Keystone administration shell while features/platform contains Salon's product-specific operator experience.

After that source orientation, it will ask what you dislike, what should stay, what workflows and users matter, and what the replacement should look and feel like. It then traces the exact routes, feature slices, GraphQL calls, schema, access rules, sessions, and provider boundaries in the supplied Salon codebase before proposing work.

Current platform routes

Route files live in app/dashboard/(admin)/platform/** and stay thin. Each one wraps a screen from features/platform with withPlatformPermission. A user with canManageSalon passes every check. Otherwise the role needs at least one listed flag, or the page redirects to /dashboard/no-access.

RouteSliceRole flags (any one)What it does
/dashboard/platform/appointmentsappointmentscanManageAppointmentsDay board and booking list by stylist
/dashboard/platform/appointments/newappointmentscanManageAppointmentsBook at the desk
/dashboard/platform/appointments/[id]appointmentscanManageAppointments, canManagePaymentsDetail: status changes, reschedule, steps (segments), deposit, care
/dashboard/platform/checkoutcheckoutcanManagePaymentsCheckout queue
/dashboard/platform/checkout/[id]checkoutcanManagePaymentsTicket: services, retail, discount, tip, package or membership credit
/dashboard/platform/salessalescanManagePayments, canIssueRefunds, canViewReportsSales list with status tabs and search
/dashboard/platform/sales/[id]salescanManagePayments, canIssueRefunds, canViewReportsRefund, void, partial refund, commission and tip corrections
/dashboard/platform/store-settingsstore-settingscanManageSalonStorefront name, description, theme, logo, primary location
/dashboard/platform/clientsclientscanManageClientsClient directory
/dashboard/platform/clients/[id]clientscanManageClientsProfile, visits, care profile, notes, color formulas
/dashboard/platform/engagementworkspacescanManageAppointments, canManageClientsWaitlist demand and message log (read-only)
/dashboard/platform/consultationsconsultationscanManageCareRecordsReview signed consultations; create and publish form versions
/dashboard/platform/loyaltyloyaltycanManageClientsPoints program and tiers, balances, referrals
/dashboard/platform/reviewsreviewscanManageClientsPublish, hide, or delete client reviews
/dashboard/platform/waitlistwaitlistcanManageAppointments, canManageClientsAdd walk-ins and seat them
/dashboard/platform/catalogworkspacescanManageCatalogCategories, services, products
/dashboard/platform/catalog/[id]catalogcanManageCatalogService detail: booking rules, price by level, upcoming, reviews
/dashboard/platform/benefitsbenefitscanManageCatalog, canManageClientsMembership and package plans; sell, enrol, pause, cancel
/dashboard/platform/gift-cardsgift-cardscanManagePaymentsSell at the desk, redeem, return value, balance history
/dashboard/platform/inventoryworkspacescanManageInventoryRetail stock and adjustments
/dashboard/platform/schedulesschedulescanManageSchedules, canManageOwnScheduleWeekly hours and time off
/dashboard/platform/resourcesresourcescanManageResources, canManageAppointmentsChairs, rooms, equipment; availability
/dashboard/platform/administrationworkspacescanManageSalonStaff and locations
/dashboard/platform/staff——Redirects to /dashboard/platform/administration
/dashboard/platform/staff/[id]staffcanManageSchedules, canManageAppointmentsStylist profile: hours, upcoming, earnings, reviews, services
/dashboard/platform/commissionscommissionscanManageCommissionsUnpaid commissions and card tips; payouts
/dashboard/platform/reportsworkspacescanViewReportsRevenue, refunds, appointments, payment method and stylist tables (?range=)
/dashboard/platform/integrationsworkspacescanManageIntegrationsPayment providers, webhook events, domain-event backlog (read-only)

Sidebar entries come from features/platform/lib/navigation.ts. Other dashboard routes are the shared shell: /dashboard/init, /dashboard/signin, /dashboard/signup (only when PUBLIC_SIGNUPS_ALLOWED=true), /dashboard/reset, /dashboard/no-access, and the generic list screens /dashboard/[listKey], /dashboard/[listKey]/create, and /dashboard/[listKey]/[id].

Named operations by slice

The built-in pages call GraphQL through server actions with these operation names.

SliceQueriesMutations (root field)
appointmentsAppointmentOperations, AppointmentDetail, AppointmentCare, AppointmentCommissions, AppointmentInventory, AppointmentPaymentBoundary, DayBoardShifts, StaffBookingData, VerifyOperatorRescheduleStaffBookAppointment (bookAppointment), TransitionAppointment and CancelAppointment (transitionAppointment), RescheduleOperatorAppointment (scheduleAppointmentSegments), TransitionSegment (transitionAppointmentSegment), RecordDeposit (processAppointmentDeposit), ConvertWaitlistEntry (transitionWaitlistEntry)
checkoutCheckoutQueue, CheckoutWorkflowAppointment, CheckoutClientBenefits, CheckoutLocalStock, SelectedRetailProductsControlledCheckout (completeAppointmentCheckout)
salesSales, Sale, SaleCompensationReverseSale (reverseSalonTransaction), AdjustCompensation (adjustSaleCompensation)
clientsClientProfile, ClientCare, ClientDirectoryVisitsUpdateClientCareProfile, AddClientNote (createClientNote), AddColorFormula (createColorFormula)
consultationsConsultationsPublishVersion (publishConsultationTemplateVersion), ReviewConsultation, CreateFormTemplate, SetFormTemplateActive
benefitsBenefitsSellBenefit (sellClientBenefit), SetBenefitStatus (setClientBenefitStatus), CreatePlan, UpdatePlan (generated CRUD)
gift-cardsGiftCardsSellGiftCard (purchaseGiftCard), ConfirmGiftCard (confirmGiftCardPurchase), ChangeGiftCardBalance (applyGiftCardBalance)
loyaltyLoyaltyAdjustPoints (adjustClientPoints), CompleteReferral, CreateProgram, UpdateProgram, CreateReferral (generated CRUD)
reviewsReviewQueueModerateReview (updateReview), DeleteReview (deleteReview)
waitlistWaitlistQueueJoinWaitlist, TransitionWaitlistEntry
schedulesScheduleOperations, TimeOffCopies, TimeOffStylistUpsertWeeklySchedule and UpsertTimeOff (upsertStylistSchedule), SetScheduleAvailability and WithdrawTimeOff (setStylistScheduleAvailability)
resourcesResourceOperationsSetSalonResourceAvailability
commissionsCommissionOperations, UnpaidStylistCommissionsPayoutCommissions, PayoutGratuities
staffStaffProfile, StaffEarnings—
catalogServiceCore, ServiceDetailSavePricingTier (saveSalonRecord)
store-settingsPlatformStoreSettingsUpsertSalonStoreSettings
workspacesSalonOperationsWorkspace, SalonManagementWorkspace, ServiceTakings, InventoryIntentActor, OriginalInventoryReceiptSaveSalonRecord, AdjustSalonInventory and AdjustSavedInventory (adjustSalonInventory), TransitionWaitlist, UploadSalonImage (createSalonImage)
onboardingActiveUserForOnboarding, SalonSetupStateRunSalonOnboarding, UpdateOnboardingStatus (updateUser)
libPlatformActor, SalonTimezone, ShopTodayLocations—

Notes for a separate dashboard

  • Use the custom mutations for bookings, checkout, refunds, payouts, benefits, gift cards, stock, and schedules. The generated create, update, and delete for those lists are blocked.
  • Re-check permission on the server. The page guards in withPlatformPermission only control navigation.
  • Consultation answers need canManageCareRecords. The manager flag does not grant it.
  • There is no tenant scope to pass. Every staff user with a flag sees all locations.

On this page