Skip to main content

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 from src/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
The same 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 on session.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
The sidebar heading is District 79; the subtitle is the product name from 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.