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.
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.
Overfitted
Mon / Wed / Fri · draft built 10:00 ISTThe Long Game
Sundays (currently paused); essays so far published by handRight model. Right stage. Right cost.
Model selection is a deliberate engineering decision at every stage, not just "use the best model for everything."
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.
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.
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.
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.
Scheduled via Hermes cron.
Both newsletter pipelines run on Hermes's own cron scheduler, plus an always-on personal-assistant agent.
Hostinger KVM2. Ubuntu. Nginx. That's it.
No Kubernetes. No multi-region. No managed services. A single VPS running lean.
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
A handful of external APIs. Mostly automated.
The pipeline runs unattended end to end; a human reviews the draft before it publishes to Substack.
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.
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.
Efficient, self-hosted infrastructure.
Media empire included.
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.