xtoura App β Feature Audit β
Source: Codebase analysis of
satzart-xtoura-appmonorepo. Tech stack: Vue 3 + Quasar v2 + Capacitor v7 (iOS/Android native), NestJS backend, Hasura GraphQL, PostgreSQL, Firebase, Redis/BullMQ. Architecture: Multi-tenant SaaS (tenant ID injected via Hasura row-level permissions). Each operator gets a white-labeled instance of the same app.
System Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Mobile App (Capacitor β iOS + Android) β
β Vue 3 + Quasar + Apollo Client + Pinia β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Admin Interface (Web) β
β Vue 3 + Quasar β operator configuration panel β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Hasura GraphQL Engine (API gateway) β
β Row-level permissions per tenant β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β NestJS Backend (business logic + async jobs) β
β Modules: AI, Kuschick, Turista, Messaging, β
β PDF, CleverReach, Auth β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β PostgreSQL + Redis (BullMQ) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββKey architectural trait: The backend integrates directly with Kuschick and Turista (legacy ERP systems) via dedicated NestJS modules. The app pulls booking data, invoices, and vouchers from these systems and presents them to passengers. This is a "glass pane over legacy ERP" architecture β xtoura does not own the booking or operational data.
Feature Surface β Mobile App β
1. Trip Catalog (Browse & Discover) β
| Feature | Description | Maturity |
|---|---|---|
| Trip Listing | Filterable list of upcoming tours with image carousels, category tags (Land, Region, Art). | β Shipped |
| Trip Detail View | Rich content page: title, subtitle, intro, itinerary, services included, hotel info, route maps, dynamic content fields. Configurable section ordering and expandable/collapsible sections. | β Shipped |
| Custom CSS per operator | Operators inject custom CSS via the admin configurator. Styles are scoped to .trip-detail-view at runtime. | β Shipped |
| Price Table & Date Selector | Displays price tiers (demographic pricing), optional date picker for multi-date trips, ancillary options (Zusatzleistungen). | β Shipped |
| Booking Redirect | "Zur Buchung" button opens an external booking URL (operator's website or Kuschick web portal) in an in-app browser. No native booking flow. | β Shipped |
| Trip Sharing | Native share sheet (Capacitor Share API) for sharing trip links. | β Shipped |
Key insight: The app does not handle bookings natively. It redirects to external booking URLs. This is a fundamental architectural limitation.
2. My Trips (Post-Booking Passenger Portal) β
| Feature | Description | Maturity |
|---|---|---|
| Booked Trip List | Shows trips the logged-in passenger has booked. | β Shipped |
| Trip Detail (booked) | Displays dates, images, start address with embedded map (StreetMap component + Google Maps link). | β Shipped |
| Kuschick Data Integration | Pulls detailed booking data from Kuschick ERP: transport (BefΓΆrderung), accommodation (Unterbringung), ancillaries (Zusatzleistungen), pickup stops (Zustiege), seat plans (SitzplΓ€ne), insurance (Versicherung). | β Shipped |
| Turista Data Integration | Similar integration for Turista ERP systems. | β Shipped |
| Document Downloads | Download booking confirmation PDF (Vorgangsdruck), voucher PDF (Voucherdruck), and per-user uploaded files. Offline-capable with local filesystem caching (Capacitor Filesystem). | β Shipped |
| Trip Files | General files attached to trips (operator-uploaded) + user-specific files. | β Shipped |
| Notifications | Per-trip notification list displayed inline in the trip detail. | β Shipped |
| Post-Trip Survey Banner | Banner prompting passengers to complete a survey after their trip (links to survey page). | β Shipped |
3. Digital Catalog Viewer β
| Feature | Description | Maturity |
|---|---|---|
| PDF Catalog | Fetches PDF travel catalogs from operator-configured URLs, displays thumbnails, opens full PDFs. | β Shipped |
| Interactive Image Catalog | Page-by-page image viewer with interactive hotspots (x/y coordinate-based). Hotspots can link to specific trips or external URLs. Supports preloading and presigned URL caching. | β Shipped |
Key insight: This is the digitized version of the physical travel catalog. The operator uploads catalog pages as images, places interactive hotspots on them, and passengers tap to navigate to trips. This is a unique feature that Busflow does not plan to offer.
4. Travel Checklist β
| Feature | Description | Maturity |
|---|---|---|
| Packing Checklist | Local-only (localStorage) checklist with default items (Personalausweis, Reiseunterlagen, etc.). Add/delete/reset items. | β Shipped |
Key insight: A simple convenience feature. No backend integration. Purely client-side.
5. Office Finder β
| Feature | Description | Maturity |
|---|---|---|
| Office Directory | Lists operator branch offices with contact details: phone, email, address, opening hours, contact person with avatar. | β Shipped |
| Direct Actions | Tap-to-call, tap-to-email, open address in Google Maps. | β Shipped |
6. Messaging & Notifications β
| Feature | Description | Maturity |
|---|---|---|
| Push Notifications | Firebase-based push notifications to passenger devices. | β Shipped |
| In-App Notification Center | Messaging center for trip-specific notifications (departure info, updates). | β Shipped |
| Per-Trip Notifications | Notification cards displayed within the My Trip detail view. | β Shipped |
7. Surveys β
| Feature | Description | Maturity |
|---|---|---|
| Post-Trip Survey | Passengers complete surveys after trips. Results tracked per user to avoid duplicates. | β Shipped |
Feature Surface β Admin Interface β
| Module | Description |
|---|---|
| App Configurator | JSON-based configuration editor with live iPhone mockup preview. Configures: booking URLs, phone numbers, custom CSS, dynamic content fields, expandable sections, booking button labels. |
| Trip Management | CRUD for trip content (title, subtitle, itinerary, services, hotel info, prices, dates, extras). |
| Catalogue Management | Upload and organize catalog images. Place interactive hotspots on catalog pages linking to trips. |
| File Management | Upload files to trips (general or user-specific). |
| Messaging | Send push notifications to passengers. |
| Newsletter | CleverReach integration for email marketing campaigns. |
| Survey Management | Create surveys, view analytics, manage responses. |
| User Management | Manage app users and roles. |
| Module System | Enable/disable feature modules per operator (modular tile-based UI). |
Backend Integrations β
| Module | Purpose |
|---|---|
| Kuschick | Fetch booking details, invoices (Rechnung), booking confirmations (Vorgangsdruck), vouchers from Kuschick ERP. Agentur-code-based authentication. |
| Turista | Fetch booking data from Turista ERP systems. |
| CleverReach | Email marketing / newsletter integration. |
| AI (OpenAI + Gemini) | AI features β content generation and translation for trip descriptions and marketing copy. |
| PDF (Stirling PDF) | PDF generation for documents. |
| Messaging (Twilio) | SMS/Email messaging to passengers. |
Feature Overlap with Busflow β Critical Assessment β
IMPORTANT
The overlap assessments below are critically honest, not diplomatically convenient. Each row includes a "reality check" that flags where the initial analysis was oversimplified, premature, or biased.
High-Overlap Features β
| xtoura Feature | Busflow Equivalent | Overlap | Reality Check |
|---|---|---|---|
| Trip Catalog (browse) | Booking Widget + Tour listings | Medium (not High) | The initial "High" rating conflates two different things. xtoura's catalog is a content-rich browsing experience β image carousels, itineraries, hotel descriptions, map imagery, custom CSS styling per operator. Busflow's booking widget is a transactional checkout flow β it assumes the discovery and browsing happened elsewhere (partner website, physical catalog). Busflow does not plan to build a full catalog browsing experience; it embeds a conversion widget. These serve different stages of the funnel. The overlap exists only if Busflow builds a standalone Passenger Portal with trip browsing β which is [v0.2] at best. |
| My Trips (booked) | Branded Passenger Portal | High (confirmed) | This assessment stands. Both products show booked trip details to passengers. However: Busflow's portal does not exist yet. It is planned for [v0.2] with a "start with small widgets" strategy. xtoura's My Trips is shipped and functional today. The "Busflow portal is deeper" claim is aspirational, not factual. |
| Push Notifications | Trigger-Based Automation | LowβMedium (not High) | Overrated in the initial analysis. xtoura's notifications are simple Firebase push blasts β manual sends from the admin panel, no event logic, no automation. Busflow's Trigger-Based Automation is an event-driven pipeline with T-24h reminders, post-trip reviews, crisis broadcasts, and a Communication Decision Engine with Supersession Rules. These are architecturally different systems at completely different maturity levels. The overlap is superficial: "both send push notifications." The depth gap is enormous. But β Busflow's system is also entirely unbuilt. |
Superseded Features (With Caveats) β
| xtoura Feature | Busflow Equivalent | Overlap | Reality Check |
|---|---|---|---|
| Booking redirect | Native checkout + payment | Superseded (in theory) | The "Superseded" label is premature. xtoura's booking redirect works today with existing operator booking pages (Kuschick web portal, partner websites). Busflow's native checkout is [v0.1] roadmap. Until Busflow ships and an operator migrates, xtoura's redirect remains the only working booking funnel for existing operators. The label should be "Superseded once Busflow ships," not "Superseded." |
| PDF/Voucher download | Busflow-generated PDFs + Wallet Passes | Display layer only | Reclassified after founder input. xtoura does not generate PDFs β it only displays documents produced by Kuschick/Turista. Busflow will also generate PDF itineraries, confirmations, and vouchers. xtoura could simply display Busflow's PDFs instead of Kuschick's. This makes the xtoura feature a data-source-agnostic display mechanism, not a competing product. The "Superseded by wallet passes" framing was wrong β PDFs remain necessary for older DACH demographics. Busflow will produce both PDFs and wallet passes; xtoura can surface either. |
| Kuschick/Turista integration | N/A (Busflow is the system of record) | Replaced (eventually) | Correct in principle, but the transition timeline matters enormously. Not every operator will migrate to Busflow immediately. Operators still running on Kuschick/Turista need the xtoura-app as their only passenger-facing digital surface. Busflow "replacing" ERPs is a multi-year migration, not a switch. During the migration window, xtoura's ERP integration is more valuable, not less. |
Non-Overlapping Features β
| xtoura Feature | Busflow Equivalent | Overlap | Reality Check |
|---|---|---|---|
| Interactive Catalog | No equivalent | None | Correctly identified as unique. The interactive catalog with x/y hotspots linking to trip details/booking pages is a digitized version of the physical travel catalog β a marketing-layer feature that Busflow's non-goal #5 explicitly excludes. |
| Travel Checklist | No equivalent | None | Correctly identified as trivial. localStorage-only, no backend. Not worth discussion. |
| Office Finder | No equivalent | None | Correct assessment, but worth noting: Busflow's Branded Passenger Portal could eventually include a "contact your operator" section. This would not be an "Office Finder" but could partially overlap. Low priority. |
| Surveys | No equivalent | None (but adjacent) | The initial assessment ("could integrate via n8n") is hand-wavey. More precisely: Busflow's event system could emit TripCompleted or BookingFulfilled domain events that trigger external survey tools (Typeform, Google Forms) via n8n. But this is a generic webhook integration, not a survey product. xtoura's surveys are first-class: create surveys in the admin, collect results, view analytics. Busflow will never build this. |
| Newsletter (CleverReach) | No equivalent | None (but adjacent) | The initial assessment ("Busflow's Customer Intelligence data could feed into CleverReach segments") is correct but misleading β Customer Intelligence is [future β Phase 3], making this a 2+ year aspiration, not a near-term integration. |
| Custom CSS per operator | White-label parameters (today); Custom CSS capability planned | Shared capability | Reclassified after founder input. Custom CSS is not a "feature" but a platform capability β the ability for operators or their agencies to deeply customize the visual presentation. Busflow sees high potential in this capability and will likely offer it too. xtoura's current implementation (raw CSS injection at runtime, scoped to .trip-detail-view) is a working proof of concept. Busflow can learn from both the value (operators love deep customization) and the pitfalls (operators break their own apps with bad CSS). This is not xtoura-exclusive β it is a shared direction. |
Missing from the Original Analysis β
The original table omitted two important overlap dimensions:
1. Non-Goal #1 β Consumer Travel Planning App
Busflow's explicit non-goal states: "Consumer travel planning app β Lambus territory. Our B2C surface serves the operator's passengers, not independent travelers."
xtoura-app is dangerously close to this non-goal. It functions as a consumer-facing travel catalog and trip planner (browse trips, view itineraries, plan with checklists, share with friends). This is exactly the territory Busflow explicitly avoids. The overlap here is not "Busflow competes with xtoura" β it is "xtoura occupies a space Busflow deliberately refuses to enter." This is strategically important because it means xtoura and Busflow are complementary by design, not just by accident.
2. Multi-Tenant White-Labeling
Both xtoura and Busflow use multi-tenant architectures with per-operator configuration. xtoura uses Hasura row-level permissions with x-hasura-tenant-id; Busflow uses its own multi-tenant bounded contexts. Both support white-label branding (logo, colors, app name). This is structural overlap that matters for the integration story β both systems already think in "per-operator" terms, making API integration between them conceptually straightforward.
Features xtoura Has That Busflow Will NOT Offer β
| Feature | Why Busflow Won't Build It | Integration Potential | Reality Check |
|---|---|---|---|
| Interactive Catalog Viewer | Non-goal #5 excludes content marketing tools. Busflow is operations + commerce. | High β xtoura catalog hotspots already have an external URL field that can point to Busflow booking widget URLs. Zero code change needed. | This is the easiest, highest-value integration point. |
| Travel Checklist | No operational value. Too trivial. | None | Not worth discussing in partner conversations. |
| Office Finder | Operators manage their own websites; Busflow does not build website content. | Low | Could overlap with a future "contact operator" section in the Busflow Passenger Portal, but not worth building proactively. |
| Post-Trip Surveys | Not in roadmap. Busflow builds transactional workflows, not marketing research tools. | Medium β Busflow could emit TripCompleted domain events that trigger xtoura survey links via webhook. | Realistic only after Busflow ships the event system ([v0.2]). Until then, xtoura surveys are fully standalone. |
| Newsletter / CleverReach | Busflow builds transactional comms (Pillar 4), not marketing campaigns. | Medium β Customer Intelligence data could feed CleverReach segments. | Customer Intelligence is Phase 3 ([future]). This integration is 2+ years away. Be honest about this with the partner. |
| Legacy ERP Integration (Kuschick/Turista) | Busflow replaces ERPs. A new passenger-facing integration path may be built separately from xtoura. | Not xtoura-exclusive | Reclassified after founder input. The founder does not plan to use the xtoura-app as the vehicle for legacy ERP passenger data. A new integration will either be rewritten or handled through a different mechanism (e.g., Busflow's own passenger portal consuming ERP data directly, or a standalone migration bridge). xtoura's current Kuschick/Turista modules are existing code, not a strategic dependency. |