Skip to content
ENGINEERING SHOWCASE · LIVE SYSTEM

One server. Infinite leverage.

A mostly-autonomous AI newsletter pipeline, running on efficient, self-hosted infrastructure. Video (Shorts, long-form, Reels) is in development, not live yet. Here's every layer of the stack.

3
issues / week
9
pipeline stages
Architecture

The pipeline, end to end.

Every issue goes through nine stages, mostly scripts with at most one model call each. A human reviews the Substack draft and presses send.

01 RSS ingest
→
02 Thesis select
→
03 Evidence gather
→
04 Sonnet write
→
05 Hallucination scan
→
06 Fact validate
→
07 Independent verify
→
08 Consensus check
→
09 Substack draft → Human send

Overfitted

Mon / Wed / Fri · draft built 10:00 IST
Sources 15 RSS feeds, with a Camofox headless-browser fallback for blocked/failed feeds
Sections 9-stage pipeline: source-ingestion → thesis-selection → evidence-gathering → writing → hallucination-scan → fact-validation → independent-verify → consensus-check → publish (draft)
Fact check Sentence-level pair checks, a web-searching validator, an independent re-research stage and a cross-family consensus judge
Output Substack draft, reviewed by hand before it goes out

The Long Game

Sundays (currently paused); essays so far published by hand
Sources Shares the same RSS feed pool, thesis-driven rather than news-driven
Sections Single thesis essay · long-form
Fact check Older agent-driven pipeline, not yet moved to the newer Overfitted stages
Output overfitted.tech/long-game/ + Medium
AI Models

Right model. Right stage. Right cost.

Model selection is a deliberate engineering decision at every stage, not just "use the best model for everything."

STAGES 2 + 4 Thesis + writing

Claude Sonnet 5.5

Anthropic API, direct. Picks the thesis and writes every factual sentence with a tag pointing back to a recorded fact. Quotes are pasted in by code, not retyped by the model. Every other gate runs on a different model family.

STAGES 5-7 Checking (stages 5, 6, 7)

DeepSeek, Zhipu GLM, gpt-oss (OpenRouter)

Non-Anthropic models check the writer: sentence-by-sentence pair checks, a web-searching validator, and an independent verifier that re-researches the claims from scratch.

STAGES 3 + 8 Consensus check + evidence brief

Gemini 3.8 Flash (OpenRouter)

A judge from a different family than the writer returns pass or fail on the finished draft. A fail blocks the run. GPT-5.4 is the fallback judge.

STAGE 2 Semantic Dedup

sentence-transformers

all-MiniLM-L6-v2 embeds every published issue in Qdrant. A chosen thesis scoring above 0.85 cosine similarity to a past issue is re-picked once, then blocked.

Runtime

Scheduled via Hermes cron.

Both newsletter pipelines run on Hermes's own cron scheduler, plus an always-on personal-assistant agent.

ACTIVE
overfitted-new-issue
Mon/Wed/Fri newsletter pipeline
Hermes cron
PAUSED
long-game-new-issue
Sunday essay pipeline (currently paused)
Hermes cron
ACTIVE
Munna
AI personal-assistant agent, runs on Hermes Agent
Always on
Infrastructure

Hostinger KVM2. Ubuntu. Nginx. That's it.

No Kubernetes. No multi-region. No managed services. A single VPS running lean.

OS Ubuntu 24.04 LTS
Web Server Nginx
Language Python (shared venv)
Vector DB Qdrant (native binary)
Job Scheduler Hermes cron
Notifications Telegram Bot API
Uptime 24 / 7, minimal human intervention

Design decisions

  • Shared Python venv for both newsletter pipelines: single dependency surface
  • All API credentials in one file, symlinked across profiles: one edit on renewal
  • Qdrant runs as a native binary under a user systemd service: no container overhead
  • Hermes cron drives both pipelines: no external orchestration needed
  • Telegram for alerts: one summary per run, plus an immediate message when a stage blocks
Integrations

A handful of external APIs. Mostly automated.

The pipeline runs unattended end to end; a human reviews the draft before it publishes to Substack.

Telegram Bot API
Run summaries and block alerts to the owner
OpenRouter API
Checker models (DeepSeek, GLM, gpt-oss) and the Gemini consensus judge
Anthropic API
Claude Sonnet 5.5: thesis selection and the writer
Pexels API
Stock imagery for in-development video work
Gumroad + Dodo
Digital product sales: checkout and fulfillment handled natively by each platform
Frontend

Static. Fast. Intentionally cinematic.

Astro generates static HTML at build time. React only hydrates where interactivity is needed. Zero unnecessary JavaScript in the critical path.

Astro 6
Static site generator, island architecture
React 19
Interactive components, 3D scene hydration
Three.js / R3F
3D rendering, custom shaders
GSAP + ScrollTrigger
Scroll-driven animations, text reveals, counters
Lenis
Smooth scroll, driven by GSAP ticker (single RAF)
Tailwind CSS v4
Utility-first styling, zero runtime
TypeScript
Type-safe throughout
Pillow
Thumbnail generation: 1280×720 + 1080×1920 per video
MoviePy
Video assembly, in development, not live yet
Video Pipeline: In Development

Not live yet.

YouTube Shorts, Instagram Reels, and an automated thumbnail generator are being built (rendering tooling, TTS, and asset pipeline exist), but there's no live upload integration yet. Nothing below is currently shipping.

The Economics

Efficient, self-hosted infrastructure.
Media empire included.

VPS (Hostinger KVM2) Low-cost, single server
Models (Claude writer + cheaper checkers) Hard cap of $1.00 per issue
Qdrant, Telegram, Edge TTS Free / self-hosted

This is not a demo. This is a live production system. Every newsletter in your inbox was written, fact-checked, and delivered by this stack.