From d7b35d954421fd7577cd2c26247666e5953b647d Mon Sep 17 00:00:00 2001 From: Thomas Hallock Date: Mon, 3 Nov 2025 11:08:54 -0600 Subject: [PATCH] fix: mark dynamic routes as force-dynamic to prevent static generation errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Next.js build was failing because routes using headers() were being statically generated during build time. Added `export const dynamic = 'force-dynamic'` to: - /api/player-stats (uses getViewerId which reads headers) - /api/debug/active-players (uses getViewerId which reads headers) - /opengraph-image (reads filesystem during render) Build errors: - Route /api/player-stats couldn't be rendered statically because it used `headers` - Route /api/debug/active-players couldn't be rendered statically because it used `headers` - Error occurred prerendering page "/opengraph-image" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- apps/web/src/app/api/debug/active-players/route.ts | 3 +++ apps/web/src/app/api/player-stats/route.ts | 3 +++ apps/web/src/app/opengraph-image.tsx | 1 + 3 files changed, 7 insertions(+) diff --git a/apps/web/src/app/api/debug/active-players/route.ts b/apps/web/src/app/api/debug/active-players/route.ts index 7ebce646..04dd3a9b 100644 --- a/apps/web/src/app/api/debug/active-players/route.ts +++ b/apps/web/src/app/api/debug/active-players/route.ts @@ -4,6 +4,9 @@ import { getActivePlayers } from '@/lib/arcade/player-manager' import { db, schema } from '@/db' import { eq } from 'drizzle-orm' +// Force dynamic rendering - this route uses headers() +export const dynamic = 'force-dynamic' + /** * GET /api/debug/active-players * Debug endpoint to check active players for current user diff --git a/apps/web/src/app/api/player-stats/route.ts b/apps/web/src/app/api/player-stats/route.ts index 9cce5e62..4008e583 100644 --- a/apps/web/src/app/api/player-stats/route.ts +++ b/apps/web/src/app/api/player-stats/route.ts @@ -7,6 +7,9 @@ import { players } from '@/db/schema/players' import type { GetAllPlayerStatsResponse, PlayerStatsData } from '@/lib/arcade/stats/types' import { getViewerId } from '@/lib/viewer' +// Force dynamic rendering - this route uses headers() +export const dynamic = 'force-dynamic' + /** * GET /api/player-stats * diff --git a/apps/web/src/app/opengraph-image.tsx b/apps/web/src/app/opengraph-image.tsx index 2c3c2f2d..ddc94128 100644 --- a/apps/web/src/app/opengraph-image.tsx +++ b/apps/web/src/app/opengraph-image.tsx @@ -4,6 +4,7 @@ import { join } from 'path' // Route segment config export const runtime = 'nodejs' +export const dynamic = 'force-dynamic' // Image metadata export const alt = 'Abaci.One - Interactive Soroban Learning Platform'