- verification/[id].tsx: approve, reject, request-documents, request-revision
all wired to real API endpoints with loading states and feedback banners
- Delete onboarding-management/ (flow moved to dashboard My Profile/Portfolio)
- kb.tsx: remove stray closing brace (TS1128 syntax error)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace runtime storage CRUD with real /api/admin/kb endpoints
- Add proper error handling and state management
- Support seed functionality via API
- Align data mapping with backend Article and Category structs
- Improves data persistence and admin UX
Closes #KB-API-Migration
- Wire dashboard home to live /api/admin/dashboard/metrics with 8 KPI widgets
- Add pending_approvals and total_revenue widget definitions
- Fix JSX syntax errors in [...module].tsx and modules.tsx
- Fix '>' character in DashboardDesignPreview.tsx
- AdminShell: add PAGE_TITLES and ROUTE_MODULE_KEYS entries for
/admin/ugc-content-creators with UGC_CONTENT_CREATOR_MANAGEMENT keys
- DashboardDesignPreview: fix portfolioMediaConfig to include DEVELOPER and
FITNESS_TRAINER as visual portfolio roles
- DashboardDesignPreview: add missing customerViewFor handlers for
'applications', 'shortlisted candidates', 'my applications', 'saved jobs'
- external-dashboard-management: add 'Settings' to CUSTOMER sidebar array
- Fix launch.json PATH so npm is found in sh shell
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace per-page AdminShell wrapping with a single SolidStart layout file
(src/routes/admin.tsx) so the shell mounts once and persists across all
/admin/* navigation — eliminating the sidebar bounce and session re-check
flash that occurred on every page transition.
- Create src/routes/admin.tsx as layout with <Outlet /> for child routes
- Remove <AdminShell> import/wrapper from all 66 route files and 2 shared
components (RoleUserManagementTablePage, UserListPage)
- Fix company.tsx: wrong fetch URL /api/admin/companies → /api/gateway/api/admin/companies
- Add missing auth headers (Authorization Bearer) to company.tsx and users.tsx
- Fix admin/index.tsx API constant from hardcoded localhost:8000 → /api/gateway
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Was calling /api/admin/auth/login which had no handler.
Fixed to /api/gateway/auth/login which proxies to Rust backend.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add full single-page portfolio preview in DashboardDesignPreview with
profile header, about, packages, gallery, experience, testimonials,
and FAQs sections matching Department Management design language
- Fix sidebar persona resolution to always include My Portfolio for all
professional subtypes (Photographer, Graphic Designer, Makeup Artist,
Tutor, Developer, Video Editor, Social Media Manager, Fitness Trainer,
Catering Services) via a three-layer fallback: roleId lookup → role
key from roles list → formRoleKey stored directly from dashboard record
- Add personaFromKey() helper so any professional role key maps to
PROFESSIONAL sidebar even when the roles API returns empty data
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full wiring: load() fetches audience=INTERNAL roles, save() creates/updates
via POST/PATCH with key/name/description/department_id/permissions/settings,
delete and status toggle wired. Permission matrix uses MODULE_PERMISSIONS
with prefix_ACTION keys. Detail view fetches permission_keys from GET /{id}.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove FALLBACK_DEPARTMENTS array and fallback logic. Normalize fields
from snake_case backend response (total_employees, department_head,
department_email, transfers_enabled). Empty list shown on API failure.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove FALLBACK_DESIGNATIONS and static DEPARTMENTS array. Fetch
departments from API for dropdown, send department_id (UUID) on save,
normalize department_name/department_id from backend response.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- View Department tab now shows department details (code, head, email, employees, visibility, date)
- Clicking ⋮ → View Department on a row populates the view panel
- Table hides when View tab is active (style:display reactive binding)
- Dropdown menu items rewritten with inline styles for proper spacing (4 items: View, Edit, Deactivate, Delete)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rewrote all layout/spacing with inline styles (Tailwind v4 doesn't generate most utility classes)
- AdminSidebar: all 37 modules in 9 groups, scrollable, 220px/64px collapse, no bottom user section
- AdminShell: header height 64px, user avatar top-right (Gmail-style), removed search bar
- Department: orange-only status badges, dark navy table header (white text), edge-to-edge table, View/Create/All tabs, View action in row menu, form with inline styles
- Designation: full rewrite matching department pattern — same tabs, filter bar, table, form
- Roles/Employees: compact filter bar and table cell sizing fixes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix employees routing: employees.tsx → Outlet layout, actual pages in employees/index.tsx and employees/create.tsx
- Employee list: stat cards, search/filter toolbar, table with 3-dot action menu (Edit, Deactivate, Delete), fallback data
- Employee create: form with full_name, email, role_id, department_id, designation_id selectors; auto-credential note
- Stage all other modified routes for next phases
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Sidebar: white bg, rounded pill nav items, orange left indicator for active
- Dashboard: remove Export/View All buttons, add Customise Dashboard + drag handles on widgets
- Department/Designation/Roles: new design system with orange label header, stat cards, light table header, 3-dot action menus, status badges
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Delete 8 redirect alias pages (approval-management, approvals, external-role-management,
internal-role-management, help, role-modules, settings, workspace) that used onMount
navigate — causes flicker and unnecessary AdminShell renders
- Delete unused Counter.tsx and Counter.css (test artifact, never imported)
- Update AdminSidebar to link directly to /admin/roles and /admin/runtime-roles
now that redirect shims are gone
- Remove codex build hashes from page titles (Departments, Designations, Dashboard)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shell (AdminShell + AdminSidebar):
- Logo moved to header-left section, width syncs with sidebar collapse state
- Global search bar with debounced multi-module API calls and grouped dropdown
- Bell notification icon with badge, gear → /admin/settings, user dropdown with logout
- Sidebar: 7 grouped nav sections with dividers, orange left-border active state,
removed "Active" badge pill, user info (avatar + name + role) pinned to bottom
- Fixed all sidebar labels to match Figma (Employee Management, External Onboarding
Management, Users Management, Verification Management)
- Added missing sidebar items: Verification, Fitness Trainers, Graphic Designers,
Social Media, Video Editors, Catering Services, Applications, Responses
Dashboard (admin/index):
- Rebuilt to match Figma: "Dashboard Overview" title, Export Report button
- 4 stat cards (Total Users, Active Companies, Open Leads, Credits Purchased)
with real API fetch, orange icons, delta badges, graceful — fallback
- ApexCharts: Leads Trend (orange gradient line) + Revenue Overview (navy bars)
- Drag-and-drop widget system via @thisbeyond/solid-dnd — sortable stat cards
and chart cards with handles and remove buttons in Customise mode
- Add Widget panel shows all available widgets not on dashboard
- 8 stat widgets + 3 chart widgets available; layout persists in localStorage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dark navy gradient background (matches public site's MarketingBackground feel)
- Glassmorphism card: rounded-[28px] border-white/30 bg-white/92 backdrop-blur-xl
shadow-[0_28px_60px_-34px_rgba(2,6,23,0.88)] — identical to public site card
- Input style: rounded-xl border-[#cfd4e3] focus:border-[#fd6216] focus:ring-[#ffd8c3]
- Label style: text-xs font-semibold uppercase tracking-[0.11em] text-[#4b546f]
- Field spacing: space-y-3.5 with mb-2 labels — matches public site exactly
- Password show/hide toggle (eye icon) matching public site
- Radial glow accent blobs behind the background
- Left brand panel kept as frosted glass over the dark bg (lg+ only)
- Navy submit button (intentional admin deviation from public orange)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced cramped single-column layout with a polished two-panel design:
- Left: navy (#0a1d37) brand panel with logo, headline, feature checklist,
radial glow accents, and security footer — visible at lg+ breakpoints
- Right: centered white card on slate-50 background with clean form,
proper input focus states (navy ring), and consistent navy submit button
- Mobile: collapses to single column with logo above the card
- Removed washed-out disabled orange button; button is always visible
- Consistent with admin design system (navy primary, orange accent only)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced 37 files worth of inconsistent inline Tailwind button classes
(mixed font-medium/semibold, px-4/px-6, with/without shadow-sm, inline-flex
variants) with the shared .btn-primary CSS class. Added :disabled state to
.btn-primary in app.css so disabled buttons visually dim consistently.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>