From ece86261374b67cb79f1c7f6ebbfdafa0030a304 Mon Sep 17 00:00:00 2001 From: Z User Date: Thu, 29 Oct 2026 00:42:15 +0000 Subject: [PATCH] fix: wrap login page in Suspense (useSearchParams prerender crash) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /login page used useSearchParams() without Suspense boundary - Next.js 16 requires Suspense for useSearchParams during static prerender - Extracted LoginForm component, wrapped in - Removed --webpack flag (default Turbopack build now works) - Build passes cleanly: ✓ Compiled successfully --- package.json | 2 +- src/app/login/page.tsx | 54 ++++++++++++++++++++++++------------------ 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index d51ab06..cc2a22a 100755 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "dev": "next dev -p 3000", "dev:log": "next dev -p 3000 2>&1 | tee dev.log", - "build": "prisma generate && next build --webpack && cp -r .next/static .next/standalone/.next/ && cp -r public .next/standalone/", + "build": "prisma generate && next build && cp -r .next/static .next/standalone/.next/ && cp -r public .next/standalone/", "start": "NODE_ENV=production bun .next/standalone/server.js 2>&1 | tee server.log", "lint": "eslint .", "db:push": "prisma db push --accept-data-loss", diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index bfd9899..5983f38 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,13 +1,13 @@ 'use client' -import { useState } from 'react' +import { Suspense, useState } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Loader2, Lock } from 'lucide-react' -export default function LoginPage() { +function LoginForm() { const router = useRouter() const searchParams = useSearchParams() const redirect = searchParams.get('redirect') || '/' @@ -40,6 +40,32 @@ export default function LoginPage() { } } + return ( +
+
+ + setPassword(e.target.value)} + placeholder="Admin-Passwort eingeben" + autoFocus + autoComplete="current-password" + /> +
+ {error && ( +

{error}

+ )} + +
+ ) +} + +export default function LoginPage() { return (
@@ -53,27 +79,9 @@ export default function LoginPage() {

-
-
- - setPassword(e.target.value)} - placeholder="Admin-Passwort eingeben" - autoFocus - autoComplete="current-password" - /> -
- {error && ( -

{error}

- )} - -
+ Laden…
}> + +

Geschützter Bereich — nur für autorisierte Benutzer.