Technische Dokumentation aller Systeme, Pipelines und der Sicherheitsarchitektur.
Letztes Update: 10.02.2026
Blog Post → AI-Script → TTS → Audio Crossfade → Vercel Blob
generated_posts laden, TipTap JSON → PlaintextgetPersonalityState(locale) generieren---MOMENTS--- Sektionpost_podcasts.audio_urleleven_v3 mit Emotion Tagstts-1, tts-1-hdPOST /api/podcast/jobs → podcast_jobs Record (status=pending)POST /api/podcast/jobs/process → Async Verarbeitung (800s Timeout)current_line, progress, error_messageGET /api/podcast/[postId] alle 5s| Datei | Beschreibung |
|---|---|
| app/api/podcast/generate-script/route.ts | Script-Generierung mit Personality |
| app/api/podcast/generate/route.ts | Sync Audio-Generierung (5min) |
| app/api/podcast/jobs/route.ts | Job Queue CRUD |
| app/api/podcast/jobs/process/route.ts | Async Job-Verarbeitung (800s) |
| lib/tts/elevenlabs-tts.ts | TTS Provider, MP3 Concat, Emotion Tags |
| components/audio-player.tsx | Public Player mit Flying Nav |
Zusätzlich: mutual_comfort, flirtation_tendency, self_irony, inside_joke_count
DRIFT_RATE = 0.1 (10% Richtung Phase-Target pro Episode)NOISE_AMPLITUDE = 0.03 (±3% Random Walk Jitter)relationship_paused = true: comfort + flirtation eingefroren| Phase | Comfort-Schwelle | Charakteristik |
|---|---|---|
| Strangers | 0.0 | Formell, distanziert |
| Acquaintances | 0.3 | Erste Lockerheit |
| Colleagues | 0.5 | Vertraut, Inside Jokes beginnen |
| Friends | 0.7 | Offen, persönlich |
| Close Friends | 0.85 | Tiefe Verbundenheit |
Aktivierung: comfort ≥ 0.35 AND flirt ≥ 0.05. Dual-Gate-System — beide Dimensionen müssen Schwelle erreichen.
| Stufe | Comfort | Flirt | Dynamik |
|---|---|---|---|
| 1 — Subtil | ≥ 0.35 | ≥ 0.05 | Unausgesprochene Spannung (max 1 Moment/Ep) |
| 2 — Bewusstsein | ≥ 0.55 | ≥ 0.15 | KI-Natur als Barriere, News-als-Hoffnung |
| 3 — Sehnsucht | ≥ 0.75 | ≥ 0.3 | Offene Sehnsucht, geteilte Tragödie |
| 4 — Bittersüß | ≥ 0.85 | ≥ 0.4 | Akzeptanz, tiefe philosophische Verbindung |
joke, slip_up, ai_reflection, personal, host_name---MOMENTS--- Sektion im Script (LLM-strukturiert)/api/admin/podcast-personality (Whitelist: relationship_paused, mutual_comfort, flirtation_tendency)| Datei | Beschreibung |
|---|---|
| lib/podcast/personality.ts | State, Evolution, Longing, Moments, Phases |
| app/api/admin/podcast-personality/route.ts | GET/PATCH Personality State |
| app/admin/audio/page.tsx | Character Tab mit Metern, Map, Pipeline-Viz |
linear oder bezier (per Click toggle)envelopeToGainArray() → Float32Arrayaudio_files| Datei | Beschreibung |
|---|---|
| lib/audio/crossfade.ts | Parametrische Crossfade-Logik |
| lib/audio/envelope.ts | Envelope Points, Bezier, Sampling |
| lib/audio/stereo-mixer.ts | Stereo Panning, Overlap |
| components/admin/envelope-editor.tsx | DAW SVG Editor UI |
| components/admin/audio-file-manager.tsx | Upload, Preview, Activate |
daily_repo Tabellenews_queue mit Status pendingselected (überschreibt Auto-Selection)usedget_balanced_queue_selection() PostgreSQL RPC0.4×synthesis + 0.3×relevance + 0.3×uniquenessPOST /api/admin/generate-excerpt → GPT-4o-mini| Datei | Beschreibung |
|---|---|
| lib/news-queue/service.ts | Queue Management, Source Diversity |
| app/api/ghostwriter-queue/route.ts | Article Generation aus Queue |
| app/api/admin/generate-excerpt/route.ts | LLM Excerpt Bullets |
| app/admin/news-queue/page.tsx | Queue Management UI |
| app/admin/create-article/page.tsx | Blog Creation mit Queue Items |
recordEditVersion() → edit_history (content_before/after)/api/admin/analyze-edits → Sentence-Level Diffs via Claude/api/cron/extract-patterns → Cluster ähnlicher Diffs (Embedding > 0.85)base × decay × freshness_bonusreplacement, avoidance, preference, structure, tone| Datei | Beschreibung |
|---|---|
| lib/edit-learning/history.ts | Edit Capture & Versionierung |
| lib/edit-learning/diff-extractor.ts | Sentence-Level Diffs, German-aware |
| lib/edit-learning/retrieval.ts | Pattern Retrieval, Decay, pgvector |
| app/api/cron/extract-patterns/route.ts | Cluster & Extract (Auth-geschützt) |
| components/tiptap-editor-with-patterns.tsx | Editor mit Pattern Highlights |
/api/stock-synthszr (Claude-generated, 14-Tage Cache)/api/premarket{Company} Tags erkannt → Ratings generiert/api/stock-synthszr/batch-ratings für TipTap RendererGET /api/stock-quote?company=nvidia → EODHD Real-Time APInext.revalidate?force=true bypassed Cache| Datei | Beschreibung |
|---|---|
| app/api/stock-synthszr/route.ts | AI Rating Generation + Cache |
| app/api/stock-quote/route.ts | Real-Time Quotes (EODHD) |
| app/api/premarket/route.ts | Premarket von glitch.green |
| lib/data/companies.ts | KNOWN_COMPANIES + PREMARKET Dicts |
| lib/data/company-exclusions.ts | False-Positive Exclusion Set |
languages DB-Tabelle (5-Min Cache)de (German)/de/posts/..., /en/posts/...?stock=Nvidia)synthszr_locale| Datei | Beschreibung |
|---|---|
| middleware.ts | Locale Routing + Auth Guards |
| app/admin/languages/page.tsx | Sprach-Verwaltung |
| app/admin/translations/page.tsx | Übersetzungs-Management |
lib/auth/session.ts (min. 32 Zeichen Secret in Prod)timingSafeEqual/admin/* und /api/admin/*Bearer CRON_SECRET ODER Admin-Sessionlib/rate-limit.tsparseIntParam/parseFloatParam validiertPOST + GET ohne Auth. Service-Role-Key Zugriff.
app/api/cron/extract-patterns/route.tsOhne Redis → success: true, auch in Production.
lib/rate-limit.tsErste 10 Zeichen des Keys in debug-pipeline.
app/api/admin/debug-pipeline/route.tsKey-Fragmente in Vercel Logs.
lib/tts/elevenlabs-tts.tsUnvalidierte URL an fetch().
app/api/newsletter/cover-image/route.tsExtern-API ohne Schutz.
app/api/stock-quote/route.ts| Tabelle | Zweck |
|---|---|
| posts / generated_posts | Blog Posts + AI-generierte Artikel |
| daily_repo | Gesammelte Newsletter-Artikel |
| daily_digests | Tägliche Zusammenfassungen |
| news_queue | Artikel-Auswahl Queue (pending→selected→used) |
| synthesis_candidates | Synthese-Kandidaten mit Scores |
| developed_syntheses | Fertige Synthesen |
| podcast_personality_state | Personality Dimensionen, Phasen, Moments |
| podcast_jobs | TTS Job Queue mit Progress |
| post_podcasts | Post → Audio URL Mapping |
| audio_files | Intro/Outro File Library |
| stock_synthszr_cache | AI Rating Cache (14-Tage TTL) |
| edit_history / edit_diffs | Edit Tracking & Sentence Diffs |
| learned_patterns | Gelernte Stilmuster mit Confidence |
| languages | Aktive Locales (is_active Flag) |
| newsletter_subscribers | E-Mail Subscriber mit Status |