Seed users
src/scripts/seed-users.js before running against Atlas. Sign-in will fail for any DOE Google account that is not in users.
Additional scripts:
npm run assign-principals—src/scripts/assign-principals-to-forms.jsnpm run fix-form—src/scripts/fix-form-permissions.js
Annual rollover runbook
1
Publish the question bank
Super Admin →
/admin/questions → publish with { confirm: true } and pin schoolYear to the new year.2
Set deadlines and district goals
Year setup (
/dashboard?view=bulk-create) or PUT /api/school-year.3
Duplicate plans
POST /api/admin/forms/rollover with sourceYear / targetYear. Confirm created vs skipped.4
Verify archive
Source year
archived: true. Opens of last year’s forms are read-only.5
Tell principals
They update copied answers, compare attendance/housing/counseling, attest, and submit.
System health
Super Admin →/admin/system (also System in the Admin sidebar).
Confirms API uptime, MongoDB data size, Redis memory/keys, env var presence, and the unique schoolName + schoolYear index. Flush app caches or retry Redis from that page. Details: System health.
Auditing
UI:/admin/logs. Writes go through src/lib/auditLogger.js into AuditLog. Logins are recorded in the NextAuth signIn callback (fire-and-forget).
Support
Access requests: the account must exist in MongoDB before the person uses Google sign-in.
Runtime incidents (403, 429, OAuth bounce): Troubleshooting.