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>
116 lines
4.2 KiB
Markdown
116 lines
4.2 KiB
Markdown
# Beauty Validation Report
|
|
|
|
**Date:** 2026-07-26
|
|
**Validator:** Automated + self-audit
|
|
|
|
---
|
|
|
|
## Quality Gates
|
|
|
|
| Gate | Command / Method | Result | Notes |
|
|
|------|------------------|--------|-------|
|
|
| Type check (beauty scope) | `read_lints modules/beauty` | ✅ Pass | Zero diagnostics |
|
|
| ESLint (beauty scope) | IDE lints on `modules/beauty` | ✅ Pass | |
|
|
| Route architecture | `npm run validate:beauty-routes` | ✅ Pass | 98 pages, 8 layouts, thin adapters |
|
|
| Import boundaries | `npm run validate:beauty-imports` | ✅ Pass | No cross-module imports |
|
|
| Module location | Manual audit | ✅ Pass | Business code in `modules/beauty` only |
|
|
| App directory | Manual audit | ✅ Pass | Routes re-export from modules |
|
|
| Mock data | Grep audit | ✅ Pass | No mock fixtures in beauty module |
|
|
| API connection | Resource config audit | ✅ Pass | All buttons wired to `beautyBusinessApi` |
|
|
|
|
---
|
|
|
|
## Build & Typecheck (Monolith)
|
|
|
|
| Check | Result | Notes |
|
|
|-------|--------|-------|
|
|
| `npm run typecheck` | ⚠ Partial | Pre-existing errors in `hospitality`, `healthcare/admin`, `accounting` — **zero beauty errors** |
|
|
| `npm run build` | ⚠ Blocked | Fails on `hospitality/HospitalityListCrudPage.tsx` missing `z` import — unrelated to beauty |
|
|
| Beauty compile | ✅ | Next.js compiled successfully before type gate failed on other module |
|
|
|
|
---
|
|
|
|
## CRUD Validation (Owner Entities)
|
|
|
|
| Entity | Create tested via config | List | Update | Delete | Workflow |
|
|
|--------|--------------------------|------|--------|--------|----------|
|
|
| organizations | ✅ API method | ✅ | ✅ API | ✅ API | — |
|
|
| branches | ✅ | ✅ | ✅ | ✅ | — |
|
|
| appointments | ✅ | ✅ | ✅ | — | ✅ 5 actions |
|
|
| All other entities | ✅ createFn | ✅ listFn | N/A (no API) | N/A (no API) | — |
|
|
|
|
---
|
|
|
|
## Permission Validation
|
|
|
|
- `useBeautyPermissions` gates workspace view/manage
|
|
- Tenant owner + platform admin → full manage
|
|
- `.view` permissions allow read for authenticated tenant members
|
|
- `PermissionDeniedState` shown when view denied
|
|
- Settings + admin permissions page read `permissions/catalog`
|
|
|
|
---
|
|
|
|
## Responsive Validation
|
|
|
|
- Workspace: `sm:grid-cols-2` forms, card grid `sm:grid-cols-2 xl:grid-cols-3`
|
|
- TableToolbar wraps on mobile
|
|
- Detail drawer `side="left"` RTL-friendly
|
|
- Portal shells use existing responsive nav
|
|
|
|
---
|
|
|
|
## Accessibility Validation
|
|
|
|
- Action buttons have `aria-label` (view/edit/delete icons)
|
|
- Timeline uses semantic `<ol>` + `<time datetime>`
|
|
- Form fields labeled
|
|
- Confirm dialogs for destructive/workflow actions
|
|
|
|
---
|
|
|
|
## Performance Validation
|
|
|
|
- TanStack Query with `staleTime` on permissions catalog (5 min)
|
|
- Debounced search (300ms via `useDebouncedValue`)
|
|
- Lookup queries shared via `useBeautyLookups`
|
|
- No N+1 in new components (list + optional audit on detail open only)
|
|
|
|
---
|
|
|
|
## Design System Validation
|
|
|
|
- Uses `@/components/ds` primitives
|
|
- `BeautyStatusChip`, tokens from `modules/beauty/design-system`
|
|
- CSS variables: `--beauty-*`, `--surface`, `--border`, `--muted`
|
|
- Consistent with healthcare `ResourceWorkspace` pattern
|
|
|
|
---
|
|
|
|
## Self-Audit Findings & Repairs
|
|
|
|
| Issue | Resolution |
|
|
|-------|------------|
|
|
| Owner pages partial CRUD | Replaced with `BeautyResourceWorkspace` |
|
|
| Reception check-in disconnected | Added `ReceptionAppointmentRow` with real mutations |
|
|
| Admin lists basic | Switched to read-only workspace |
|
|
| Settings no edit | Added upsert edit flow |
|
|
| Integrations read-only | Added create + tabs per integration type |
|
|
| Missing permission hook | Added `useBeautyPermissions` |
|
|
| Broken admin.tsx after edit | Removed orphaned JSX |
|
|
|
|
---
|
|
|
|
## Remaining Items (Out of Frontend Scope)
|
|
|
|
1. Backend PATCH/delete routes for secondary entities — enables full CRUD in UI
|
|
2. Monolith build fix for hospitality module
|
|
3. Customer reviews/messages — require CRM/Communication APIs
|
|
4. `validate:beauty-bundle` — run after monolith build succeeds
|
|
|
|
---
|
|
|
|
## Sign-Off
|
|
|
|
Beauty frontend module meets production-ready criteria for **all API-supported operations** across 98 routes. Full monolith build blocked by unrelated hospitality TypeScript error; beauty-specific validations all pass.
|