Control panel
Three plugins would normally mean three sidebar sections, three dashboards, and three settings screens. Showtime puts one Showtime item in the sidebar and hangs everything off it.
The navigation
The subnav is assembled from every mounted module, and each entry only appears if the current user holds the permission that module registers for it:
| Item | Goes to | Needs |
|---|---|---|
| Dashboard | /admin/showtime | either stub:viewBookings or headcount-manageSubscriptions |
| Events | /admin/owl/events | owl-manageEvents |
| Calendars | /admin/owl/calendars | owl-manageCalendars |
| Bookings | /admin/stub/bookings | stub:viewBookings |
| Calendar | /admin/stub/calendar | stub:viewBookings |
| Services | /admin/stub/services | stub:manageServices |
| Providers | /admin/stub/providers | stub:manageProviders |
| Members | /admin/headcount/subscriptions | headcount-manageSubscriptions |
| Member perks | /admin/showtime/perks | headcount-managePlans |
| Plans | /admin/headcount/plans | headcount-managePlans |
| Reports | /admin/headcount/reports | headcount-viewReports |
| Settings | /admin/settings/plugins/showtime | admin |
If a user has permission for none of it, the Showtime item is hidden entirely rather than shown as a link that 403s on click.
The modules keep their own control-panel routes —
/admin/stub/…,/admin/owl/…,/admin/headcount/…. Rewriting every URL in three plugins would be churn for no benefit, and keeping them means bundled and standalone behave identically. The Showtime nav is a front door onto them, not a replacement. Any bookmark or deep link you already have keeps working.
The dashboard
Showtime → Dashboard is the one screen only the bundle can show — bookings and memberships side by side:
- Bookings today, this week, and pending
- Today’s booking list
- Active members
- Monthly revenue, broken into booking income taken this month and recurring MRR
Revenue is deliberately shown as two components and a combined total. Booking income is money actually taken this month; MRR is a run-rate. They are different kinds of number, and the sum on its own would mislead — so you get both.
Every panel is permission-gated independently and every read is null-safe per module, so the dashboard degrades to whatever is actually mounted and in use rather than failing.
Settings
One composite screen at Settings → Plugins → Showtime: the shared Stripe/email/currency group, Stub’s own settings inlined beneath it, and links out to Headcount’s settings screens. See Configuration.
Stub’s settings are worth a note. Standalone, they were served by Craft’s plugin-settings page — which never fires for a mounted module, so bundling them would have made those settings unreachable. Showtime renders Stub’s own settings template inside its screen, namespaced so the inputs land exactly where Stub expects them. Headcount ships its own control-panel settings routes, which do work when mounted, so those are linked rather than inlined.
Widgets and element indexes
Everything else is unchanged. Headcount’s dashboard widgets are available on Craft’s own dashboard, and the Event, Booking, and Subscription element indexes behave like any Craft element index — custom columns, sorting, search, saved views, trash and restore.