- Rename VIEWER role to COMMISSIONER throughout (schema, middleware,
admin layout, users page); add psql pre-migration step in entrypoint
to rename the PostgreSQL enum value without data loss
- Install postgresql-client in Docker runner stage for psql access
- Login page: fetch sbLogo from settings API instead of hardcoded path
- Password change for all authenticated users:
- New PATCH /api/users/me endpoint (verifies current password, hashes new)
- Change Password button/modal on /my-squares page
- Change Password link in admin sidebar (links to /my-squares)
- New password_change email template (seeded, editable in admin)
- sendPasswordChangedEmail auto-email triggered on change
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full rewrite of the legacy PHP/MySQL app using Next.js 14, PostgreSQL,
Prisma, NextAuth, Tailwind CSS, and WebSocket-based live chat/grid updates.
Deployed via Docker Compose with a custom Node.js server for WebSocket support.
Fix chat display names by passing userId from the NextAuth session over
WebSocket instead of attempting to read the HttpOnly session cookie (which
is inaccessible to JavaScript). Server now looks up the user's first name
from the database using the userId.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>