scripts/deploy.sh backs up the database (pg_dump), checks out the release,
runs npm ci, prisma migrate deploy and generate, builds the frontend,
restarts the PM2 apps and health-checks them. Any failure puts back the
previous code and build, and restores the dump if new migrations had run.
deployment.md §12 now uses it. tsconfig.tsbuildinfo leaves git so builds
don't leave the tree dirty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The heartbeat's stats.campuses and stats.campusCount were stored but never
shown. The Usage card now has a Campuses row: Off, or On with the active count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
POST /api/installs/update-request, signed like the heartbeat: opens an
update_requested alert and emails the alert address once; the next heartbeat
on a newer version resolves it. Shares the signature check with the heartbeat
and syncs docs/hub-protocol.md with the install's copy.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hope Events is now Cross Events. Protocol identifiers (hel1. tokens, CEH- keys)
are unchanged so existing installs keep working.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>