Design-Tokens aus docs/10-design-system.md als CSS-Variablen: Grundpalette, die sechs Klassifizierungsfarben, Eckenradius durchgehend 2 px, keine Schatten ausser dem Fokusring. Der Schwärzungsbalken mit dem einmaligen Durchwischen respektiert prefers-reduced-motion. Vier Tests halten die Tokens gegen das Dokument. IBM Plex selbst gehostet als woff2, latin und latin-ext getrennt über unicode-range, font-display: swap, immutable-Cache. Alle Oberflächentexte in lib/i18n/de.ts. Ein Test durchsucht app/ und components/ nach Umlauten im JSX und schlägt fehl, wenn dort deutscher Text steht. Er hat beim ersten Lauf gleich einen Verstoss gefunden. /api/health prüft Datenbank, Discord-Gateway und ClamAV. Die Gesamtbewertung fällt nur auf "down", wenn die Datenbank weg ist: die anderen Dienste haben eigene Healthchecks im Stack, und ein ausgefallener Virenscanner soll nicht den Web-Container als tot markieren. Strikte CSP mit Nonce, kein unsafe-inline für Skripte. Die erste Route liegt bei 100 kB JavaScript nach Kompression, Budget sind 120 kB.
15 lines
531 B
TypeScript
15 lines
531 B
TypeScript
import { createPrismaClient, type PrismaClient } from '@afis/db'
|
|
|
|
/**
|
|
* Ein Client pro Prozess. Im Dev-Server ueberlebt er den Hot Reload ueber
|
|
* globalThis, sonst reisst jede Aenderung eine neue Verbindung auf.
|
|
* Der Pool liegt im Betrieb hinter pgbouncer im Transaktionsmodus.
|
|
*/
|
|
const globalForPrisma = globalThis as unknown as { afisPrisma?: PrismaClient }
|
|
|
|
export const db: PrismaClient = globalForPrisma.afisPrisma ?? createPrismaClient()
|
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
globalForPrisma.afisPrisma = db
|
|
}
|