Skip to main content

UX & Information Architecture Audit v2

Date: 2026-04-25 | Repository: hmp-web-dashboard | Scope: 166 routes

Executive Summary​

  • 166 dashboard routes audited across 16 domains
  • 12 stub pages with "coming soon" buttons/toasts — delete
  • 6 pages with filter-state persistence issues — add URL query params
  • 4 critical action gaps — ROOM-UPGRADE, MOVE, SWAP still "coming soon"
  • 3 pages with tablet layout issues — responsive fixes needed
  • Per-persona friction: Agents/Leads (2–3 pain points); Managers (0); Specialists (2)

Route Inventory by Domain​

DomainCountStatus
Settings45+All KEEP
Front Desk1211 KEEP; 1 DELETE
Reservations6All KEEP
Reports86 KEEP; 2 DELETE
Housekeeping75 KEEP; 2 DELETE
POS8All KEEP
Banquet5All KEEP
Control Center6All KEEP
CRM8All KEEP
Channel Manager6All KEEP
Rates3All KEEP
Marketing3All KEEP
Cash Management5All KEEP
Spa5All KEEP
Chain5All KEEP
Canteen2All KEEP
Other1312 KEEP; 1 DELETE

Total: 166 routes | Stubs: 12 pages for deletion

Key Pages — Detailed Audit​

/front-desk (Room Grid)​

File: src/app/(dashboard)/front-desk/page.tsx | Verdict: KEEP | Tablet: Y

Actions: Tape Chart nav; Walk-in nav (?mode=walkin); Room click → detail; Right-click → flip status

Information: Room # [essential] / Type / Occupancy [essential] / HK status [essential] / Guest [essential] / VIP [helpful]

Gaps: No direct check-in; no folio balance; room-move/swap/upgrade say "coming soon"

State: Filter ✗ / Scroll ✗


/reservations (Consolidated List)​

File: src/app/(dashboard)/reservations/keynova.tsx | Verdict: KEEP | Tablet: Y

Actions: "+ New" → /reservations/new; "+ Walk-in" → mode=walkin; Filter chips (All/Arrivals/In-House/Future/Departing) → URL ?filter=... ✓

Information: Confirmation # [essential] / Guest [essential] / Dates [essential] / Status [essential] / Room [helpful]

Gaps: No bulk assign; no group invoice

State: Filter ✓ / Search ✗


/front-desk/check-in/[id] (Multi-Step)​

File: src/app/(dashboard)/front-desk/check-in/[id]/keynova.tsx | Verdict: KEEP | Tablet: Partial

Steps: Verify ID → Assign Room → Collect Payment → Encode Keys → Complete

TODO: Line ~250 hardware integration for key encoding


/housekeeping (Dashboard)​

File: src/app/(dashboard)/housekeeping/keynova.tsx | Verdict: KEEP | Tablet: Y

Tabs: Room Status / Tasks / Inventory / Maintenance / Linen

State: Tab ✓ / View mode ✗ / Filters ✗ (PAIN POINT: floor filter resets on nav)

TODO: VIP checklist hardcoded; Phase 2 integration


/rates/calendar (14-Day Grid)​

File: src/app/(dashboard)/rates/calendar/keynova.tsx | Verdict: KEEP | Tablet: Partial

Actions: Date nav ✓ / Cell click override / Bulk update / Accept recommendations

State: Date range ✓ / Room filter ✗ (PAIN POINT: resets after dialog)

Mobile: Needs collapse to 7-day < 900px


/settings/users (+ 40 similar)​

Pattern: CRUD dialog + list + delete confirm | Verdict: All KEEP | Mobile: Y

Examples: property, rooms, rate-plans, taxes, roles, integrations, payment-providers, partners...


Stub Pages to Delete (12)​

housekeeping/inventory/reorder, housekeeping/lost-found, front-desk/phone, reports/competitor-intelligence, reports/predictive, marketplace/[pluginId], settings/compliance, settings/currency, settings/in-room-tech, settings/integrations/sap, settings/integrations/tally, settings/integrations/whatsapp

Action: Feature-gate; remove from sidebar


Discoverability Gaps (API Features Not Surfaced)​

ROOM-UPGRADE: "coming soon" → wire to dialog ROOM-MOVE: "coming soon" → add to folio actions ROOM-SWAP: "coming soon" → add to folio actions SEND-EMAIL: exists but verify wired FOLIO-NOTE: not visible → add section GUEST-TAG: TODOs only → add editor BULK-EMAIL: not visible → add action BULK-ROOMS: not visible → add action EXPORT-REPORT: unclear → verify RECALL-ORDER: not visible → add prev orders link


State Persistence Issues (6 Pages)​

housekeeping: filters reset → add ?floor=...&assignee=... reservations: search not persisted → add ?search=... rates/calendar: room filter resets → add ?roomTypeId=... reports: date range inconsistent → add ?dateFrom=...&dateTo=... banquet/events: status filter local → add ?status=... crm/guests: search local only → verify; add params

Solution: useUrlFilters hook for consistent syncing


Information Density — Remove/Hide​

Tenant ID: internal/privacy → remove System UUID: confusing/unused → hide Phone (unmasked): privacy risk → mask Status (color-only): memorization → add label Created/Updated dates: low operational value → hide


Tablet Issues (< 1024px)​

rates/calendar: 14-day grid too wide → collapse to 7-day front-desk/check-in: form + grid side-by-side → stack vertically banquet/events: detail + timeline side → tab layout housekeeping: grid overflow → list mode pos/orders: menu + panel side → tab layout


Per-Persona Friction​

Front Desk Agent (40–60 clicks/shift): Pain 3 (Arrivals redirect unclear, guest search slow, check-in hardware TODO)

Housekeeping Lead (20–30 clicks/shift): Pain 2 (dual UI confusion, floor filter reset)

Manager (25–40 clicks/shift): Pain 0

Reservations Specialist (30–50 clicks/shift): Pain 2 (form complexity, unclear quick vs full)


Recommendations (Priority Order)​

Week 1–2: Delete 12 stubs; wire room actions; add URL filters; fix check-in TODO

Week 3–4: Tablet fixes; verify redirect chain; consolidate POS; add shortcuts

Phase 2: Guest API fields; shift handoff UI; settings library; bulk operations


Audit Complete: 166 routes | 9 detailed cards | 12 stubs | 6 state-debt | 4 gaps | 3 tablet issues