Skip to content

Admin portal overview

Everything under /admin in the web app. Pages live in apps/web/src/app/(main)/admin/; the sidebar is defined in AdminLayoutClient.tsx, and access to each page is decided by PAGE_ACCESS in packages/core/src/lib/rbac.ts.

Group What it covers
Overview Dashboard, Analytics
Events Events, Auctions, Artwork, Bundles, Artists, Signing Config, Sponsors, Stamp Rally, Vendor Directory
Bookings Signing Bookings, Entry Bookings, Grading Bookings, Revenue (Artist Signing, Bookings, WhatsApp Sales)
Finance Finance dashboard, Payment Requisitions, Supplier Bills, Expense Claims, Suppliers / Payees
Event Day Signing scanners (Entry, Exit, Slip, Payment Checker, Prize), Signing Queue, Scan Monitor, Entry Tickets (Walk-In Booking, Entrance Gate, Ticket Check-In)
Engagement CRM, Inbox, WhatsApp, Vendor Contacts, CDP, Vendors, Collaborate, Vouchers, Lucky Draws, Merch Sales
Content News, Newsletter, Testimonials, Legal Pages, Mobile App (Reports, Posts, Comments, Ads, Badges, Promo Cards, Wallpapers, Card Shops, App Config)
System Users, Settings, Email Previews, Audit Trail
  1. Register the page in PAGE_ACCESS. A 403 on a page you just added is almost always this. See Roles and access.
  2. Audit-log every create, update and delete with logAudit(ctx, {...}). It is a compliance requirement and bun run check:audit-coverage enforces it in CI.

The admin-crud skill scaffolds the router, page and data table in the house style. The manual version is in Your first task.