Projektstruktur

Das Verzeichnis-Layout verstehen und wissen, wo du Code in nextsaas.ai Kit findest und hinzufügst

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:
PaketImport-PfadZweck
ui@nextsaasai/ui/boilerplateGemeinsame UI-Komponenten (Buttons, Cards, Dialoge)
utils@nextsaasai/utilsGemeinsame Hilfsfunktionen (cn, formatDate, formatDateShort)
email-templates@nextsaasai/email-templatesReact Email Templates
blog@nextsaasai/blogBlog-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

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. Verwende createApiResponse() und handleApiError() 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:
  1. Authentifizierung — Clerk Auth-Prüfungen für geschützte Routen
  2. Security Headers — CSP, HSTS, X-Frame-Options
  3. 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

DateiZweck
apps/boilerplate/next.config.mjsNext.js-Einstellungen (Redirects, Headers, Webpack)
apps/boilerplate/tailwind.config.jsTailwind CSS Theme- und Plugin-Konfiguration
apps/boilerplate/tsconfig.jsonTypeScript-Compiler-Optionen und Pfad-Aliase
apps/boilerplate/prisma/schema.prismaDatenbankschema-Definition
apps/boilerplate/vitest.config.tsUnit-Test-Konfiguration
apps/boilerplate/playwright.config.tsE2E-Test-Konfiguration
apps/boilerplate/docker-compose.ymlLokales PostgreSQL und Testdatenbank
apps/boilerplate/.env.exampleVorlage für Umgebungsvariablen
apps/boilerplate/vercel.jsonVercel-Deployment-Konfiguration
apps/boilerplate/postcss.config.jsPostCSS-Plugins (Tailwind)
apps/boilerplate/components.jsonshadcn/ui-Komponentenkonfiguration
turbo.jsonBuild-Pipeline-Konfiguration (Root)
pnpm-workspace.yamlWorkspace-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.