External dashboards

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

To create a custom Tour Guide dashboard, copy the skill and give it to your LLM. The skill explains how features/dashboard supplies the Keystone administration shell while features/platform holds the product-specific operator pages.

After that source orientation, it asks what you dislike, what should stay, which workflows and users matter, and what the replacement should look like. It then traces the routes, GraphQL calls, schema, access rules, and sessions before proposing code.

Current platform routes

Route files live in app/dashboard/(admin)/platform/** and stay thin. Each imports one screen.

RouteKindWhat it does
/dashboard/platform/todayPurpose-builtToday's departures, staffing and waiver alerts, cancel
/dashboard/platform/calendarPurpose-built, read-onlyWeek grid of departures
/dashboard/platform/bookingsPurpose-builtStatus tabs, refunds
/dashboard/platform/check-inPurpose-builtMobile manifest, check-in, no-show
/dashboard/platform/guidesPurpose-built, read-onlyRoster, certifications, assignments
/dashboard/platform/toursGeneric listTour
/dashboard/platform/waiversGeneric listWaiverTemplate
/dashboard/platform/promo-codesGeneric listPromoCode
/dashboard/platform/resourcesGeneric listResource
/dashboard/platform/channelsGeneric listChannel
/dashboard/platform/customersGeneric listUser
/dashboard/platform/payment-providersGeneric listPaymentProvider
/dashboard/platform/settingsGeneric listStoreSettings

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

Named operations

Operator screens call GraphQL through server actions in each slice's actions folder.

SliceOperations
todaydeparturesInRange, cancelDeparture
calendardeparturesInRange
bookingsbookings (generated list), refundBooking
check-indepartureManifest, departuresInRange, checkInParticipant, markNoShow
guidesguides (generated list)
onboardingensureTourOnboardingRecord, seedTourActivity, updateActiveUser

The sidebar brand and setup card read operatorName and tourTotal.

Notes for a separate dashboard

  • Use the custom operations for departures, bookings, refunds, staffing, and check-in. Generated create, update, and delete on those lists are blocked.
  • Re-check permission on the server. The pages do not guard by role.
  • There is no tenant scope to pass. Every staff user with a flag sees the whole operator.
  • Several jobs have no screen yet: offering guides, assigning vehicles, phone booking, approving refunds, resizing a departure, and statements. A separate client can add them on top of the operations in the GraphQL API.

On this page