The Save button was working (PATCH /api/profile succeeded), but the
only feedback was a small "Saved." text with no page change - easy to
read as "nothing happened," especially with no next step to move to.
Added a placeholder /discover page (protected, same as /profile) and
redirect there after a successful save, once the "Saved." confirmation
has been visible for a moment. This is a stand-in for the real
browse-other-members feature that's next on the roadmap, not the full
feature itself.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL5YUEf2B9LG4xdVUQwcSg
None of the database calls in these three places were wrapped in
try/catch, so any database hiccup (disk issue, lock contention, etc.)
surfaced as an unhandled 500 with a useless generic message and no
server-side log to explain why.
Found this while testing every page's redirects end to end: a broken
test setup on my end (an old server process left running against a
deleted database file) produced exactly this failure mode, which
would look identical to a real intermittent outage to an end user.
Now: signup and profile-update return a clear "try again in a
moment" message with the real error logged server-side; login logs
the real error but still shows the existing generic
"incorrect email or password" message to the client (matches
current behavior, avoids leaking account existence).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL5YUEf2B9LG4xdVUQwcSg
Two issues:
- The login page had no error handling around the sign-in call, so any
hiccup (slow connection, first page compile, etc.) failed silently:
the button stayed stuck on "Logging in..." with no redirect and no
error shown.
- Both pages used a client-side router transition to move to /profile
right after signing in, which can race with the session cookie
landing in the browser. Switched to a full page navigation instead,
which guarantees the cookie is present before /profile checks it.
Verified with a 10-run automated stress test (5 signups + 5 logins,
back to back with no delay) against a production build - all 10 now
land on /profile reliably.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL5YUEf2B9LG4xdVUQwcSg
Vercel's serverless functions only allow writes to /tmp, and it starts
empty on every cold start. Point the database there in production and
create the User table on first request if it doesn't exist yet, so the
app can be deployed for a live preview without manual database setup.
Note: this is a demo-friendly stand-in — data does not persist across
cold starts on Vercel. A real persistent database is a later phase.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL5YUEf2B9LG4xdVUQwcSg