Kit wird als Monorepo ausgeliefert, das von Turborepo und pnpm Workspaces betrieben wird. Die Hauptanwendung befindet sich in
apps/boilerplate/, mit gemeinsam genutzten Paketen in packages/. Diese Seite erklärt, wo alles zu finden ist, damit du genau weißt, wo du deinen eigenen Code hinzufügen sollst.Übersicht auf oberster Ebene
.
├── apps/
│ └── boilerplate/ # Haupt-SaaS-Anwendung (Next.js)
│ ├── prisma/ # Datenbankschema und Migrationen
│ │ └── schema.prisma # Prisma-Schema-Definition
│ ├── public/ # Statische Assets (Favicons, Bilder, Manifeste)
│ ├── src/ # Gesamter Anwendungs-Quellcode
│ │ ├── app/ # Routen, Seiten, Layouts und API-Endpunkte
│ │ ├── components/ # Wiederverwendbare UI-Komponenten
│ │ ├── config/ # Anwendungskonfiguration
│ │ ├── emails/ # React Email Templates
│ │ ├── hooks/ # Custom React Hooks
│ │ ├── lib/ # Kerngeschäftslogik und Hilfsfunktionen
│ │ ├── middleware.ts # Request-Pipeline (Auth + Sicherheit)
│ │ ├── mocks/ # MSW API-Mock-Handler
│ │ ├── providers/ # React Context Provider
│ │ └── styles/themes/ # Farbthema-CSS-Dateien
│ ├── e2e/ # Playwright End-to-End-Tests
│ ├── .env.example # Vorlage für Umgebungsvariablen
│ ├── docker-compose.yml # Lokales PostgreSQL-Setup
│ ├── next.config.mjs # Next.js-Konfiguration
│ ├── tailwind.config.js # Tailwind-CSS-Konfiguration
│ ├── tsconfig.json # TypeScript-Konfiguration
│ ├── vitest.config.ts # Unit-Test-Konfiguration
│ └── playwright.config.ts # E2E-Test-Konfiguration
├── packages/
│ ├── ui/ # Gemeinsame UI-Komponenten (@nextsaasai/ui)
│ ├── utils/ # Gemeinsame Hilfsfunktionen (@nextsaasai/utils)
│ ├── email-templates/ # E-Mail-Templates (@nextsaasai/email-templates)
│ └── blog/ # Blog-Paket (@nextsaasai/blog)
├── package.json # Root-Workspace-Konfiguration
├── pnpm-workspace.yaml # Workspace-Definitionen
└── turbo.json # Build-Pipeline-Konfiguration
Gemeinsame Pakete
Das
packages/-Verzeichnis enthält wiederverwendbaren Code, der über Anwendungen hinweg geteilt wird. Jedes Paket wird unter dem @nextsaasai-Scope veröffentlicht und über scoped Pfade importiert:| Paket | Import-Pfad | Zweck |
|---|---|---|
| ui | @nextsaasai/ui/boilerplate | Gemeinsame UI-Komponenten (Buttons, Cards, Dialoge) |
| utils | @nextsaasai/utils | Gemeinsame Hilfsfunktionen (cn, formatDate, formatDateShort) |
| email-templates | @nextsaasai/email-templates | React Email Templates |
| blog | @nextsaasai/blog | Blog-Paket mit MDX-Unterstützung |
Du musst Pakete nur selten direkt bearbeiten — sie werden als Abhängigkeiten von der Boilerplate-App verwendet.
Das Verzeichnis apps/boilerplate/src/
Das Verzeichnis
apps/boilerplate/src/ enthält den gesamten Anwendungscode. Hier ist eine Übersicht über jedes Unterverzeichnis.apps/boilerplate/src/app/ — Routen und Seiten
Kit verwendet den Next.js App Router. Jeder Ordner innerhalb von
apps/boilerplate/src/app/ repräsentiert eine Route oder Routengruppe.apps/boilerplate/src/app/
├── (auth)/ # Authentifizierungsseiten (Login, Registrierung)
├── (dashboard)/ # Dashboard-Seiten (geschützte Routen)
├── (dev)/ # Nur-Entwicklung-Seiten
├── (legal)/ # Rechtliche Seiten (Datenschutz, AGB, Impressum)
├── api/ # API-Route-Handler
├── logout/ # Logout-Ablauf
├── payment/ # Zahlungsseiten
├── layout.tsx # Root-Layout (Provider, Schriften, Theme)
├── page.tsx # Startseite
├── globals.css # Globale Styles und Theme-Imports
├── llms.txt/ # llms.txt für KI-Crawler (llmstxt.org)
├── robots.ts # robots.txt-Generierung
└── sitemap.ts # sitemap.xml-Generierung
Ordner in Klammern wie
(auth) und (dashboard) sind Routengruppen. Sie strukturieren den Code, ohne die URL-Struktur zu beeinflussen. Zum Beispiel rendert apps/boilerplate/src/app/(dashboard)/dashboard/settings/page.tsx unter /dashboard/settings, nicht unter /(dashboard)/dashboard/settings.apps/boilerplate/src/components/ — UI-Komponenten
Komponenten sind nach Feature-Bereichen organisiert. Jedes Unterverzeichnis gruppiert zusammengehörige Komponenten.
apps/boilerplate/src/components/
├── ai/ # KI-Chat-, Bildgenerierungs- und Content-Generator-Komponenten
├── auth/ # Login-Formulare, Auth Guards, Benutzermenüs
├── credits/ # Credit-Guthaben-Anzeigen, Bonus-Toggle, Kaufabläufe
├── dashboard/ # Dashboard-Layout, Sidebar, Statistik-Cards
├── demo/ # Demo-Modus-Banner und Mock-Daten-UI
├── modals/ # Modal-Dialoge und Bestätigungsabfragen
├── payments/ # Pricing Cards, Checkout, Abrechnungsverlauf
├── shared/ # Feature-übergreifende Hilfsmittel (Laden, Fehler)
├── test/ # Test-spezifische Wrapper-Komponenten
└── upload/ # Datei-Upload-Komponenten
apps/boilerplate/src/lib/ — Kernlogik
Das
lib/-Verzeichnis enthält die gesamte Geschäftslogik, nach Domäne getrennt. Hier lebt der größte Teil der Anwendungslogik.apps/boilerplate/src/lib/
├── ai/ # KI-Provider-Konfiguration, RAG-Pipeline, Embeddings, Bildgenerierung, Content Gen
├── api/ # API-Antwort-Hilfsmittel, Fehlerbehandlung
├── auth/ # Auth-Konfiguration, Testbenutzer, Hilfsfunktionen
├── config/ # Feature Flags und App-Konstanten
├── credits/ # Credit-Guthaben, Verbrauch, Tracking
├── db/ # Datenbank-Client (Prisma) und Query-Hilfsmittel
├── db.ts # Datenbankverbindungs-Singleton
├── demo/ # Demo-Modus-Logik und Mock-Daten
├── email/ # E-Mail-Versand, Templates, Warteschlange
├── metadata.ts # SEO-Metadaten-Hilfsmittel
├── navigation/ # Routendefinitionen und Navigationskonfiguration
├── payments/ # Lemon Squeezy Integration, Abonnement-Logik
├── permissions/ # Rollen- und Berechtigungsprüfungen
├── pricing/ # Pricing-Konfiguration, Plan-Definitionen, Validierung
├── query/ # TanStack Query Keys und Fetch-Funktionen
├── security/ # Rate Limiting, CORS, CSP, Eingabe-Sanitierung
├── services/ # Service-Layer (Benutzer, Abonnement, Credits)
├── storage/ # Vercel Blob Storage Hilfsmittel
├── stores/ # Zustand Client-seitige Stores
├── utils/ # Allgemeine Hilfsfunktionen
├── validations/ # Zod-Schemas für API-Validierung
└── webhooks/ # Webhook-Verifikation und -Verarbeitung
Die sechs wichtigsten Verzeichnisse beim Entwickeln von Features:
apps/boilerplate/src/lib/db/— Datenbank-Queries. Füge hier neue Queries hinzu, wenn du Daten lesen oder schreiben möchtest.apps/boilerplate/src/lib/api/— API-Hilfsmittel. VerwendecreateApiResponse()undhandleApiError()in deinen Route-Handlern.apps/boilerplate/src/lib/security/— Rate Limiting und Validierung. Auf neue API-Routen anwenden für Produktionssicherheit.apps/boilerplate/src/lib/payments/— Zahlungslogik. Enthält Plan-Konfigurationen, Checkout-Erstellung und Abonnementverwaltung.apps/boilerplate/src/lib/ai/— KI-Integration. Provider-Konfiguration, Chat-Logik und die RAG-Pipeline.apps/boilerplate/src/lib/stores/— Zustand-Stores für clientseitigen Zustand, der über Komponenten hinweg persistiert werden muss.
apps/boilerplate/src/providers/ — Context Provider
Provider umhüllen die Anwendung, um gemeinsam genutzten Kontext bereitzustellen. Sie werden im Root-Layout zusammengesetzt:
src/app/layout.tsx
// Provider Hierarchy (TOP → BOTTOM):
// 1. ClerkProvider - MUST wrap <html> and <body> (Clerk requirement)
// 2. MSWProvider - Mock Service Worker for API interception (dev/test)
// 3. QueryProvider - MUST be top-level for SSR/hydration safety
// 4. ThemeProvider - Theme context (dark/light mode)
// 5. DemoProvider - Demo mode context (passthrough when demo disabled)
//
// CRITICAL FIX: ClerkProvider now wraps <html> and <body> tags
// This fixes the "useAuth can only be used within ClerkProvider" error
// Reference: https://clerk.com/docs/nextjs/reference/components/clerk-provider
//
// Color Theme System:
// - data-theme attribute applies color scheme to entire application
// - Configured via COLOR_THEME environment variable
// - Supports 9 themes: default, ocean, forest, sunset, midnight, coral, slate, aurora, crimson
//
Das eigentliche Root-Layout rendert diese Provider um den Seiteninhalt:
src/app/layout.tsx
const content = (
<html lang="en" suppressHydrationWarning data-theme={colorTheme}>
<body className={`${inter.className} ${jetbrainsMono.variable}`}>
<MSWProvider>
<QueryProvider>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<DemoProvider>
<TooltipProvider>
{children}
<Toaster
richColors
position="top-center"
duration={8000}
toastOptions={{
classNames: {
icon: '!self-start !mt-0.5',
description: '!whitespace-pre-line',
},
}}
/>
<FilteredAnalytics />
</TooltipProvider>
</DemoProvider>
</ThemeProvider>
</QueryProvider>
</MSWProvider>
</body>
</html>
)
apps/boilerplate/src/hooks/ — Custom Hooks
Custom React Hooks für den Zugriff auf Anwendungszustand und -dienste:
apps/boilerplate/src/hooks/
├── use-ai.ts # KI-Chat-Zustand und Streaming-Aktionen
├── use-chat-rag.ts # RAG-Chat mit Knowledge Base
├── use-rag-chat.ts # RAG-Chat-Hook mit SSE-Streaming
├── use-image-gen.ts # Bildgenerierungs-Hook mit Sitzungsverlauf
├── use-content-generator.ts # Content-Generator-Hook mit SSE-Streaming
├── use-audio-recorder.ts # Audio-Aufnahme-Hook (MediaRecorder API)
├── use-pricing-config.ts # Zugriff auf aktuelle Pricing-Konfiguration
├── use-subscription-actions.ts # Abonnementverwaltungs-Aktionen
├── use-user-tier.ts # Abonnement-Tier des aktuellen Benutzers
├── use-is-in-demo-mode.ts # Prüfen, ob Demo-Modus aktiv ist
├── use-safe-query-client.ts # Sicherer TanStack Query Client Zugriff
└── ai-hooks.ts # Gemeinsame KI-Hook-Hilfsmittel
apps/boilerplate/src/styles/themes/ — Farbthemen
Kit enthält 9 Farbthemen. Jedes Theme definiert CSS Custom Properties für hellen und dunklen Modus:
src/styles/themes/themes.ts
export const AVAILABLE_THEMES = [
'default',
'ocean',
'forest',
'sunset',
'midnight',
'coral',
'slate',
'aurora',
'crimson',
] as const
Wechsle das Theme durch Ändern der
COLOR_THEME-Umgebungsvariable. Weitere Details zur Anpassung findest du unter Farbthemen.apps/boilerplate/src/config/ — App-Konfiguration
Zentrale Konfiguration für Branding, SEO und Site-Metadaten:
src/config/site.ts
export const siteConfig = {
/** Your brand/product name */
name: 'nextsaas.ai Kit',
/** Short description for the homepage title tag */
tagline: 'AI-Native Next.js SaaS Boilerplate',
/** Name used for blog article title tags */
blogName: 'nextsaas.ai Blog',
/** Separator between page name and brand (En-dash is professional standard) */
separator: '–',
/** Base URL for metadata */
url: process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000',
/** Default description for pages without custom description */
description:
'Production-ready Next.js boilerplate with authentication, database, and modern UI components.',
/** Author information */
author: {
name: 'Jon Doe',
twitter: '@jondoe',
},
} as const
export type SiteConfig = typeof siteConfig
Bearbeite diese Datei, um App-Name, Slogan, Autorinformationen und andere Branding-Details zu ändern, die in der gesamten Anwendung erscheinen.
apps/boilerplate/src/middleware.ts — Request-Pipeline
Die Middleware läuft bei jeder Anfrage und verarbeitet:
- Authentifizierung — Clerk Auth-Prüfungen für geschützte Routen
- Security Headers — CSP, HSTS, X-Frame-Options
- CORS — Cross-Origin-Request-Verarbeitung
Details zur Sicherheits-Middleware-Konfiguration findest du in der Sicherheitsübersicht.
Pfad-Aliase
Kit verwendet einen Pfad-Alias, damit du aus
apps/boilerplate/src/ importieren kannst, ohne komplizierte relative Pfade:tsconfig.json
"paths": {
"@/*": ["./src/*"]
}
Damit kannst du schreiben:
typescript
import { siteConfig } from '@/config/site'
import { Button } from '@/components/ui/button'
import { prisma } from '@/lib/db'
Statt fragiler relativer Imports wie
../../../lib/db.Wichtige Konfigurationsdateien
| Datei | Zweck |
|---|---|
apps/boilerplate/next.config.mjs | Next.js-Einstellungen (Redirects, Headers, Webpack) |
apps/boilerplate/tailwind.config.js | Tailwind CSS Theme- und Plugin-Konfiguration |
apps/boilerplate/tsconfig.json | TypeScript-Compiler-Optionen und Pfad-Aliase |
apps/boilerplate/prisma/schema.prisma | Datenbankschema-Definition |
apps/boilerplate/vitest.config.ts | Unit-Test-Konfiguration |
apps/boilerplate/playwright.config.ts | E2E-Test-Konfiguration |
apps/boilerplate/docker-compose.yml | Lokales PostgreSQL und Testdatenbank |
apps/boilerplate/.env.example | Vorlage für Umgebungsvariablen |
apps/boilerplate/vercel.json | Vercel-Deployment-Konfiguration |
apps/boilerplate/postcss.config.js | PostCSS-Plugins (Tailwind) |
apps/boilerplate/components.json | shadcn/ui-Komponentenkonfiguration |
turbo.json | Build-Pipeline-Konfiguration (Root) |
pnpm-workspace.yaml | Workspace-Definitionen (Root) |
Wo du deinen Code hinzufügst
Hier ist ein praktischer Leitfaden für die häufigsten Aufgaben:
Eine neue Seite hinzufügen:
Erstelle einen Ordner in
apps/boilerplate/src/app/, der deiner gewünschten URL entspricht. Zum Beispiel erstellt apps/boilerplate/src/app/(dashboard)/dashboard/analytics/page.tsx eine Seite unter /dashboard/analytics.Eine neue Komponente hinzufügen:
Platziere sie im passenden
apps/boilerplate/src/components/-Unterverzeichnis. Falls sie in keine vorhandene Kategorie passt, erstelle eine neue. Halte Komponenten fokussiert — eine Komponente pro Datei.Geschäftslogik hinzufügen:
Füge eine neue Datei oder ein Verzeichnis in
apps/boilerplate/src/lib/ hinzu. Zum Beispiel apps/boilerplate/src/lib/notifications/ für ein Benachrichtigungssystem. Exportiere Funktionen und Typen aus einer index.ts-Barrel-Datei.Eine API-Route hinzufügen:
Erstelle eine
route.ts-Datei in apps/boilerplate/src/app/api/. Zum Beispiel apps/boilerplate/src/app/api/analytics/route.ts. Verwende die API-Hilfsmittel aus apps/boilerplate/src/lib/api/ und füge Validierung mit Zod-Schemas in apps/boilerplate/src/lib/validations/ hinzu.Einen Custom Hook hinzufügen:
Platziere ihn in
apps/boilerplate/src/hooks/ mit dem Präfix use-. Zum Beispiel apps/boilerplate/src/hooks/use-notifications.ts.Halte Dateien unter etwa 150 Zeilen. Wenn eine Datei größer wird, teile sie in kleinere Module auf. Kleine, fokussierte Dateien sind einfacher zu verstehen, zu testen und zu pflegen.