Busflow Docs

Internal documentation portal

Skip to content

Workspace Project Roadmap β€” What to Tackle Next ​

Current State of the Codebase ​

AreaStatus
App Shellβœ… Working β€” MainLayout, sidebar navigation, auth, theming
Design Systemβœ… Working β€” ui-core (Button, ThemeToggle), ui-domain, Tailwind tokens
GraphQL Layerβœ… Working β€” Hasura metadata, Apollo client, fragment masking, codegen
Fleet Listβœ… Working β€” First vertical slice (list vehicles from DB, card grid)
Database Schemaβœ… Comprehensive β€” 70+ tables across backoffice_, commerce_, operations_, communications_
Feature Specsβœ… Detailed β€” Dispatch Board, Pricing Screen, Screen Requirements, Product Requirements
Dashboard❌ Placeholder only ("Dashboard coming soon")
All other routes❌ Not implemented (Magic Upload, Trips, Bookings, Settings)

The order is driven by three principles:

  1. Data flows downhill β€” Build the entities that other features depend on first.
  2. Deliver value early β€” Prioritize the feature that replaces the most manual work soonest.
  3. Reduce risk β€” Tackle the hardest technical bets early so we learn fast.

Phase 1: Fleet & Staff CRUD (Foundation Layer) ​

Why first? Every other feature depends on vehicles, drivers, and crew data existing in the system. The Dispatch Board needs vehicles and crew. Magic Upload needs to assign a bus. Bookings need seat maps. Without this, nothing else works.

Scope:

  • [ ] Vehicle CRUD β€” Extend the existing Fleet List into a full detail view (create, edit, delete). Include seat map layout assignment.
  • [ ] Crew Member CRUD β€” Create staff management (drivers, dispatchers). Include qualifications, license data, and absence/leave tracking.
  • [ ] Operator Settings β€” Basic tenant profile and branding configuration.

Technical work:

  • Establish the reusable CRUD patterns (data tables, detail drawers/pages, form validation) that every subsequent feature will reuse.
  • Define the shared UI patterns: DataTable component, Form component, Detail/Edit pages.

Phase 2: Tour & Trip Management (The Catalog) ​

Why second? This is the core entity that everything revolves around β€” tours are the product. We need them in the system before we can dispatch, price, or sell them.

Scope:

  • [ ] Tour Template CRUD β€” Create/edit/archive tour templates (title, description, itinerary stops, duration, categories).
  • [ ] Trip Instantiation β€” Schedule concrete departures from a template (specific dates, linked vehicle + driver placeholder).
  • [ ] Itinerary Builder β€” Visual waypoint/stop editor (list-based, not map-based in V1).

Technical work:

  • Route waypoint management (operations_route_waypoints)
  • Tour departure scheduling (backoffice_tour_departures)

Phase 3: Magic Upload (The "Wow" Feature) ​

Why third, not first? Magic Upload outputs Tour Templates. We need the Tour Template CRUD from Phase 2 to exist first so the AI parser has a target to write into. Building Magic Upload first would mean building the template editor anyway.

Scope:

  • [ ] Dropzone UI β€” File upload with drag-and-drop.
  • [ ] AI Parser Integration β€” Send PDF to backend (NestJS API), receive structured extraction.
  • [ ] Wizard Review Flow β€” The opinionated step-by-step validation wizard (Red/Orange/Green color coding per the product spec).
  • [ ] Publish Flow β€” Approve extraction β†’ save as Tour Template β†’ optionally schedule a Trip.

Technical work:

  • Backend AI parsing pipeline (NestJS + LLM integration)
  • Import job tracking (backoffice_import_jobs, backoffice_import_error_rows)

Phase 4: Bookings & Passenger CRM ​

Why here? Once tours exist and are published, bookings flow in. We need the operator to see and manage them.

Scope:

  • [ ] Bookings List β€” Filterable data table of all bookings across trips.
  • [ ] Passenger Manifest β€” Per-trip passenger list with seat assignments and ticket status.
  • [ ] Rapid Manual Booking β€” Phone booking entry form (the "Herr MΓΌller" journey).
  • [ ] Passenger Profiles β€” 360Β° view with booking history and preferences.
  • [ ] Visual Seat Map (Dispatcher View) β€” Interactive seat map for manual assignments.

Technical work:

  • Commerce schema queries (commerce_bookings, commerce_passengers, commerce_seat_reservations)
  • Payment integration foundation (Mollie/Klarna)

IMPORTANT

Phases 1–4 are the MVP. An operator who can manage fleet, create tours, parse PDFs, and handle bookings has a usable product. Phases 5–8 transform it from "usable" to "indispensable."


Phase 5: Dispatch Board (The Operations Brain) ​

Why not earlier? The Dispatch Board is the most complex UI in the system (Gantt chart, drag-and-drop, real-time subscriptions, compliance engine). It needs vehicles, crew, tours, and bookings to all exist. Building it on top of real data is dramatically more effective than building it in isolation.

Scope:

  • [ ] Gantt Timeline View β€” Vehicles + crew on rows, service legs as blocks, 1w/2w/1m zoom.
  • [ ] Drag-and-Drop Assignment β€” Assign resources to legs with conflict detection.
  • [ ] EU Compliance Engine β€” Rule-based Lenk- und Ruhezeiten validation (Grey/Green/Orange/Red).
  • [ ] Live Updates β€” Hasura GraphQL subscriptions for real-time board changes.

Technical work:

  • operations_service_legs, operations_leg_assignments, operations_crew_duty_logs
  • Compliance rule engine (likely a shared package)

Phase 6: Pricing & Costing ​

Why here? The pricing screen already has a detailed spec. It builds on top of tour templates and costing sheets. Shipping it after the Dispatch Board means operators can do end-to-end: create tour β†’ dispatch β†’ price β†’ sell.

Scope:

  • [ ] Costing Sheet Editor β€” Input fixed/variable costs per tour.
  • [ ] Price Matrix Grid β€” Read-only base view + manual override mode.
  • [ ] Margin Inspector β€” Popover showing the full price derivation stack.
  • [ ] Break-Even Gauge β€” Dynamic PAX threshold visualization.
  • [ ] Β§ 25 UStG Tax Routing β€” Geospatial margin split for cross-border tours.

Phase 7: Communications Engine ​

Why late? Communications are downstream of everything β€” they trigger from bookings, dispatch actions, and disruptions. The configurable trigger system needs those source events to exist first.

Scope:

  • [ ] Omnichannel Inbox β€” Chat-meets-ticketing hybrid UI.
  • [ ] Trigger Configuration β€” The 5 baseline lifecycle triggers (BOOKING_CONFIRMED through BOOKING_COMPLETED).
  • [ ] Template Editor β€” WhatsApp/Email template management in Settings.
  • [ ] Disruption Broadcasts β€” INCIDENT_BROADCAST trigger tied to driver app incidents.

Phase 8: Executive Dashboard & Financials ​

Why last? The dashboard aggregates data from every other module. Building it last means every widget has real data to display. The DATEV export needs the full financial ledger to be populated by bookings and payments.

Scope:

  • [ ] Tier 1: Action Items β€” Actual alerts + proactive/creative AI alerts.
  • [ ] Tier 2: Operations Pulse β€” Active trips, newest bookings.
  • [ ] Tier 3: Opportunities β€” Load gaps, resource utilization.
  • [ ] Tier 4: Financial Snapshot β€” Historical + projected cost/profit.
  • [ ] DATEV Export β€” SKR03/SKR04 mapping, GoBD-compliant Storno handling.
  • [ ] Bank Import & Reconciliation β€” MT940/CAMT parsing, auto-matching.

The Critical Path ​

Phase 1          Phase 2           Phase 3          Phase 4
Fleet & Staff ──→ Tours & Trips ──→ Magic Upload ──→ Bookings & CRM
(Foundation)      (The Product)     (The "Wow")      (The Revenue)
                                                          β”‚
                  Phase 6           Phase 5               β”‚
                  Pricing ←──────── Dispatch Board β†β”€β”€β”€β”€β”€β”€β”˜
                                    (Operations Brain)
                       β”‚
          Phase 7      β”‚            Phase 8
          Comms  β†β”€β”€β”€β”€β”€β”˜            Executive Dashboard
          Engine                    & Financials

Internal documentation β€” Busflow