Commit Graph

7 Commits

Author SHA1 Message Date
Dotty Dotter
c146d7ddb2 Fix: Podcast-Selector im Hauptbereich statt nur im Seitenpanel
Der Selector war vorher nur im 400px-Panel rechts sichtbar — auf Mobile
oder bei schmalem Fenster quasi unsichtbar. Jetzt wird er zentriert im
Mindmap-Bereich angezeigt, bis ein Podcast gewählt wird.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 10:39:10 +02:00
Dotty Dotter
78d66bef21 #12 Wort-Highlighting Frontend, #14 Leerstellen-Detektor, #15 Narrative Shift,
#13/#16/#17/#18 Qwen-Analyse-Scripts

- Frontend: Wort-Level-Highlighting im Transkript — jedes Wort als <span> mit
  Timestamp, Karaoke-Style Sync bei Wiedergabe, CSS word-active/word-spoken
- API: /api/.../words Endpoint liefert Wort-Timestamps
- #14 detect_gaps.py: K-Means-Clustering über 3727 Embeddings, identifiziert
  Leerstellen (Themen die in einem Podcast fehlen). Ergebnis: gaps_analysis.json
- #15 detect_narrative_shift.py: Embedding-Drift pro Thema über Episodenfolge,
  erkennt Framing-Wechsel. Ergebnis: narrative_shifts.json
- #13 analyse_arguments.py: Qwen klassifiziert logische Relationen (erweitert,
  widerspricht, belegt, relativiert) zwischen semantisch ähnlichen Absätzen
- #16 extract_claims.py: Qwen extrahiert prüfbare Behauptungen (Zahlen, Statistiken)
- #17 extract_questions.py: Qwen extrahiert und klassifiziert Fragen
- #18 curate_debates.py: Qwen kuratiert Cross-Podcast-Gegenüberstellungen
- run_all_qwen.sh: Sequentielle Pipeline für alle Qwen-Tasks (vermeidet DB-Locks)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 22:29:41 +02:00
Dotty Dotter
e678f75ee1 #8 Multi-Podcast-Dashboard, #9 PWA, #10 Cross-Podcast-Links, #12 Wort-Timestamps
- Backend: /api/compare Endpoint für Podcast-Vergleich (Stats, gemeinsame Topics,
  Top-Querverbindungen), /api/.../words Endpoint für Wort-Timestamps
- Frontend: Podcast-Vergleichsansicht mit Statistiken und Cross-Links,
  Cross-Podcast-Suche-Toggle, semantische Links im Transkript (lazy-loaded),
  Podcast-Switcher mit Zurück-Navigation
- PWA: manifest.json, Service Worker (stale-while-revalidate für Assets,
  network-first für API, cache-on-success für Audio), Icons
- Scripts: transcribe_words.py (mlx-whisper Batch-Transkription mit Wort-Timestamps),
  import_words.py (Wort-Timestamps in DB importieren)
- Dockerfile: PWA-Assets in Container kopieren

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 20:53:06 +02:00
Dotty Dotter
b0649cea49 Phase 1+2: FastAPI-Backend, SQLite, Embeddings, Semantische Suche
Phase 1:
- FastAPI-Backend (backend/app.py) mit REST-API
- SQLite-Datenbank für Podcasts, Episoden, Absätze, Zitate
- Auto-Import aus mindmap_data.json + srt_index.json beim Start
- Webapp als SPA: API-first mit Static-File-Fallback
- Audio als gemountetes Volume statt im Docker-Image
- Docker-Compose mit Traefik-Labels

Phase 2:
- Qwen text-embedding-v3 via DashScope (1024-dim Vektoren)
- Embedding aller Transkript-Absätze (728 für NEU DENKEN)
- Semantische Suche: /api/semantic-search?q=...
- Similarity-API: /api/similar/{podcast}/{episode}/{paragraph}
- Cosine-Similarity auf normalisierten Vektoren, <100ms
- Findet thematisch verwandte Stellen über Episoden hinweg,
  auch bei komplett unterschiedlicher Wortwahl

Vorbereitet für Multi-Podcast (#10): Datenstruktur unterstützt
mehrere Podcasts, Cross-Podcast-Similarity ist ein Parameter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 10:24:53 +02:00
Dotty Dotter
8d7c16f8f6 #2 Obsidian-Links, #6 Soundbite-Export, #7 Timeline
- #2: Topic-Tags pro Transkript-Absatz (27 Themen-Taxonomie),
  Backlinks zu verwandten Stellen in anderen Episoden.
  Neues Script: scripts/index_topics.py
- #6: Audio-Clip-Export direkt im Browser (Web Audio API → WAV).
  Kein serverseitiges ffmpeg nötig.
- #7: Timeline-Ansicht als Alternative zur Mindmap.
  Staffeln → Episoden → Zitate auf Zeitachse.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 08:03:12 +02:00
Dotty Dotter
67bf9ec7b1 Webapp v2: UX-sicheres Audio, Transkript-Mitlesen, Volltextsuche
- #3: Audio startet nicht mehr durch Card-Klick. Separater Play-Button
  pro Zitat, Audio-Bar mit Play/Pause. Bewusste Aktion statt Versehen.
- #4: Navigation durch Themes/Episoden stoppt laufendes Audio nicht.
  Audio-State ist komplett vom Panel-State getrennt.
- #1: Transkript-Ansicht mit synchronem Mitlesen. Aktiver Absatz wird
  hervorgehoben und auto-gescrollt. Klick auf Absatz springt im Audio.
- #5: Suchfeld im Header durchsucht alle Transkripte und Zitate.
  Treffer mit Kontext, Klick öffnet Transkript an der Stelle.

AudioPlayer als eigenständiges Objekt, TranscriptView und Search
als separate Module. Alle dynamisch aus mindmap_data.json + srt_index.json.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 03:01:59 +02:00
Dotty Dotter
e6164e6696 Initial commit: podcast-mindmap tool
Generic tool for building interactive mindmap visualizations from podcast transcripts.
Includes: audio download, SRT conversion, quote-timestamp matching, D3.js mindmap webapp.
Configurable via project.yaml — no podcast-specific content.

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