Demo Loop β Exact Flow & Complete Feature Map β
One-Liner: "Watch a hotel PDF become a bookable tour, a passenger buy a ticket from their couch, and a driver board them in an Alpine valley with no WiFi β all without leaving one platform."
Format: ~6 min interactive prototype, real backend, pre-seeded data. Audience: Bus tour operator (GF / Disponent). First contact. Mood: SouverΓ€n β calm, confident, zero feature dumping.
The Loop: 7 Scenes β
SCENE 0 β THE HOOK (30s)
Branded intro. "30 Stunden Abtippen β 3 Sekunden."
SCENE 1 β MAGIC UPLOAD (90s) [.theme-dispatcher]
PDF drag β AI extracts β split-screen review β approve
β assign vehicle + driver β publish β the system generates a booking link π
SCENE 2 β DISPATCH BOARD (60s) [.theme-dispatcher]
Gantt overview β drag Klaus onto tour β β
Compliance OK
β drag Thomas β π΄ "Im Urlaub" β can't drop
β capacity badge fills: 0/49 β 47/49
SCENE 3 β BOOKING WIDGET + SEAT MAP (90s) [.theme-passenger]
β¨ Theme shift β¨ β warm, boutique passenger view
Tour landing β visual seat map β pick seat 14
β toggle Weinprobe upsell β Apple Pay β Wallet pass
SCENE 4 β DRIVER HUB (60s) [.theme-driver]
β¨ Theme shift β¨ β dark, rugged, oversized targets
Daily assignment β passenger manifest β QR scan
β green checkmark β "Offline-Modus aktiv" badge
SCENE 5 β CRISIS FLOW (45s) [.theme-dispatcher]
ServiceLeg flashes red β "Stau A13, ETA +45 min"
β AI-drafted WhatsApp β one-click send
β Wallet pass departure time updates live
SCENE 6 β THE BRIDGE (30s)
"Den Umstieg machen wir fΓΌr Sie."
Concierge onboarding visual β "Pilotprojekt starten β"Key Demo Beats β
| Beat | What Makes It Magic | Mood Phase |
|---|---|---|
| PDF β Tour in 3s | "The system understands my workflow" | Recognition |
| Compliance β /π΄ badges | "It catches mistakes silently" | Trust |
.theme-passenger shift | "This is a platform, not an app" | Flow |
| Seat map + Apple Pay | "My customers would book at midnight" | Delight |
| Offline QR scan | "My drivers would actually use this" | Trust |
| AI crisis broadcast | "It handles crises before I call" | Trust |
| Break-even badge (47/49) | "I see my business in real-time" | Confidence |
Feature Map β What Must Be Built β
Legend β
| Icon | Meaning |
|---|---|
| β | Spec exists, ready to code |
| π‘ | Schema exists, needs L3 spec (API, state machine, edge states) |
| π΄ | Needs new spec from scratch |
| π§ | Infrastructure / glue |
| π | Frontend build |
Scene 0 β The Hook β
No features needed β branded slide or intro animation.
Scene 1 β Magic Upload (Backoffice) β
| Feature | App | Status | Notes |
|---|---|---|---|
| Dropzone (drag & drop) | workspace | π΄ | |
| PDF processing animation | workspace | π΄ | 3s loading, subtle |
| Split-screen review (PDF + form) | workspace | π΄ | Left: original PDF. Right: extracted data |
| TourTemplate form (title, dates, stops, pricing) | workspace | π΄ π | |
| Vehicle selector (with seat map preview) | workspace | π΄ π | |
| Crew selector dropdown | workspace | π΄ π | |
| Publish action + booking link display | workspace | π΄ π | |
| Confetti micro-animation | ui-core | π΄ | |
| Mock AI extraction (n8n + LLM pipeline) | api / n8n | π΄ | Pre-seeded output for demo PDF. Real pipeline later. |
Supporting (indirect):
| Feature | Status | Why Needed |
|---|---|---|
| App Shell / navigation | π‘ | MainLayout.vue skeleton exists, needs build-out |
Theme .theme-dispatcher wiring | π‘ | Tokens defined, needs CSS scope activation |
| Tenant provisioning + Nhost Auth | β | ADR-003, ADR-005 |
| TourDeparture + BoardingPoint CRUD | β | Fully spec'd |
| Vehicle + CrewMember CRUD | β | Fully spec'd |
| Supplier CRUD (for Β§ 25 demo) | β | Needed for Fremdleistung proof |
| Hasura Backoffice schema + permissions | β | |
| Demo seed data (PDF, tour, vehicles, crew) | π΄ | See Seed Scenario |
Scene 2 β Dispatch Board (Backoffice) β
| Feature | App | Status | Notes |
|---|---|---|---|
| Gantt timeline (resource rows, blocks, zoom) | workspace | π΄ π | 3 vehicles, 4 crew, ~5 blocks |
| Resource panel (vehicles + crew, grouped) | workspace | π΄ π | |
| Drag-and-drop assignment | workspace | π΄ π | |
| Compliance Copilot badge (β green / π΄ red) | workspace | π΄ π | "Lenkzeit OK Β· Modul 95 gΓΌltig" |
| Conflict modal (red block + reason) | workspace | π΄ π | "Thomas is on vacation" |
| Capacity badge on blocks | workspace | π΄ π | 0/49 β 47/49 |
Supporting:
| Feature | Status | Why Needed |
|---|---|---|
| Dispatch Availability Engine | β | dispatch-availability-engine.md |
| Crew Qualification Protocol | β | crew-qualification-protocol.md |
| CrewAbsence data + rendering | π΄ | Leave records for Thomas conflict demo |
| Qualification data rendering | π΄ | Module 95, visa check display |
Scene 3 β Booking Widget + Seat Map (Commerce) β
| Feature | App | Status | Notes |
|---|---|---|---|
| Tour landing page (hero, dates, pricing) | booking-widget | π΄ π | Consumer-grade design |
| Interactive seat map (select, highlight, hold) | booking-widget | π΄ π | From Vehicle.seat_map_layout JSONB |
| Boarding point selector (Zustiegsstelle) | booking-widget | π΄ π | |
| Upsell toggle cards (Weinprobe) | booking-widget | π΄ π | |
| Checkout flow (passenger form, payment) | booking-widget | π΄ π | |
| Mollie payment (Apple Pay / Klarna) | booking-widget + api | π΄ | Mollie test mode, real integration |
| Confirmation screen | booking-widget | π΄ π | |
| Wallet Pass preview (Apple Wallet card) | booking-widget | π΄ π | |
| WhatsApp booking confirmation | n8n | π΄ | n8n workflow β WhatsApp Business API |
Supporting:
| Feature | Status | Why Needed |
|---|---|---|
Theme .theme-passenger wiring | π‘ | Warm palette, serif headings. Transition IS a demo beat. |
| Booking State Machine (XState) | π‘ | DRAFT β PENDING_PAYMENT β DEPOSIT_PAID β FULLY_PAID. Schema exists, needs L3 spec. |
| CheckoutSession lifecycle | π‘ | Creation, TTL, conversion to Booking. Schema exists, needs L3. |
| SeatReservation hold + expiry | π‘ | HELD β CONFIRMED β RELEASED. Schema + unique index exist, needs L3. |
TripPublished event + consumer | π΄ | Creates TourOffering + PickupOptions from Backoffice event |
PriceMatrixPublished consumer | β | Upserts tour_offering_prices. Contract spec'd. |
| Mollie OAuth + sub-account provisioning | π΄ | Per-tenant marketplace splits |
| Commerce Hasura schema + permissions | π‘ | Tables defined, Hasura metadata not configured |
| Responsive mobile layout | π΄ | Booking widget must work on phone |
| Ticket + QR hash generation | π‘ | The system requires a logic spec |
Scene 4 β Driver Hub (Operations) β
| Feature | App | Status | Notes |
|---|---|---|---|
| Daily assignment view | driver (PWA) | π΄ π | Tour, time, bus, route |
| Passenger manifest list | driver | π΄ π | Names, seats, boarding points |
| QR scanner overlay | driver | π΄ π | Camera-based, validates qr_hash |
| Check-in success animation | driver | π΄ π | Green checkmark, "Eingecheckt β" |
| Offline mode indicator | driver | π΄ π | "Offline-Modus aktiv" badge |
Supporting:
| Feature | Status | Why Needed |
|---|---|---|
Theme .theme-driver wiring | π‘ | Dark, oversized touch targets. Transition IS a demo beat. |
| Driver PWA shell + Nhost auth | π΄ | New app, crew-member scoped |
| Bottom-docked navigation | π΄ | Mobile PWA pattern |
| Manifest read model | π΄ | Denormalized join: Departure + Passengers + Seats + BoardingPoints |
| Offline sync protocol (IndexedDB) | π‘ | Architecture described, no implementation spec |
| BoardingEvent write + offline queue | π΄ | Idempotent by qr_hash, syncs when online |
| ServiceLeg auto-creation from TourDeparture | π΄ | Operations needs legs when the system publishes the departure |
BookingConfirmed β manifest update | π΄ | Passenger data flows to Operations read model |
Scene 5 β Crisis Flow (Cross-Domain) β
| Feature | App | Status | Notes |
|---|---|---|---|
| Incident flash overlay on Gantt blocks | workspace | π΄ π | Red pulse on affected ServiceLeg |
| Omnichannel Inbox sidebar | workspace | π΄ π | |
| AI-drafted WhatsApp message preview | workspace | π΄ π | Pre-drafted template |
| "Senden" action + confirmation | workspace | π΄ π | |
| Wallet Pass live update animation | standalone | π΄ π | Departure time changes in pass |
Supporting:
| Feature | Status | Why Needed |
|---|---|---|
| Incident data model | π‘ | Schema exists in Operations, needs event trigger |
| NotificationTemplate renderer | π΄ | Variable interpolation for WhatsApp template |
NotificationRequested event | π΄ | Generic dispatch to Communications |
| Wallet Pass dynamic update (APNs) | π΄ | Apple Push Notification for pass updates |
Scene 6 β The Bridge β
| Feature | App | Status |
|---|---|---|
| Concierge onboarding timeline visual | static | π΄ |
| CTA button | static | π΄ |
Spec Work Required β
New L3 Specs to Write β
| # | Spec | Domain | Priority |
|---|---|---|---|
| S1 | Booking State Machine | Commerce | π₯ |
| S2 | Checkout Flow (Session β Mollie β Confirmed) | Commerce | π₯ |
| S3 | TourOffering Sync Protocol | Commerce β Backoffice | π₯ |
| S4 | Seat Reservation Protocol | Commerce | π₯ |
| S5 | Driver Manifest Read Model | Operations | HIGH |
| S6 | Boarding Event Protocol (offline + sync) | Operations | HIGH |
| S7 | Wallet Pass Generation | Communications/Commerce | MED |
| S8 | Notification Dispatch | Communications | MED |
| S9 | Incident β Crisis Broadcast Flow | Cross-Domain | MED |
New Event Contracts to Write β
| Event | Producer | Consumer(s) |
|---|---|---|
TripPublished | Backoffice | Commerce |
BoardingEvent | Operations | Backoffice |
NotificationRequested | Commerce/Operations | Communications (n8n) |
WalletPassIssued | Communications | Commerce |
IncidentCreated | Operations | Backoffice (dispatch board), Communications |
Ready to Implement (Spec'd) β
| Spec | Document |
|---|---|
| Kalkulations-Engine | kalkulations-engine.md |
| PriceMatrix Event Contracts | event-contracts-pricing.md |
| Dispatch Availability Engine | dispatch-availability-engine.md |
| BookingConfirmed β CostingSheet Lock | ADR-009 |
| Vehicle Swap Protocol | vehicle-swap-protocol.md |
| Crew Qualification Protocol | crew-qualification-protocol.md |
| Tenant Provisioning | ADR-003 |
Build-or-Fake Matrix β
| Feature | Real | Fake | Skip | Rationale |
|---|---|---|---|---|
| Kalkulations-Engine | β | Core differentiator, tax wrapping must be real | ||
| PriceMatrix β Commerce sync | β | Real event flow = "no duct-tape" proof | ||
| Booking Widget + checkout | β | Must feel premium and real | ||
| Mollie payment | β | Test mode, real capture flow | ||
| BookingConfirmed cascade | β | Event β lock + manifest = architectural proof | ||
| Driver PWA + offline QR | β | Core differentiator, must work offline | ||
| Break-even progress bar | β | Small build, high emotional impact | ||
| Dispatch Board + compliance | β | Trust builder, drag-drop interaction | ||
| Magic Upload (PDF β Tour) | β | Pre-seeded n8n output for demo PDF. Real AI pipeline later. | ||
| Wallet Pass generation | β | n8n workflow generating static .pkpass | ||
| WhatsApp confirmation | β | n8n β WhatsApp Business sandbox | ||
| Crisis broadcast | β | Pre-drafted template, mock incident trigger | ||
| Wallet Pass live update | β | Animated mock, real APNs is Phase 2 | ||
| Full Gantt (zoom, scroll, 50+ rows) | β | Simplified SVG/CSS for 3 vehicles is enough | ||
| Storno / refunds | β | Explicitly deferred | ||
| Multi-tenancy demo | β | Architectural req, not a demo beat |
Seed Scenario β
One coherent story: "Tyrol AlpenglΓΌhen 7 Tage"
| Entity | Data |
|---|---|
| Operator | "Reisedienst Alpenberg GmbH" |
| 2-page hotel partner itinerary (German, dates, stops, hotel) | |
| TourTemplate | "Tyrol AlpenglΓΌhen 7 Tage" β 4 stops, 1 hotel (Fremdleistung), Weinprobe upsell |
| TourDeparture | 15. Juni 2026, status: PUBLISHED |
| Vehicle | "Bus 01" β 49-seater, seat_map_layout JSONB, ACTIVE |
| Klaus | DRIVER, Module 95 valid, no visa restrictions, ACTIVE |
| Thomas | DRIVER, on vacation 10.β17.04. (conflict demo) |
| Sarah | DRIVER, ACTIVE, assigned to Bavaria day trip |
| 47 Passengers | Pre-seeded bookings with names, seats, boarding points |
| Incident | "Stau A13" β delay +45min, affecting Leg 2 |
| WhatsApp template | Pre-drafted delay notification for boarding point passengers |
Theme Transitions (Demo Beat) β
The visual shift between themes is itself a differentiator β proof this is a platform, not an app.
| Transition | From β To | Demo Moment |
|---|---|---|
| Scene 2 β 3 | .theme-dispatcher β .theme-passenger | Neo-corporate β warm boutique. "This is what your customers see." |
| Scene 3 β 4 | .theme-passenger β .theme-driver | Boutique β dark, rugged, oversized. "This is what your drivers see." |
| Scene 4 β 5 | .theme-driver β .theme-dispatcher | Back to control center. "And you see everything." |