2 primary routes · /team · /sign-in
Canonical reference
Booker spec hub
Product behavior changes should begin here, then flow into contracts, architecture, and implementation.
Control status
- Single source of truth.The spec hub should frame what changed, why it matters, and how to verify it.
- Design system is now canonical.Major interface changes are governed by the live interface doctrine, not ad hoc styling.
Change path
Canonical documents
- Spec hubChange-control index and canonical source ordering.
docs/spec-hub.md - PRD v1Core promise, workflows, scope, and guardrails.
docs/product/BOOKER_PRD_V1.md - Usable-core acceptanceMinimum end-to-end bar for a usable release.
docs/product/BOOKER_V1_USABLE_CORE_ACCEPTANCE_SPEC.md - User stories and agentic supplementDetailed epics, acceptance checks, gap-check rules, end-to-end scenarios, and beta-driven agentic enhancements.
docs/product/BOOKER_V1_USER_STORIES_AND_AGENTIC_SUPPLEMENT.md - 2026 bleeding-edge interface systemCanonical 2026-forward design doctrine covering Bento 2.0 layout, Liquid Glass materiality, structural motion, agentic interaction, and anti-drift rules.
docs/design/BOOKER_INTERFACE_SYSTEM_V2.md - Architecture overviewSystem shape, runtime responsibilities, and AI boundaries.
docs/architecture/overview.md - Domain contractsEntities, bounded contexts, events, and permission semantics.
docs/contracts/domain-model.md - Milestone roadmapSequencing from foundations to venue portal and analytics.
docs/product/BOOKER_MVP_TO_MILESTONE_ROADMAP.md - Prompt packLead orchestration rules and subagent execution briefs.
docs/orchestrator/ORCHESTRATOR_PROMPT.md - PM review and ordered improvementsTwenty operating-intelligence improvements prioritized and executed in build order.
docs/product/BOOKER_PM_REVIEW_2026-03-19_OPERATING_INTELLIGENCE.md
Change control
- Update the PRD or acceptance spec before changing product behavior.
- Add or revise an ADR when technical shape or service boundaries change.
- Update domain contracts when schemas, events, or permissions move.
- Implement the smallest milestone-aligned slice with tests and notes.
Runtime readiness
- Environmentstaging · hybridready
- Required dependencies6 of 6 configured
- PostgreSQLPrimary system of record for orgs, booking state, audit, and outbox.Configured
- RedisRate limits, idempotency caches, and ephemeral workflow coordination.Configured
- ClerkProduction auth, MFA, invitations, and Google/Microsoft identity.Configured
- Public link signing secretSigns public booking asset links and prevents shared default secrets outside local development.Configured
- Public inbox delivery providerRoutes public booking inquiries into a shared inbox or CRM provider instead of preview-only delivery.Configured
- Public asset storage providerStores public booking packets behind a provider-backed asset layer instead of local preview files.Configured
Reverse check
Function coverage
Contract commands mapped
Every production command currently has a primary UI surface, supporting routes, and settings coverage.
Delivery mix
How commands reach product surfaces
Durable UI already owns 64% of the contract while the remaining bridge work stays visible in product and explicit in the spec.
Surface reach
Pages, setup, and config touchpoints
- Primary workspace routes15 pages directly own a command flow.
- Supporting routes16 adjacent surfaces carry handoff or review context.
- Settings and setup routes16 config-oriented routes anchor onboarding, setup, and policy posture.
- Heaviest setup route/artists · 17 mapped commands
Workflow coverage
Every operator workflow mapped back to contract commands
1 primary route · /artists
3 primary routes · /venues · /venue-portal · /event-needs
1 primary route · /campaigns
1 primary route · /inbox
1 primary route · /opportunities
2 primary routes · /shows · /lineup
1 primary route · /finance
1 primary route · /admin
1 primary route · /
1 primary route · /book/[artistId]
Runtime domains
Which infrastructure domains each UI function depends on
Currently owned directly by live product surfaces.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently bridged while infrastructure hardens.
Currently owned directly by live product surfaces.
Primary routes
Pages that directly own command behavior
Finance
Venues
Shows
Artists
Campaigns
Deals
Admin
Venues
Venues
Shows
Setup
Setup
Inbox
Assistant
Public booking
Settings and setup routes
Pages where configuration, setup, and policy controls live
Artists · Venues · Campaigns · Deals · Shows
Finance
Shows · Finance
Venues
Admin · Venues
Venues
Venues · Campaigns · Assistant
Deals · Venues
Setup · Artists · Assistant · Public booking
Artists · Deals · Shows
Shows
Venues
Setup
Setup · Public booking
Artists
Inbox
Workflow matrix
Command to surface mapping
Setup
0 live · 2 preview
- organization.inviteAccess setupPreview bridgeauth
/teamSettings: /team, /settingsInvite commands are now staged through Team access while production identity stays on the auth bridge. - organization.joinJoin-mode onboardingPreview bridgeauth
/sign-inSettings: /sign-in, /teamJoin mode is handled during onboarding, then echoed back into Team access for operator review.
Artists
1 live · 5 preview
- artist.upsertArtist create and durable editorLive UIcore-data
/artistsSettings: /artistsArtists page owns profile creation and persisted editing. - artist.asset.versionAsset versioningPreview bridgeassets
/artistsSettings: /artists, /assetsThe asset workflow is fully visible in UI while provider-backed storage remains on the asset bridge. - artist.calendar.connectCalendar connectionPreview bridgecalendar
/artistsSettings: /artists, /settingsArtist setup owns calendar provider posture. - artist.calendar.hold_sync.toggleHold-sync controlsPreview bridgecalendar
/artistsSettings: /artists, /settingsHold sync is mapped in the artist workspace so route and availability can stay coherent. - artist.availability.overrideAvailability overridesPreview bridgecalendar
/artistsSettings: /artists, /calendarAvailability overrides stay in artist setup with calendar context nearby. - artist.outreach_template.updateOutreach templatesPreview bridgeoutreach
/artistsSettings: /artistsArtist-owned messaging templates are edited in the roster workflow and used downstream by campaigns.
Venues
14 live · 5 preview
- venue.upsertVenue record editorLive UIcore-data
/venuesSettings: /venuesVenue workspace remains the primary write path for room records. - talent.profile.upsertTalent profile editorLive UIcore-data
/venuesSettings: /venues, /artistsTalent profile maintenance is mapped into the venue intelligence workflow. - venue.claim.requestVenue ownership claimLive UIcore-data
/venue-portalSettings: /venue-portalVenue users can initiate ownership through the portal and ops can review the request. - venue.intelligence.seed.requestIntelligence seed requestPreview bridgeworker
/venuesSettings: /venues, /adminThe UI can request graph expansion even while durable worker orchestration stays previewed. - venue.intelligence.refresh.requestIntelligence refresh requestPreview bridgeworker
/venuesSettings: /venues, /adminVenue refresh controls are exposed in the graph even while worker runtime is not fully live. - venue.availability.upsertVenue availability updatesLive UIcore-data
/venuesSettings: /venues, /venue-portalAvailability lives in venue intelligence and is mirrored into calendar/portal views. - venue.datasource.upsertVenue data sourcesPreview bridgeworker
/venuesSettings: /venues, /adminSource metadata is visible in UI while durable ingestion jobs remain bridged. - venue.contact.upsertVenue contact ingestLive UIcore-data
/venuesSettings: /venues, /adminOperators and users can add booking contacts directly into the shared venue graph. - venue.contact.validation.runContact validationPreview bridgeworker
/venuesSettings: /venues, /adminVenue and admin surfaces expose validation actions even while workflow runtime is previewed. - venue.correction.applyVenue correctionsLive UIcore-data
/venuesSettings: /venues, /adminCorrection flows are part of the venue intelligence and admin review model. - talent.booking.recordBooking evidence loggingLive UIcore-data
/venuesSettings: /venuesVenue intelligence captures booking evidence so routing and fit improve over time. - talent.fit.refreshTalent fit refreshPreview bridgeworker
/venuesSettings: /venues, /campaignsFit recalculation is mapped into venue/campaign planning while durable workers stay bridged. - venue.portal.updateVenue portal preferencesLive UIcore-data
/venue-portalSettings: /venue-portalVenue-side profile and preference edits live in the portal. - venue.portal.respondVenue response actionsLive UIcore-data
/venue-portalSettings: /venue-portalVenue reply actions are handled in the venue portal. - event.need.createEvent-need builderLive UIcore-data
/event-needsSettings: /event-needs, /venue-portalVenue-side programming starts with a durable event-need object before artist search and invites begin. - event.need.updateEvent-need editorLive UIcore-data
/event-needsSettings: /event-needs, /venue-portalEvent-need editing stays in the venue-side programming lane. - event.need.artist.shortlistArtist shortlistLive UIcore-data
/event-needsSettings: /event-needs, /venue-portalShortlist state links venue demand to specific artist candidates before outreach starts. - venue.artist_invite.sendVenue-side invite sendLive UIcore-data
/event-needsSettings: /event-needs, /venue-portalVenues can initiate artist-side outreach directly from the event-need shortlist. - event.need.deal.createVenue-originated deal creationLive UIcore-data
/event-needsSettings: /event-needs, /opportunitiesEvent needs can now create shared Booker opportunities without a separate custom workflow.
Campaigns
3 live · 3 preview
- campaign.createCampaign builderLive UIcore-data
/campaignsSettings: /campaignsCampaign creation is fully mapped into the routing workspace. - campaign.updateCampaign editorLive UIcore-data
/campaignsSettings: /campaignsCampaign editing and launch preparation live in the same workspace. - campaign.route.approveRoute approvalLive UIcore-data
/campaignsSettings: /campaignsRoute approval remains part of the campaign planning flow. - outreach.approveOutreach approvalPreview bridgeoutreach
/campaignsSettings: /campaigns, /artistsOutreach launch controls are present in campaigns even while send infrastructure stays previewed. - outreach.launchOutreach launchPreview bridgeoutreach
/campaignsSettings: /campaigns, /artistsCampaign launch is UI-complete and currently rides the outreach preview bridge. - outreach.personalizePersonalization refreshPreview bridgeoutreach
/campaignsSettings: /campaigns, /artistsPersonalization is exposed in the planner even while live sending is bridged.
Inbox
0 live · 1 preview
- inbox.reply.classifyReply classificationPreview bridgeoutreach
/inboxSettings: /inboxThe inbox owns reply labeling and handoff into opportunity state.
Deals
6 live · 0 preview
- opportunity.createOpportunity intakeLive UIcore-data
/opportunitiesSettings: /opportunitiesDeals can be created from research and inbox context directly in the opportunity desk. - opportunity.updateOpportunity editorLive UIcore-data
/opportunitiesSettings: /opportunitiesOpportunity editing and timeline progression stay in the deal workspace. - opportunity.policy.approvePolicy exception approvalLive UIcore-data
/opportunitiesSettings: /opportunities, /artistsPolicy exceptions remain visible inside the deal desk with artist guardrails attached. - opportunity.offer_review.approveOffer review approvalLive UIcore-data
/opportunitiesSettings: /opportunities, /artistsOffer review state is managed in the opportunity desk. - opportunity.alternate_dates.proposeAlternate datesLive UIcore-data
/opportunitiesSettings: /opportunities, /calendarAlternate-date proposal lives inside opportunity detail. - opportunity.alternate_date.selectAlternate date selectionLive UIcore-data
/opportunitiesSettings: /opportunities, /calendarSelected alternate dates stay on the same opportunity timeline.
Shows
10 live · 1 preview
- show.confirmShow lifecycleLive UIcore-data
/showsSettings: /showsConfirmed deals move into the show workspace through the lifecycle lane. - show.advance.toggleAdvance checklistPreview bridgecalendar
/showsSettings: /shows, /calendarAdvancing actions are operator-visible while calendar sync stays bridged. - show.operations.updateShow operations editorLive UIcore-data
/showsSettings: /showsShow operations edits are owned by the show workspace. - member.upsertMember directoryLive UIcore-data
/lineupSettings: /lineup, /artistsLineup management starts with durable member records tied to the act. - member.assignment.upsertArtist-member assignmentsLive UIcore-data
/lineupSettings: /lineup, /artistsAssignments define which members fulfill which act roles across lineup workflows. - member.availability.upsertMember availabilityLive UIcore-data
/lineupSettings: /lineup, /calendarMember-level availability is now durable and can block or unlock lineup readiness. - lineup.requirement.upsertLineup requirementsLive UIcore-data
/lineupSettings: /lineup, /artistsActs can now define durable role requirements instead of relying on implicit band knowledge. - lineup.confirmation.requestLineup confirmation requestsLive UIcore-data
/lineupSettings: /lineup, /showsConfirmation requests turn lineup readiness into a durable booking dependency. - lineup.confirmation.recordLineup confirmation responsesLive UIcore-data
/lineupSettings: /lineup, /showsMember responses now update lineup readiness directly inside Booker. - lineup.substitute.proposeSubstitute proposalsLive UIcore-data
/lineupSettings: /lineup, /artistsSubstitute candidates can now be proposed as part of lineup recovery instead of living in notes. - lineup.substitute.approveSubstitute approvalsLive UIcore-data
/lineupSettings: /lineup, /artistsApproved substitutes now live in a durable pool Booker can use during lineup conflicts.
Finance
4 live · 8 preview
- contract.sendContract lifecycle controlsPreview bridgeesign
/financeSettings: /financeFinance owns contract packet lifecycle while provider-backed e-sign remains previewed. - contract.viewedContract lifecycle controlsPreview bridgeesign
/financeSettings: /financeViewed state is part of the same finance contract lane. - contract.signContract lifecycle controlsPreview bridgeesign
/financeSettings: /financeSigned state is visible and actionable in finance. - contract.overdueContract lifecycle controlsPreview bridgeesign
/financeSettings: /financeOverdue packet escalation is tracked in finance. - deposit.requestDeposit lifecycle controlsPreview bridgepayments
/financeSettings: /financeDeposit collection is visible in finance while payments infrastructure remains bridged. - deposit.partialDeposit lifecycle controlsPreview bridgepayments
/financeSettings: /financePartial collection state lives in the same finance lane. - deposit.paidDeposit lifecycle controlsPreview bridgepayments
/financeSettings: /financePaid collection state is visible in finance and mirrored into show readiness. - deposit.overdueDeposit lifecycle controlsPreview bridgepayments
/financeSettings: /financeOverdue deposit posture stays in finance. - member.payout_rule.upsertMember payout rulesLive UIcore-data
/financeSettings: /finance, /lineupInternal payout rules are now durable so post-show batches do not depend on external spreadsheets. - member.payout.calculateMember payout calculationLive UIcore-data
/financeSettings: /finance, /lineupFinance can calculate internal payout batches directly from the show and settlement context. - member.payout.approveMember payout approvalLive UIcore-data
/financeSettings: /finance, /lineupInternal payout batches now have an explicit approval boundary before money is marked released. - member.payout.mark_sentMember payout sent stateLive UIcore-data
/financeSettings: /finance, /lineupSent-state tracking closes the internal payout loop in the same finance workspace.
Admin
5 live · 0 preview
- venue.claim.approveVenue claim approvalLive UIcore-data
/adminSettings: /adminInternal ops owns approval of venue claims. - venue.claim.rejectVenue claim rejectionLive UIcore-data
/adminSettings: /adminInternal ops can reject ownership requests from the admin queue. - venue.claim.revokeVenue claim revocationLive UIcore-data
/adminSettings: /adminAdmin retains revocation control for misuse and compliance events. - admin.issue.resolveAdmin issue resolutionLive UIcore-data
/adminSettings: /adminInternal ops can resolve review and compliance issues directly in admin. - admin.issue.reopenAdmin issue reopeningLive UIcore-data
/adminSettings: /adminAdmin can reopen reviews from the same queue surface.
Assistant
1 live · 0 preview
- assistant.action.logAssistant action loggingLive UIcore-data
/Settings: /settings, /campaignsAssistant actions now write to the same durable product model so chat and GUI can share approvals and handoff history.
Public booking
1 live · 0 preview
- public.inquiry.createPublic booking inquiryLive UIpublic
/book/[artistId]Settings: /sign-in, /settingsPublic inquiries originate on the booking page and route back into Booker.
Milestone map
Execution sequence
Milestone 0
Repo scaffold, shared contracts, design system, and app shell.
Milestone 1
Artist profiles, policies, assets, and campaign inputs.
Milestone 2
Venue and contact data with provenance, freshness, and confidence.
Milestone 3
Outreach sequences, shared inbox, and reply classification.
Milestone 4
Offers, holds, contracts, and negotiation guardrails.
Milestone 5
Deposits, calendar, advancing, and operational show readiness.
Milestone 6
Analytics, venue portal, compliance, and operational hardening.
PM review
Ordered improvement sequence
Execution order
- 1. Publish the second PM review and build orderOperating model · Keep the next 20 product moves visible in the spec hub so the next iteration builds on the real product state.A new PM review captures the operating-intelligence build sequence in-product.Implemented
- 2. Add a dashboard morning briefDashboard · Operators need the one-minute read on launch readiness, risk, blocked data, and cash posture.The home surface now opens with a concise operating pulse.Implemented
- 3. Add an owner agenda to the dashboardDashboard · Booker should show who owns the next move across deals, finance, tasks, and admin queues.The dashboard now surfaces the next owner-led agenda items.Implemented
- 4. Add a readiness ladder by operating domainDashboard · The team should see which domain is weakest, not just a single blended score.Booker now breaks readiness into artists, campaigns, deals, shows, finance, and data trust.Implemented
- 5. Add an artist booking strategy briefArtists · Roster records should explain how the team should position the act, not just store fields.Artists now show a strategic booking thesis per roster entry.Implemented
- 6. Add an artist asset-freshness splitArtists · Operators should understand which assets are fresh, stale, and versioned before sharing them.Artist records now summarize freshness, stale assets, and version history quality.Implemented
- 7. Add campaign spacing diagnosticsCampaigns · A route should explain whether it is compressed, balanced, or too loose before launch.Campaigns now score route pacing and spacing pressure.Implemented
- 8. Add campaign anchor and contactability scorecardsCampaigns · Shortlists need to show whether they contain real anchors, sendable contacts, and market gaps.Campaigns now summarize anchor rooms, sendable contacts, stale records, and uncovered markets.Implemented
- 9. Add venue relationship memoryVenues · Venue records should tell the team whether the room is warm, blocked, active, or still cold.Venue pages now show relationship memory from threads and deals.Implemented
- 10. Add inbox waiting-on-us versus waiting-on-them framingInbox · The team should know whether inbox pressure comes from delayed replies or delayed follow-through.Inbox now separates operator work from market wait states.Implemented
- 11. Add an urgent-response queue in the inboxInbox · The most time-sensitive threads should be visible in one place, not buried in filters.Inbox now surfaces a dedicated urgent-response shortlist.Implemented
- 12. Add a deal momentum timelineDeals · Deals should show exactly where momentum is strong, blocked, or incomplete.The deal desk now visualizes the commercial path from reply to show record.Implemented
- 13. Add a hold-expiry radarDeals · Holds are one of the easiest places to lose momentum if the team cannot see what expires first.The deal desk now highlights the next hold deadlines across the board.Implemented
- 14. Add contract packet readinessDeals · Before a contract goes out, Booker should explain whether the packet is commercially complete.Opportunity records now show packet blockers, readiness score, and clean items.Implemented
- 15. Add a show critical-path panelShows · Advancing should spotlight the few items that still block a clean show day.Show ops now summarize blockers and the next milestone for each date.Implemented
- 16. Add travel and rest-risk framingShows · Back-to-back dates and tight buffers should be visible before they create execution stress.Show ops now flag compressed routing and recovery pressure.Implemented
- 17. Add a finance aging ladderFinance · Cash posture should be organized into due-now, due-soon, and secure buckets.Finance now summarizes aging pressure before users scan individual rows.Implemented
- 18. Add a profitability leak detectorFinance · Booker should flag where margin, expenses, invoicing, or collection quality are leaking value.Finance now highlights the records with the worst margin and cash leakage.Implemented
- 19. Add analytics portfolio scorecardsAnalytics · Operators need a compact read on funnel, cash, and data trust quality across the portfolio.Analytics now shows portfolio scorecards instead of isolated metrics only.Implemented
- 20. Add admin owner-load and queue-balancing viewsAdmin · Internal ops should see where queue ownership is overloaded before trust work backs up.Admin now shows owner load, queue distribution, and balancing pressure.Implemented
Why this sequence
- Start with operator clarity.Readiness, blockers, and next-best actions create leverage across every later workflow.
- Tighten launch quality before adding more automation.Campaigns, outreach, and deals should feel controlled and high-signal before becoming more autonomous.
- Finish with venue and admin actionability.Internal ops and venue-side workflows matter most after the core booking loop already feels strong.