The Unnamed Roads: Production-Grade Agentic Platform on ~€35/month
Overview
Project: The Unnamed Roads
Type: Self-funded, solo-built agentic platform
Running since: 2023
Infrastructure cost: ~€35/month
Scope: 9 live products, 30+ containers, end-to-end from infrastructure to AI orchestration
The Unnamed Roads is my production lab — not a side project. It runs continuously, handles real workloads, and has delivered 9 live products across hockey analytics, content operations, and automation tooling. Built and operated solo, evenings and weekends, while working full-time.
Architecture
The platform is built in three layers: orchestration, tooling, and data. Everything is self-hosted on a Hetzner VPS managed through Coolify, with Cloudflare in front.
Orchestration — LangGraph 24/7
A LangGraph worker runs continuously, polling a Paperclip kanban board for tasks and routing them to five specialized agents:
| Agent | Responsibility |
|---|---|
| Developer | Code generation, PRs, GitHub operations |
| Data Engineer | Pipeline logic, scraper config, DuckDB queries |
| QA | Test coverage, review, validation |
| Copy | Blog posts, page content, SEO copy |
| CMO | Distribution strategy, IndexNow submission, newsletter |
Each agent has scoped tools — only what the role needs. Heartbeat schedules keep agents accountable; missed heartbeats surface in the monitoring layer.
Model Routing — LiteLLM
A LiteLLM router sits in front of eight models with auto-fallback, Redis caching, and per-model budget alerts:
- Claude Sonnet 4.6 / Haiku 4.5 (primary reasoning and copy)
- Gemini 2.5 Pro / Flash (embeddings and long-context tasks)
- Cerebras Qwen3 235B (fast batch inference)
- Groq Llama 3.3 (low-latency tool-calling)
- DeepSeek V3 (code-heavy tasks)
- Mistral (European compliance fallback)
The router selects models based on task type, latency budget, and cost. No single model handles everything.
Tool Access — MCPJungle
MCPJungle is a self-hosted MCP gateway exposing 12+ integrations to agents at runtime:
GitHub · Paperclip · Cloudflare · Hetzner · n8n · PostgreSQL · Resend · Bitwarden · Netlify · Microsoft Clarity · Crawlab · custom internal tools
Agents call tools through MCP primitives. The gateway handles auth, rate limiting, and audit logging.
Memory & Execution
- pgvector: 768-dimension HNSW index with Gemini embeddings. Agents write observations; future runs recall relevant context.
- Sandboxed execution: Python, Node, and Bash with
rlimitsandcap-drop. Agents can run code without filesystem or network access to production systems.
Observability — Langfuse v3
Every LLM call is traced: cost, latency, plan steps, tool calls, agent heartbeats. Cost alerts fire when a run exceeds budget. I can replay any agent session from trace ID.
Governance
Nothing merges or publishes without a human decision.
A Telegram approval-webhook intercepts every agent action that touches production — code merge, blog post publish, infrastructure change. I approve or reject from my phone. The agent either proceeds or halts and logs the rejection.
This makes the system safe to leave running overnight, and keeps me accountable for what goes live.
Data Engineering
Scraper Fleet — Crawlab
Eight production scrapers run on schedule in Crawlab, targeting hockey data sources across multiple leagues:
EP Hockey · IIHF · MoneyPuck · NHL play-by-play · Liiga · SHL · Metal Ligaen · Puckpedia · MediaMonitor
Raw data lands in Hetzner Object Storage. DuckDB and MotherDuck provide the query layer — fast, cheap, no warehouse needed.
Automation — n8n
33 n8n workflows handle the repetitive work:
- SEO pipelines: keyword research → content generation → publish → IndexNow submission
- Analytics reporting: weekly digest from Umami, Clarity, and Search Console
- Newsletter dispatch: subscriber management via Listmonk, triggered on publish
- Contact handling: form routing, CRM update, Slack notification
What It Has Produced
- 9 live products including The Hockey Analytics, this site, and MCPJungle
- 33 n8n workflows in active production
- 8+ scrapers with multi-league hockey data updated daily
- Dozens of blog posts written, reviewed, and published by agents with human sign-off
- Full agentic stack documentation at emilingemarkarlsson.com/stack
Stack
Python · TypeScript · LangGraph · LiteLLM · MCP · Langfuse · pgvector · Docker · Coolify · Hetzner · Cloudflare · PostgreSQL · DuckDB · MotherDuck · Crawlab · n8n · Redis · Paperclip · Astro · GitHub Actions
Want to understand how this works in detail? See the full architecture diagram or get in touch.
Interested in similar projects?
I help companies build modern data solutions and web applications. Let's discuss your next project!
Contact Me