fix: Doppelte Wurzelroute entfernt, Produktionsbuild geprueft

Zwei Dateien loesten denselben Pfad "/" auf: src/app/page.tsx und
src/app/(app)/page.tsx. Next.js uebersetzt das noch, erzeugt beim
Standalone-Build aber ein unvollstaendiges Client-Manifest - und genau
dieses Verzeichnis kopiert das Docker-Abbild. Im Behaelter waere die
Anwendung damit erst beim Start umgefallen. Die Weiterleitung liegt
jetzt nur noch ausserhalb der Routengruppe.

Dazu vier ungenutzte Importe und Konstanten, die den Build blockierten,
und eine ESLint-Regel, die mit Unterstrich benannte Parameter durchgehen
laesst - _gemeldeterMimeTyp in der Dateiablage wird absichtlich nicht
benutzt, weil der vom Browser gemeldete MIME-Typ nichts beweist. Der
Name sagt das; ihn zu entfernen wuerde die Schnittstelle verschlechtern.

Geprueft am fertigen Standalone-Build, also genau so, wie der Behaelter
startet:
- strenge CSP greift (nonce plus strict-dynamic, kein unsafe-inline fuer
  Skripte) und blockiert dabei nichts Eigenes
- Anmeldung, alle Fachseiten, Benutzermenue und Schnellerfassung
  funktionieren
- kein Konsolenfehler, keine blockierte Anfrage
- keine einzige Anfrage an einen fremden Host

Etappe: 8
Phase: Haertung
This commit is contained in:
Florian Wilde
2026-08-22 07:31:55 +02:00
parent 1dba4f3413
commit 468202249a
7 changed files with 400 additions and 396 deletions
+11 -1
View File
@@ -1,3 +1,13 @@
{
"extends": ["next/core-web-vitals", "next/typescript"]
"extends": ["next/core-web-vitals", "next/typescript"],
"rules": {
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"caughtErrorsIgnorePattern": "^_"
}
]
}
}
-9
View File
@@ -1,9 +0,0 @@
import { redirect } from 'next/navigation'
/**
* Die Wurzel der Anwendung hat keinen eigenen Inhalt: Wer angemeldet ist,
* will wissen, was heute zu tun ist.
*/
export default function StartPage() {
redirect('/heute')
}
@@ -6,7 +6,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { HeimkostenFormular } from '@/components/sozialhilfe/heimkosten-formular'
import { HeimkostenTabelle, type MonatsZeile } from '@/components/sozialhilfe/heimkosten-tabelle'
import { betragFormatieren } from '@/lib/finanzen/betrag'
import { db, nichtGeloescht } from '@/lib/db'
import { db } from '@/lib/db'
import { heuteAlsTag } from '@/lib/fristen/datum'
import {
BARBETRAG_CENT,
+6
View File
@@ -3,6 +3,12 @@ import { redirect } from 'next/navigation'
/**
* Einstiegspunkt. Wer angemeldet ist, landet auf dem Tagesdashboard;
* alles Weitere entscheidet der Anwendungsrahmen unter (app).
*
* Diese Weiterleitung liegt bewusst AUSSERHALB der Gruppe (app). Eine
* page.tsx innerhalb einer Routengruppe loest denselben Pfad "/" auf wie
* diese hier - zwei Dateien fuer eine Adresse. Next.js uebersetzt das
* zwar noch, erzeugt beim Standalone-Build aber ein unvollstaendiges
* Manifest, und genau dieses Verzeichnis kopiert das Docker-Abbild.
*/
export default function Startseite() {
redirect('/heute')
@@ -15,7 +15,6 @@ import { NachforderungAbzeichen } from '@/components/sozialhilfe/abzeichen'
import {
LEERE_NACHFORDERUNG,
NachforderungFormular,
type NachforderungWerte,
} from '@/components/sozialhilfe/nachforderung-formular'
import { fristAmpel, trackerFortschritt } from '@/lib/sozialhilfe/nachforderungen'
import { formatDatum } from '@/lib/utils'
-1
View File
@@ -33,7 +33,6 @@ export type KontaktZustand = {
werte?: Record<string, string>
}
const LEER: KontaktZustand = {}
function felderAusZod(fehler: { fieldErrors: Record<string, string[] | undefined> }) {
const felder: Record<string, string> = {}
-1
View File
@@ -51,7 +51,6 @@ export type Formularzustand = {
erfolg?: string
}
const LEER: Formularzustand = {}
function pfadeErneuern(...pfade: string[]): void {
for (const pfad of pfade) revalidatePath(pfad)