gustav.projects()

Projects

Production AI systems, data pipelines, and live demos — Python at the core, LLMs as the runtime.

The Cold File — Autonomous AI True-Crime Podcast Channel — preview ↗ watch on youtube

The Cold File — Autonomous AI True-Crime Podcast Channel

Production Python backend that fully operates a fictional dual-host true-crime podcast on YouTube — @The_Cold_File — an autonomous AI system where Claude wears multiple intelligent hats — writer, LLM-as-judge quality gate, casting director, community manager — across a single 30,000-line pipeline.

Read more
The show is a fictional dual-host podcast. Every case is AI-invented — no real names, locations, or events — which eliminates defamation, YouTube-strike, and family-complaint risk. Episodes run 9,000–11,000 words / 55–65 minutes of finished podcast audio rendered as YouTube video. The conversation is between two hosts: Dr. Christy Hart (criminal psychologist, always present) and a rotating male co-host — either Jake Morgan (investigative journalist, theory-heavy episodes) or Marcus Reed (retired homicide detective, investigation-heavy episodes). The male host is chosen deterministically via hash(case_title) % 2 using the same formula in both the script-gen prompt and the TTS layer, so the persona named in the dialogue always matches the voice that gets played.

Claude is not just the writer. Opus generates concepts and full dual-host scripts across 14 case types (MURDER_MYSTERY, COLD_CASE, SERIAL_KILLER, KIDNAPPING, CULT, WRONGFUL_CONVICTION, FINANCIAL_CRIME, HEIST, STALKER_TO_MURDER, CORPORATE_CONSPIRACY, FAMILY_MURDER, …) and 6 structural variants (linear chronology, case-file walkthrough, retrospective, whodunit, reverse-chronology, parallel investigations) — both rotated least-recently-used to keep the catalog fresh. A separate Sonnet pass is the quality gate (LLM-as-judge): it scores N parallel candidate concepts against a weighted rubric (hook 35%, retention 30%, etc.) — only the winner enters production, losers are logged for prompt-tuning. Sonnet then plays casting director: it tunes Azure MultiTalker inference parameters (temperature/top_p/cfg_scale) per host to match the case's emotional register — measured clinical vs. urgent vs. retrospective. Claude also authors every per-scene image prompt, gated through case-file atmosphere maps and safety clauses (no recognizable faces, no celebrities, documentary framing only) — fictional cases must never produce imagery that resembles real victims or perpetrators.

Image generation has a two-tier fallback. Primary path is Azure Flux 2 Pro; when Flux's content filter rejects a prompt (common on crime-scene imagery), the pipeline retries the original unmutated prompt via Nano Banana (Gemini 2.5 Flash Image through Fal.ai) which has a different filter profile — so a rejected scene still ships an image instead of falling back to a generic placeholder.

Real-world signal in, abstracted prompt fuel out. A topical-signal miner pulls Google Trends + NewsAPI headlines from the true-crime space, then Claude distills them into structural beat shapes (e.g. "DNA match decades later", "convicted-killer-dies cases reopen") — never leaking real case names into the fictional show. Raw headlines stay in raw_examples for audit only. A title miner analyzes competitor channels for winning title structures, and a YouTube Analytics feedback loop produces weekly insights that feed back into concept generation.

13+ Postgres tables track everything: stories, concept_candidates, cold_open_attempts, video_performance, weekly_insights, title_patterns, topical_signals, comment_interactions, schedule, plus dedup history that prevents repeating case concepts or titles. FFmpeg compiles 1080p video with CASE FILE / COLD CASE / UNSOLVED / CASE CLOSED thumbnail badges derived from the case's resolution field; YouTube Data API v3 handles uploads, Shorts trailers, and chapter markers. Runs hourly on Railway.

Claude also runs the comment section. A Haiku-powered community engagement loop scans every uploaded video on two passes — a fast pass over the newest 15 videos every cycle to catch fresh comments, and a deep pass that rotates through the full back catalog so a comment on video #200 still gets answered within a day or two. Haiku writes the actual replies using a rotation of tone presets and pulls the original case context from Postgres so replies stay on-topic. Questions that need real case knowledge escalate dynamically to Sonnet — model routing decided per comment. Daily YouTube API quota is tracked in DB and the loop self-throttles when it hits the limit.

Repository is private — contact guch79@gmail.com for access or commercial options.
Python Claude (Opus/Sonnet/Haiku) Anthropic SDK LLM-as-judge Azure Flux Nano Banana (Gemini Image) Azure MultiTalker TTS FFmpeg PostgreSQL YouTube API NewsAPI Railway
Private repo Live Demo
AI-Powered IT Support Agent with RAG — preview ↗ open live demo

AI-Powered IT Support AgentRAG

Production RAG system positioned as an internal IT support agent. Multilingual (Danish/English) answers grounded in customer-uploaded documentation, with a read-only backend dashboard customers can inspect end-to-end.

Read more
Architecture. Async Quart backend with a local Qdrant vector store and fastembed ONNX embeddings (multilingual incl. Danish; no torch dependency, stays well under 200MB resident). Generation runs on Google gemini-2.5-flash via the google-genai SDK, with automatic fallback to gemini-2.5-flash-lite.

Provider-agnostic — GDPR-ready by configuration. The embedding and LLM layers are pluggable: fastembed (local) and Gemini by default, but both can be repointed to Azure OpenAI in an EU region. Because Azure OpenAI runs under Microsoft's EU data-processing terms, the same codebase becomes a GDPR-compliant, EU-data-residency deployment with no architectural changes.

Cost guardrails for a public demo. Per-IP rate limits (per minute and per day), per-session message caps, and a persistent daily token budget written to disk so a restart loop cannot bypass it.

Read-only backend dashboard at /backend. A lockable view customers can open without touching anything: model and region configuration sanitized through an allowlist so no key can leak, plus live usage metrics and rate-limit/budget status. A demo-lock flag enforces 403 on every mutation endpoint.

Repository is private — contact guch79@gmail.com for access or commercial options.
Python Quart Gemini 2.5 Flash google-genai Qdrant fastembed (ONNX) RAG Azure OpenAI (optional) Railway
Private repo Live Demo
Document Intelligence Pipeline — preview ↗ open live demo

Document Intelligence Pipeline

Local document processing pipeline for PDF, DOCX and scanned images: OCR (Tesseract), text extraction, table detection & extraction, key-value parsing, entity recognition (spaCy), layout analysis and summarization.

Read more
Results are produced as structured JSON suitable for downstream ingestion (data lakes, BI, search indexes). Repository is private — contact guch79@gmail.com for access and commercial options.
Python Quart OCR Tesseract spaCy PDF processing NLP
Private repo Live Demo

Apology-as-a-Service (MCP Server)

A live Model Context Protocol (MCP) server that provides context-aware crisis communication for AI agents.

Read more
Test it live right here with the 'Generate Live Apology' button, or download the config to connect your own agent. Features multiple severity levels, styles (including Haiku), and SSE support.
Python MCP Protocol SSE Docker Async FastMCP
View Code

ETL Data Pipeline - Dataverse to SQL Server

Complete ETL pipeline for extracting data from Microsoft Dataverse, transforming with business logic, and loading to SQL Server.

Read more
Includes fake data generation with Faker for testing before production deployment. Features parallel processing, connection pooling, and circuit breakers.
Python Pandas SQLAlchemy Dataverse Faker
Professional Portfolio & CV Generator — preview ↗ view on github

Professional Portfolio & CV Generator

Fully asynchronous Quart web application with auto-generated PDF CV from dynamic content.

Read more
Features intelligent HTML-to-PDF conversion with structured data extraction, professional formatting, and clickable links. Built with modern async Python patterns.
Quart Uvicorn FPDF2 Async Python Jinja2