From a46758a68214b03c5b9e43644b0a7a8dedd649f6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 30 Sep 2026 11:56:23 +0000 Subject: [PATCH] Fix server error on profile page in production (Vercel) Prisma bundles a native database engine binary matched to whatever machine runs "prisma generate." Without an explicit binaryTargets list, it only bundles the engine for the local build machine - which doesn't match Vercel's serverless runtime. Every database call then crashed at runtime with no useful error, which is what showed up as "server error" right after logging in (the profile page is the first one that reads from the database). Added "rhel-openssl-3.0.x" (Vercel's actual runtime) alongside "native" so both platforms get a working engine. Also wrapped the profile page's database calls in a try/catch so any future failure shows a plain "something went wrong, try again" message instead of Next.js's raw crash screen. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01VL5YUEf2B9LG4xdVUQwcSg --- prisma/schema.prisma | 6 +++++- src/app/profile/page.tsx | 24 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 52c3fb6..34e8b00 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,5 +1,9 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client-js" + // "native" builds for local dev; "rhel-openssl-3.0.x" is the engine + // Vercel's serverless functions actually run on. Without both, database + // calls crash in production with no useful error message. + binaryTargets = ["native", "rhel-openssl-3.0.x"] } datasource db { diff --git a/src/app/profile/page.tsx b/src/app/profile/page.tsx index 8e15d40..95ff4d8 100644 --- a/src/app/profile/page.tsx +++ b/src/app/profile/page.tsx @@ -11,12 +11,24 @@ export default async function ProfilePage() { redirect("/login"); } - await ensureDb(); - - const user = await prisma.user.findUnique({ - where: { id: session.user.id }, - select: { id: true, name: true, email: true, age: true, bio: true }, - }); + let user; + try { + await ensureDb(); + user = await prisma.user.findUnique({ + where: { id: session.user.id }, + select: { id: true, name: true, email: true, age: true, bio: true }, + }); + } catch (err) { + console.error("failed to load profile:", err); + return ( +
+

Something went wrong

+

+ We couldn't load your profile right now. Please try again in a moment. +

+
+ ); + } if (!user) { redirect("/login");