Files
breakpilot-lehrer/website
Benjamin Admin b4613e26f3 [split-required] Split 500-850 LOC files (batch 2)
backend-lehrer (10 files):
- game/database.py (785 → 5), correction_api.py (683 → 4)
- classroom_engine/antizipation.py (676 → 5)
- llm_gateway schools/edu_search already done in prior batch

klausur-service (12 files):
- orientation_crop_api.py (694 → 5), pdf_export.py (677 → 4)
- zeugnis_crawler.py (676 → 5), grid_editor_api.py (671 → 5)
- eh_templates.py (658 → 5), mail/api.py (651 → 5)
- qdrant_service.py (638 → 5), training_api.py (625 → 4)

website (6 pages):
- middleware (696 → 8), mail (733 → 6), consent (628 → 8)
- compliance/risks (622 → 5), export (502 → 5), brandbook (629 → 7)

studio-v2 (3 components):
- B2BMigrationWizard (848 → 3), CleanupPanel (765 → 2)
- dashboard-experimental (739 → 2)

admin-lehrer (4 files):
- uebersetzungen (769 → 4), manager (670 → 2)
- ChunkBrowserQA (675 → 6), dsfa/page (674 → 5)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-25 08:24:01 +02:00
..

BreakPilot Website

Marketing- und Pricing-Website fuer BreakPilot mit Stripe Checkout Integration.

Tech Stack

  • Framework: Next.js 15.1.6
  • Styling: Tailwind CSS 3.4
  • Language: TypeScript 5.7
  • Payment: Stripe Checkout (via Billing Service)

Lokale Entwicklung

Voraussetzungen

  • Node.js 20+
  • npm oder yarn

Installation

cd website
npm install
npm run dev

Website ist dann unter http://localhost:3000 erreichbar.

Docker

Build

docker build -t breakpilot-website \
  --build-arg NEXT_PUBLIC_BILLING_API_URL=http://localhost:8083 \
  --build-arg NEXT_PUBLIC_APP_URL=http://localhost:8000 \
  .

Run

docker run -p 3000:3000 breakpilot-website

Mit Docker Compose

# Aus dem Root-Verzeichnis
docker compose up -d website

Umgebungsvariablen

Variable Beschreibung Default
NEXT_PUBLIC_BILLING_API_URL URL zum Billing Service http://localhost:8083
NEXT_PUBLIC_APP_URL URL zur BreakPilot App http://localhost:8000
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY Stripe Public Key -

Build-Zeit vs. Runtime

NEXT_PUBLIC_* Variablen werden zur Build-Zeit eingebettet. Fuer Docker:

docker build \
  --build-arg NEXT_PUBLIC_BILLING_API_URL=https://api.breakpilot.de \
  --build-arg NEXT_PUBLIC_APP_URL=https://app.breakpilot.de \
  --build-arg NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_xxx \
  .

Stripe Integration

Flow

  1. Nutzer waehlt Plan auf der Pricing-Seite
  2. Nutzer gibt E-Mail ein
  3. Website ruft POST /api/v1/billing/trial/start am Billing Service auf
  4. Billing Service erstellt Stripe Checkout Session
  5. Nutzer wird zu Stripe Checkout weitergeleitet
  6. Nach Zahlung: Redirect zu /success?session_id=xxx
  7. Success-Seite zeigt Bestaetigung und leitet zur App weiter

API Endpunkt

POST /api/v1/billing/trial/start
Content-Type: application/json

{
  "plan_id": "basic" | "standard" | "premium",
  "email": "user@example.com"
}

Response:
{
  "checkout_url": "https://checkout.stripe.com/..."
}

Seiten

Route Beschreibung
/ Landing Page mit Hero, Pricing, Trust-Sektion
/success Erfolgsseite nach Stripe Checkout
/cancel Abbruchseite wenn Checkout abgebrochen

Produktion

Empfohlene Konfiguration

NEXT_PUBLIC_BILLING_API_URL=https://api.breakpilot.de
NEXT_PUBLIC_APP_URL=https://app.breakpilot.de
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_xxx

SSL/TLS

Fuer Produktion sollte ein Reverse Proxy (nginx, Traefik) mit SSL verwendet werden.

Projektstruktur

website/
├── app/
│   ├── globals.css      # Tailwind + Custom Styles
│   ├── layout.tsx       # Root Layout
│   ├── page.tsx         # Landing Page
│   ├── success/
│   │   └── page.tsx     # Checkout Erfolgsseite
│   └── cancel/
│       └── page.tsx     # Checkout Abbruchseite
├── components/
│   ├── Header.tsx       # Navigation
│   ├── PricingSection.tsx # Pricing Cards + Modal
│   └── Footer.tsx       # Footer
├── Dockerfile           # Multi-stage Docker Build
├── next.config.mjs      # Next.js Konfiguration
├── tailwind.config.ts   # Tailwind mit BreakPilot Farben
└── package.json