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
| Domain | Count | Status |
|---|---|---|
| Settings | 45+ | All KEEP |
| Front Desk | 12 | 11 KEEP; 1 DELETE |
| Reservations | 6 | All KEEP |
| Reports | 8 | 6 KEEP; 2 DELETE |
| Housekeeping | 7 | 5 KEEP; 2 DELETE |
| POS | 8 | All KEEP |
| Banquet | 5 | All KEEP |
| Control Center | 6 | All KEEP |
| CRM | 8 | All KEEP |
| Channel Manager | 6 | All KEEP |
| Rates | 3 | All KEEP |
| Marketing | 3 | All KEEP |
| Cash Management | 5 | All KEEP |
| Spa | 5 | All KEEP |
| Chain | 5 | All KEEP |
| Canteen | 2 | All KEEP |
| Other | 13 | 12 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