TorbatYar/frontend/docs/beauty-ui-completion-report.md
Mortezakoohjani d579d0b142 feat(loyalty): add Loyalty Platform Frontend module
Add frontend/modules/loyalty with types, API client, design system, feature pages and thin App Router routes under app/loyalty/. BFF proxy at app/api/loyalty/. Include loyalty frontend docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 10:50:55 +03:30

4.9 KiB

Beauty UI Completion Report

Date: 2026-07-26
Scope: All /beauty routes (98 pages)
Architecture: frontend/modules/beauty + thin app/beauty adapters


Summary

Portal Routes Production UI Notes
Owner (entity CRUD) 19 Complete BeautyResourceWorkspace + resource configs
Owner (insights) 6 Read + API Dashboard, calendar, integrations
Admin 10 Complete 4 entity pages use read-only workspace
Customer 19 API-connected Lists, cards, cross-module links where API absent
Reception 8 Workflow wired Check-in / check-out call real appointment APIs
Staff portal 6 API-connected Schedules, appointments, commission lists
Public site 21 API-connected Booking creates real appointments
Hub / auth / mobile 8 Complete Portal picker + auth redirects

Shared Infrastructure Added

Component Path Purpose
BeautyResourceWorkspace modules/beauty/components/crud/ Full CRUD shell: table/cards, filters, create/edit dialogs, detail drawer, audit timeline, workflow actions, permissions
BeautyComboboxes modules/beauty/components/ Org/branch/staff/customer/service/category/room selectors
useBeautyPermissions modules/beauty/hooks/ Permission gating (owner/admin bypass)
owner-resources.tsx modules/beauty/configs/ Declarative configs for 18 entity types
ReceptionAppointmentRow modules/beauty/components/ Reception workflow buttons (confirm, check-in, complete, cancel, no-show)
Labels modules/beauty/constants/labels.ts RTL status labels

Reuses @/src/shared/ui (DetailDrawer, Timeline, PermissionDeniedState) and @/src/shared/hooks (useDebouncedValue, useSavedFilters).


Owner Entity Pages — Feature Matrix

Page Create Read/List Update Delete Search/Filter Detail Audit Workflow
Organizations
Branches
Customers —* —*
Staff —* —*
Appointments confirm/check-in/complete/cancel/no-show
Service categories —* —*
Services —* —*
Staff schedules —* —*
Waiting list —* —*
Treatment rooms —* —*
Stations —* —*
Branch policies —* —*
Packages —* —*
Memberships —* —*
Commissions —* —*
Marketing campaigns —* —*
Integrations (3 tabs) —* —*
Settings upsert upsert

* Backend exposes create/list/get only — no PATCH or /delete route. UI implements all supported operations.


UX Features (All Workspace Pages)

  • Professional data tables + card view toggle
  • Debounced search + status filter + saved filter presets
  • Create dialog + edit drawer (where API supports)
  • Detail drawer with field list
  • Audit timeline (organizations, branches, appointments)
  • Permission denied states
  • Loading / empty / error states
  • RTL + light/dark via design tokens (--beauty-*, --surface, --border)
  • Toast feedback on mutations
  • Contextual workflow buttons on appointments

Cross-Portal Enhancements

  • Reception check-in / check-out: Real appointments.checkIn, complete, confirm, cancel, noShow
  • Admin org/branch/staff/customers: Read-only workspace with full list UX
  • Settings: Search + edit existing keys via upsert API

Known Backend Gaps (Not UI Blockers)

Secondary entities (ServiceVariant, PackageLine, etc.) have models but no public CRUD routes. Customer reviews/messages/favorites/invoices are owned by CRM/Accounting/Loyalty — UI links to those modules with empty states when data is external.


Validation

Check Result
validate:beauty-routes Pass (98 routes, thin adapters)
validate:beauty-imports Pass (no cross-module imports)
Beauty module lints Pass
Full monolith build ⚠ Blocked by pre-existing hospitality TypeScript error (unrelated)