Feature Spec: Cross-Cutting Surfaces β
Goal: Map the screen architecture for the cross-cutting workspace features that do not belong to a single Bounded Context: Dashboard, Settings, and the Global Command Palette.
1. Dashboard β
Path: /Horizon: [v0.1]
The landing page after login. Provides an at-a-glance operational overview and guides new operators through their first steps.
Layout β
Two zones stacked vertically:
Zone 1: Onboarding Checklist ([v0.1], dismissible) β
A "Getting Started" card shown to new tenants. Disappears once all steps are completed or the operator dismisses it.
Checklist items:
- [ ] Complete your company profile (β
/settings) - [ ] Create your first tour template (β
/tours) - [ ] Set up boarding points (β
/toursβ Boarding Points tab) - [ ] Preview your booking widget (β external URL)
- [ ] Receive your first booking (auto-completes)
Zone 2: Operational Overview β
- Upcoming Departures: Next 7 days of
TourDepartureswith fill rate, status. Clicking a row navigates to the Departure Detail. - Recent Bookings: Last 5 bookings received, with passenger name, tour, and payment status. Clicking navigates to Booking Detail.
- Action Items: Alerts requiring attention (e.g., "2 failed payments", "1 departure this week with 0 bookings").
[v0.2]: Key metrics cards (total revenue this month, booking conversion rate, upcoming capacity utilization).[v0.2]: Unread Inbox count (links to/inbox).
2. Settings β
Path: /settingsHorizon: [v0.1] (core) Β· [v0.2] (channels, templates, user management) Position: Pinned to the bottom of the sidebar, separated from operational nav items.
Structure: Sub-navigation (vertical tabs or sidebar within Settings) β
[v0.1] Settings Pages β
Company Profile (/settings/profile)
- Operator name, legal name, address, country.
- Legal form (
GMBH,UG,EINZELUNTERNEHMEN). - VAT ID (USt-IdNr.), Tax ID.
- Bank details (IBAN, BIC β for SEPA payouts and DATEV export).
Branding (/settings/branding)
- Logo upload (stored via Nhost Storage).
- Primary color, accent color.
- These values feed the booking widget's theming.
Tax Configuration (/settings/tax)
- Default VAT rate.
- Β§ 25 UStG margin taxation toggle (Reiseleistungen).
- Default deposit percentage.
Ancillary Catalog (/settings/catalog)
- Global management of bookable extras (insurance, room upgrades, excursions, meals).
- CRUD on
ancillary_catalog_itemsβ operator defines type, label, price, per-passenger/per-booking, max quantity. - Concierge Onboarding seeds 3 starter items.
- See ancillary-catalog.md Β§Workspace UX.
Pricing Categories (/settings/pricing)
- Operator-level demographic segments (e.g., Erwachsener, Kind, Kleinkind) with discount rules.
- Reusable across all templates β templates inherit categories and can override per-template.
- See ancillary-catalog.md Β§V0.1 Pricing Tab Clarification.
[v0.2] Settings Pages β
Users & Roles (/settings/users)
- List of workspace users (from
user_tenant_assignments). - Invite new users by email.
- Assign roles (Manager, Dispatcher).
- Deactivate users.
Communication Channels (/settings/channels)
- Provision WhatsApp, Email, SMS channels (
ChannelAccountentities). - Verify sender identity (phone number, email domain).
- Test message sending.
Notification Templates (/settings/templates)
- Configure automated message templates (
NotificationTemplateentities). - Template variables (e.g.,
,). - Trigger event mapping (booking confirmed, pre-trip reminder, etc.).
- Channel selection per template.
Payment Gateway (/settings/payments)
- Mollie Marketplace connection status.
- OAuth reconnect flow.
- Payout schedule configuration.
- Default deposit and final payment timing rules (
FinalPaymentConfig).
3. Global Command Palette (βK) β
Horizon: [v0.1] (search only) Β· [future] (AI commands) Trigger: βK (Mac) / Ctrl+K (Windows) from any page. Also accessible via a search icon in the header bar.
[v0.1] Architecture: Search Only β
Search across all Bounded Contexts:
| Entity | Context | Searchable Fields | Result Action |
|---|---|---|---|
| Tour Template | Backoffice | Name | Navigate to Template Detail |
| Tour Departure | Backoffice | Template name + date | Navigate to Departure Detail |
| Booking | Commerce | Reference number, lead passenger name | Navigate to Booking Detail |
| Passenger | Commerce | Name, email | Navigate to parent Booking Detail |
| Boarding Point | Backoffice | Name, address | Navigate to Boarding Point in library |
[v0.2] adds:
| Entity | Context | Searchable Fields | Result Action |
|---|---|---|---|
| Vehicle | Backoffice | License plate, internal name | Navigate to Vehicle Detail |
| Crew Member | Backoffice | Name | Navigate to Crew Detail |
| Conversation | Communications | Contact name, message content | Navigate to Inbox thread |
| Incident | Operations | Description, ServiceLeg | Navigate to Dispatch Board |
UI Pattern β
- Modal overlay with a text input at the top.
- Results grouped by entity type with icons.
- Keyboard navigation: arrow keys to select, Enter to navigate, Escape to close.
- Recent searches shown when the palette opens with an empty query.
[future] Architecture: AI Commands β
Natural language commands that trigger actions:
- "Create a new tour template called Nordsee 7-Tage"
- "Show me all departures next week with less than 50% fill rate"
- "Who is available to drive on June 15?"
These commands route through an AI interpretation layer that maps natural language to GraphQL queries or mutation intents, with a confirmation step before execution.