Provider tree
OnceUIProviders (src/components/OnceUIProviders.js) wraps Theme, Layout, Toast, and Icon providers using src/resources/once-ui.config.js (brand blue, accent indigo, light theme).
Public portal
src/components/public/PublicShell.js is a render-prop layout:
- Header:
BrandMark(src/components/BrandMark.js) — District 79 plus the product name fromsrc/lib/branding.js(Consolidated School & Youth Development Plan), year tag, Home / About, Sign in or Open dashboard - Main: page body
- Footer: Javier Jaramillo and Veronica Pichardo mailto links, D79 + NYC Public Schools logos
APP_NAME string is the browser tab title, login/home headings, PDF/Word headers, and district export titles. Do not hard-code a second product name in UI copy.
Home and About fetch /api/public/overview through usePublicOverview().
Dashboard
Sidebar groups depend onsession.user.level:
- All: Overview, Forms (Super Admin →
/admin/submissions; others →/dashboard?view=forms), How to (/dashboard?view=howto) - Level ≥ 4: Comments, analytics, notifications, bulk, performance, new form
- Level 4: School forms, school users, collaboration
- Level 5: Year setup (
/dashboard?view=bulk-create), Forms, all users, Schools, goals, question bank, collaboration, System, audit logs, role preview on Overview
src/lib/branding.js. Compact mode shows D79.
Form editor hierarchy
Next.js 16 type-checks
page.js files. Do not export helpers such as FormPageContent from a page module. Keep them as local functions or move them to src/components.