Case Study
Content Radar
Full-stack web app that discovers social-media videos with misleading nutrition claims across YouTube, TikTok and Instagram, ranks them with a transparent scoring engine and prepares reactions - built solo in five days as a coding challenge for content creator Christian Wolf.
Context
Content creator Christian Wolf ran a coding challenge with two deliverables: a German e-book and a web app that finds reaction candidates - social-media videos spreading false or misleading claims about nutrition, fitness and health. I built Content Radar: discovery, transparent scoring, evidence research and reaction preparation in one reviewable inbox. Built solo in five days (58 commits, ~17,700 lines of TypeScript/TSX in the app), deployed on Vercel behind a password gate - the repo and instance stay private.
The problem
“Which video should I react to next?” is a prioritization problem with real constraints: reach and engagement matter, but so do how checkable the claim is, how well it fits the channel, and whether the topic is medically sensitive. A naive “sort by views” wastes the creator’s time; a black-box AI ranking can’t be trusted, corrected or explained. And the tool had to keep filling itself: new candidates should arrive daily without manual searching.
How I built it
- A deterministic scoring engine instead of an LLM ranking: the final score is a weighted sum of eight sub-scores (reach, engagement, topic fit, falsehood/checkability, claim clarity, response potential, creator recognition, freshness) minus explicit penalties (duplicate, uncertainty, off-topic, medical risk, low context), clamped to 0-100 and mapped to buckets from Hot to Ignore. Every candidate renders the full breakdown with plain-language reasons - the screenshot above shows a 94.2 − 10 = 84 calculation exactly as the user sees it. The engine is side-effect-free and covered by 22 unit tests (31 tests in the repo overall).
- Guardrails over automation: medically sensitive claims are never auto-rejected - they get a risk penalty and a mandatory manual-review flag. Creator history is deliberately a weak signal (5% weight, Bayesian-smoothed), so no channel gets pre-judged by its past.
- Multi-platform discovery: YouTube via the official Data API (metadata, transcripts, top comments), TikTok and Instagram via Apify-actor-based scraping, plus manual entry for anything else. A daily cron run ingests new candidates automatically; a cheap keyword topic gate filters junk before any AI or database cost is spent.
- Evidence, not verdicts: one click searches Europe PMC and OpenAlex (with German-to-English concept mapping), stores the sources with credibility levels and shows summaries and limitations. The app explicitly does not decide truth - it retrieves evidence for a human review.
- AI as suggestion, never as judge: Gemini pre-fills claim and scoring fields from title, transcript and comments, plans evidence queries and writes cautious German source summaries - always editable, with per-run budget caps and graceful degradation when no API key or quota is available. Accepted/rejected decisions flow back as few-shot examples into later suggestions (prompt calibration, not model training).
- Stack: Next.js 16 (App Router) + TypeScript 5, Tailwind CSS 4 with Radix-based components, Prisma 7 on Neon Postgres, Vitest, deployed on Vercel with a daily ingestion cron. Eleven Prisma models, and every decision (review, export, evidence search) lands in an audit log.
- The e-book became a product feature: the challenge’s second deliverable
- a ~34-page German guide - started as a modular LaTeX design system with four themed variants, then got ported to Typst and turned into an in-app e-book studio: chapter editor, four design presets with editable tokens, 11 font families, three page formats, live SVG preview and PDF export - all compiled in the browser via Typst WASM in a web worker, with edits and designs persisted to the database. An asset pipeline extracts video frames (ffmpeg scene detection + sharpness scoring), ranks them with Gemini Vision and generates the final illustrations.
Outcome
A working, deployed MVP: prioritized inbox, candidate details with score breakdown and sources panel, queue and saved lists, creator overview with cross-platform linking, settings with AI budgets, reaction-prep export - and a complete e-book production studio. Honest scope: it’s an internal tool with a password gate, not a polished SaaS - heuristic duplicate detection, a keyword-based topic gate and scraper-based TikTok/Instagram coverage are deliberate MVP trade-offs, each with a documented upgrade path.
What I took away
Transparent beats clever: making every ranking explainable turns users into calibrators instead of skeptics. Guardrails are a design feature, not a limitation - “the app never decides medical truth” was the most important architectural sentence in the project. And compiling Typst to PDF inside the browser taught me more about WASM, web workers and font pipelines than any tutorial could.