v1.2.0
Infrastructure and reliability: admin access is now database-driven, and a round of error hardening across the auth, puzzle, and settings flows.
Changed
- Admin access is now database-driven. Admin status is a flag on the user account rather than a hardcoded email in the environment. Adding or removing an admin no longer requires a code change or redeploy.
Fixed
- Correct answers no longer appear wrong on server errors. A database hiccup while recording a solve could previously return a failure response to a user who answered correctly. The answer check and the record-keeping are now decoupled — a correct answer is always acknowledged as correct.
- Auth failures are caught cleanly. If account creation fails during the OAuth callback (e.g., a transient database error), the user is redirected to sign-in with a clear error rather than landing in a half-authenticated state.
- Settings changes are rolled back on failure. Toggling sound, hints, or streak display now rolls back to the previous value and shows an error toast if the save failed, rather than silently confirming a change that didn't stick.
- Discord login handles malformed responses. The Activity token exchange now validates the shape of Discord's API responses and returns a clean error instead of crashing if they're unexpected.
- Server errors no longer look like wrong answers. A 5xx during puzzle submission previously triggered the shake animation and counted as a wrong attempt. Server errors now reset the input silently so the attempt isn't penalized.
- Unhandled page errors show a Puddle error screen. Any uncaught server-side render error now shows a branded error page with a "Try again" button rather than a raw Next.js error screen.
Full changelog: v1.1.0...v1.2.0