The infrastructure we ship on.
An opinionated, boring, production-grade stack. We pick tools that survive without supervision and we don't add a layer unless there's a reason to.
Tools by layer
| Layer | Tools |
|---|---|
| Orchestration | n8n (self-hosted) |
| LLMs | Google Gemini 2.5 Flash · Anthropic Claude Sonnet |
| Embeddings | gemini-embedding-001 (3072-dim) |
| Storage | Supabase — Postgres + pgvector |
| Edge / Deploy | Cloudflare Pages + Workers |
| Scraping | Python — requests, playwright |
| OCR / Vision | Gemini 2.5 Flash Vision API |
| IoT / Hardware | ESP32, MQTT |
| Outreach APIs | Apollo.io · Unipile · Instantly · Smartlead |
| Monitoring | Telegram bots · n8n error webhooks |
Why this stack
n8n is self-hosted because we want full control over credentials, scheduling, and the right to fork a node when its maintainer disappears. Supabase + pgvector replaces three tools at once — auth, Postgres, and a vector store — at one price point. Cloudflare Pages and Workers give us a global edge with no build pipeline and a generous free tier that scales linearly when it doesn't.
Gemini is the default for OCR, embeddings, and high-volume inference because of price and a usable Vision API. Claude is the default when reasoning quality matters more than throughput.
Philosophy
We build systems, not scripts. Every workflow we ship is documented, versioned, and designed to run without human intervention. If it needs babysitting, we didn't finish the job.
What we won't add
— Vector DBs that aren't pgvector (we don't need a separate service)
— LangChain wrappers around things that are 20 lines of code
— Vendor agent platforms — we build the orchestration ourselves
— Frontend frameworks for marketing pages (this site is vanilla HTML)
Want this stack pointed at your problem?
Tell us what's eating your week.
Send us your workflow problem →