Skip to main content

Frontend Journeys — Index

Scope: This folder contains one operational, end-to-end specification per core user journey (J-NN) for Ghasi Melmastoon. Every journey conforms to the same 14-section template (see below) so engineers, designers, QA, and AI coding tools can implement, test, and audit each flow without re-deriving cross-service behaviour.

Predecessor: This set replaces the monolithic ../../journeys/01-core-user-journeys.md. The original file has been converted to a redirect stub for inbound link compatibility for one release.


1. Index of journeys

#TitlePersonaPrimary surfaceComplexityCriticalityFile
J-01Discover & Compare on Meta LayerGuestConsumer Web/MobileMP0guest/J-01-discover-and-compare-on-meta-layer.md
J-02Booking Handoff to Tenant SiteGuestConsumer -> Tenant BookingSP0guest/J-02-booking-handoff-to-tenant-site.md
J-03Multi-Step Booking with Cash on ArrivalGuestTenant Booking Web/MobileLP0guest/J-03-multi-step-booking-with-cash-on-arrival.md
J-04Booking with Card Payment (3DS + FX snapshot)GuestTenant Booking Web/MobileLP0guest/J-04-booking-with-card-payment.md
J-05Arrive at Hotel & Check-InGuest + Front DeskElectron DesktopLP0guest/J-05-arrive-at-hotel-and-check-in.md
J-06Stay, Modify, Check-OutGuest + Front DeskElectron DesktopLP0guest/J-06-stay-modify-check-out.md
J-07Walk-In Booking with Cash Deposit (Offline)Front DeskElectron Desktop (offline)LP0front-desk/J-07-walk-in-booking-with-cash-deposit-offline.md
J-08Online Check-In Queue CoordinationFront DeskElectron DesktopMP1front-desk/J-08-online-check-in-queue-coordination.md
J-09Mid-Stay Issue: Lock Battery DiesFront Desk + MaintenanceElectron DesktopMP1front-desk/J-09-mid-stay-issue-lock-battery-dies.md
J-10Group Booking with Multiple Rooms & Single FolioFront DeskElectron DesktopLP1front-desk/J-10-group-booking-multiple-rooms-single-folio.md
J-11Late Checkout & Folio DisputeFront Desk + ManagerElectron DesktopMP1front-desk/J-11-late-checkout-and-folio-dispute.md
J-12End-of-Day Cash Drawer CloseFront Desk + FinanceElectron DesktopMP0front-desk/J-12-end-of-day-cash-drawer-close.md
J-13Onboard New Tenant (Single Hotel Operator)OwnerControl Plane + ElectronLP0management/J-13-onboard-new-tenant-single-hotel.md
J-14Onboard Chain (Multi-Property Tenant)Chain OperatorControl Plane + ElectronLP1management/J-14-onboard-chain-multi-property.md
J-15Configure Dynamic Pricing AI SuggestionsGMElectron DesktopMP1management/J-15-configure-dynamic-pricing-ai-suggestions.md
J-16Review Daily Operations DashboardGMElectron DesktopMP0management/J-16-review-daily-operations-dashboard.md
J-17Run Monthly Tax ReportFinanceElectron DesktopSP0management/J-17-run-monthly-tax-report.md
J-18Submit Daily Guest Registration to AuthorityReceptionist / AdminElectron DesktopMP0management/J-18-submit-daily-guest-registration-to-authority.md
J-19Auto-Cleaning on Checkout (Online)Housekeeping Lead + HousekeeperElectron DesktopMP0housekeeping/J-19-auto-cleaning-on-checkout-online.md
J-20Offline Housekeeping Update from DesktopHousekeeping LeadElectron Desktop (offline)MP0housekeeping/J-20-offline-housekeeping-update-from-desktop.md
J-21Mid-Stay Cleaning RequestGuest + HousekeepingTenant Booking Mobile + DesktopSP1housekeeping/J-21-mid-stay-cleaning-request.md
J-22Cleaning Reveals Maintenance IssueHousekeeper + MaintenanceElectron DesktopMP0housekeeping/J-22-cleaning-reveals-maintenance-issue.md

2. The 14-section journey template

Every journey file in this folder MUST conform to this structure. Where a section is genuinely n/a, write "n/a — ".

  1. Purpose — Goal as the persona would express it; user outcome named in 1-2 sentences.
  2. Persona Context — Persona, surface(s), preconditions, trigger, primary BFF(s).
  3. Entry Points — Every way the user can enter this journey (deep link, push, in-app nav, system event).
  4. Screen-by-Screen Flow — Numbered list. Each screen carries sub-blocks: Layout text-wire / Components / Offline / AI / Errors / Loading / A11y / RTL / Perf / Telemetry.
  5. State Machine — Mermaid stateDiagram-v2.
  6. Data Requirements — Endpoints (BFF -> domain), TanStack query keys, IndexedDB / MMKV / SQLite touchpoints, idempotency strategy.
  7. AI Behavior — Per AI surface in this journey: purpose, model class, edge vs cloud, HITL UI, provenance UI, fallback.
  8. Offline Behavior — What works, what blocks, what the user sees.
  9. Error States — Per failure mode: trigger, UX shown, recovery path, telemetry.
  10. E2E Test Gates — Named scenarios; cross-link to gates in ../common/10-frontend-testing-strategy.md §3.
  11. Performance Requirements — Per-screen budgets, perceived latency targets, network call counts.
  12. Accessibility Requirements — Keyboard, focus, screen reader, contrast, touch targets, reduced motion.
  13. Telemetry — Frontend frontend.* events + backend domain events emitted.
  14. Success Criteria — Concrete, testable assertions for the journey end-to-end.

3. Cross-journey invariants (apply to every journey; not repeated per file)

  1. Tenant on every request. Every API call carries X-Tenant-Id; every event carries tenantId; every SQLite row carries tenant_id. Zero untenanted reads except the meta-search aggregate.
  2. Idempotency on every mutation. All POST/PUT/PATCH carry X-Idempotency-Key (ULID). Desktop outbox uses deterministic keys per pending mutation.
  3. Provenance on every AI step. Every AI call attaches aiProvenance = { model, version, promptId, traceId, reviewedBy?, reviewedAt?, local } per ../../08-ai-architecture.md §6.
  4. HITL on irreversible AI actions. Anything that mutates guest-facing state (rate change, message send, key issuance, refund) is suggested, never auto-applied, unless tenant has enabled an explicit auto-policy.
  5. RTL/LTR by direction, not by locale. Shell honours dir="rtl" for Pashto/Dari/Persian/Arabic. Logical CSS only.
  6. Sync-status pill always visible on the Electron desktop. Pending mutations and connectivity state reflected at every step.
  7. Audit log is canonical. Every state-changing step emits an entry to the immutable audit log via audit-service subscription on the originating event.
  8. Domain canonical. Tenant booking sites live on melmastoon.app; marketing site lives on melmastoon.com. Inbound deep links use the tenant slug subdomain (<slug>.melmastoon.app).

4. Cross-cutting catalogs

For deeper reference on the patterns each journey relies on, see:

For platform / surface specs:


5. Operating-mode behaviour (master matrix for journey authors)

Each journey runs under one of five operating modes from ../../01-product-overview.md §9. Authors may copy the relevant row into their journey file. Full matrix:

JourneyFully OnlineDegraded OnlineFully OfflineSync RecoveryAI Degraded
J-01 / J-02FullCached results; bannerPWA cached results; payment blockedn/a (consumer)No personalisation; no AI suggestions; flow unaffected
J-03FullHold + payment retryn/a (consumer flows require online for payment confirm)n/aAI transliteration -> manual entry; no blockage
J-04FullCard: degrade to cash-on-arrival promptBlocked at payment stepn/aFraud detection bypassed -> enhanced HITL queue
J-05FullID OCR retriesID OCR uses edge ONNX; lock issuance via offline-cert; mobile-key SMS queuedProvisional credentials reconciledManual ID entry only
J-06FullPayment retriesCharges queued; key revoke via offline-certOutbox flush in folio ordern/a
J-07Equivalent to J-05 walk-inSamePrimary mode; fully supportedReservation arbitration; conflict UXManual transliteration
J-08FullSSE retriesReads from SQLite snapshot; mobile-key invites queuedOutbox flush; lock vendor reconciliationNo upsell suggestions
J-09FullVendor retriesLocal fallback (backup card pool)Vendor revoke reconciliationn/a
J-10FullInventory hold retriesWalk-in path (J-07) for groupsMulti-aggregate conflict UXn/a
J-11Fulln/aCredit note local; refund queuedOutbox flushn/a
J-12Fulln/aSettlement local; EOD report from SQLiteOutbox flushn/a
J-13 / J-14Full (online required)Tenant onboarding requires onlinen/an/aTheme palette suggestion -> manual
J-15FullSuggestions cachedEdge model produces smoothed forecastn/a"Suggestions unavailable today"
J-16FullStale-projection badgeFirst paint from SQLite; SSE upgrades on reconnectn/aAI insight tile hidden
J-17 / J-18FullGeneration queuedGeneration from SQLite; submission queuedOutbox flush; submission retryn/a
J-19FullAI routing -> manualn/a (housekeepers usually share property)n/aManual assignment only
J-20n/an/aPrimary modeConflict UXn/a
J-21FullNotification retriesReads only on guest sideOutbox flushn/a
J-22FullMaintenance creation retriesLocal; reaccommodation deferred until onlineReaccommodation surfaces in Sync Centern/a

6. AI HITL pattern (canonical card; reused across journeys)

Every AI suggestion in the platform implements the same surface contract:

+-------------------------------------------------------------+
| AI Suggestion Card |
| +---------------------------------------------------------+|
| | Suggestion text ||
| | Rationale: <1-line summary> ||
| | Confidence: <bar> ||
| | Provenance: <model>@<version> . prompt:<id> . trace:<id> ||
| +---------------------------------------------------------+|
| [ Accept ] [ Modify ] [ Reject ] [ Why this? ] |
+-------------------------------------------------------------+
  • Accept records reviewedBy + reviewedAt and applies the action.
  • Modify opens an editable view; on save, persists the edited value with provenance preserved.
  • Reject records the reason (free-text optional) and does not apply.
  • Why this? opens a panel with the model, the prompt, and the contributing data points.

Irreversible actions (rate change, message send, key issuance, refund) MUST require Accept/Modify; auto-apply is disallowed unless tenant policy explicitly enables it.


References