SYSTEMS NOMINAL

Engineering theFuture of FinTech

Technical deep dives into the architecture of Vibe and Mentoring. Exploring Bun, Elysia.js, and the art of production systems.

Data

I Mined 47,000 Businesses from OpenStreetMap and Scored the Ones That Need a Website: Building an Automated Lead Gen Pipeline

How the osm-vibe-all pipeline parses 13GB of PBF data from four European countries, crawls websites with Puppeteer, scores web presence quality, and identifies businesses ripe for outreach — all from open-source geographic data.

February 15, 2026 13 min read
Read Story →
Security

Stop Exposing Your API Keys: How I Built a Five-Layer AI Proxy That Lets Users Call LLMs Without the Security Nightmare

A deep dive into Vibe's AI proxy architecture — server-side key management for Gemini and OpenAI, per-user credit deduction, rate limiting, provider abstraction, and why your frontend should never touch an LLM directly.

February 14, 2026 13 min read
Read Story →
Testing

BDD Is Not Dead: How Gherkin Scenarios Turned My Micro-SaaS Test Suite Into a Living Contract

How Vibe uses Cucumber.js with Gherkin scenarios and Playwright to describe and execute full user journeys — create a vibe, purchase credits, approve payments — with tests that non-developers can read.

February 13, 2026 14 min read
Read Story →
Runtime

14 Test Files, Zero Flaky Tests: How I Test Every API Domain in Elysia.js Without Jest or Vitest

Why Bun's native test runner replaced my entire testing stack — and how 14 integration test files with real databases, mock modules, and Faker-powered factories give me the confidence to deploy solo.

February 12, 2026 10 min read
Read Story →
Runtime

From 1.2GB to 89MB: The Docker Multi-Stage Build That Changed How I Ship Bun Applications

How I reduced production Docker images by 93% using multi-stage builds, Alpine base images, non-root users, entrypoint migrations, and every optimization pattern I've developed running six services on one VPS.

February 11, 2026 9 min read
Read Story →
DevOps

I Run 6 Production Services on a Single €30/Month Server. Here's Why I Don't Need Kubernetes.

How one Hetzner VPS with Coolify and Traefik runs two SaaS platforms, an automation engine, analytics with ClickHouse, image processing, and a dev environment — at 10% of the cloud cost.

February 10, 2026 9 min read
Read Story →
Architecture

I Built Two Stripe Integrations in the Same Codebase. They Share Almost Zero Billing Code.

Why per-session payments and prepaid credit systems demand completely different architectures — even when they use the same Stripe account, the same API keys, and the same developer.

February 9, 2026 9 min read
Read Story →
Billing

85/15 Almost Killed My Marketplace — The Hidden Economics of Two-Tier Billing

How Vibe implements an 85/15 revenue split with Stripe Connect, referral bonuses, minimum payout thresholds, and why getting marketplace economics wrong kills platforms faster than bad code.

February 8, 2026 11 min read
Read Story →
Runtime

We Run Cron Jobs Inside the Bun Server Process (And You Should Too)

How we replaced system cron and external job runners with an in-process scheduler in Bun — featuring drift correction, job deduplication, error isolation, and why fewer moving parts means fewer 3 AM pages.

February 7, 2026 18 min read
Read Story →
Architecture

Stop Deducting Credits Immediately — Your Billing System Is a Ticking Time Bomb

Why naive credit deduction causes race conditions, phantom charges, and support nightmares — and how the hold-confirm-release pattern with automatic TTL expiration eliminates an entire category of billing bugs.

February 6, 2026 10 min read
Read Story →
Frontend

480 Unique OG Images at Build Time: How We Made Every Page Shareable with Satori and resvg

How we generate dynamic Open Graph images for 40 locales and 12 routes at SSG build time using Satori and resvg-js — creating unique, branded social cards without a single runtime render.

February 5, 2026 19 min read
Read Story →
Architecture

40 Languages, 400KB Bundle — Why I Refuse to Ship Translations in JavaScript

How dynamic translation loading with client-side caching serves 40 locales without bloating the SPA bundle, keeping the React app under 400KB while supporting instant language switching.

February 4, 2026 10 min read
Read Story →
Runtime

We Built Our Own Hot Reload Because Bun Doesn't Have One (And It's Better)

How we built a custom file watcher for development hot-rebuild in Bun — with debouncing, selective bundle rebuilds, cache invalidation, and why rolling your own DX tooling is sometimes the right call.

February 3, 2026 18 min read
Read Story →
Frontend

480 Pages, 40 Locales, Zero Frameworks — How I Beat Next.js at International SEO

How we bake hreflang tags, Schema.org structured data, and locale-specific Open Graph metadata into 480 static HTML pages at build time — without any client-side i18n framework or SSR.

February 2, 2026 9 min read
Read Story →
Frontend

I Killed the Loading Spinner — Without Next.js, Without SSR, Without Any Framework

How a 6-line data injection pattern eliminates the loading spinner from React SPAs by injecting server data into HTML and pre-populating React Query's cache before the first render.

February 1, 2026 10 min read
Read Story →
Architecture

Your SSE Connections Are Lying to You — Here's What Happens When Users Reconnect

Most Server-Sent Events implementations have a silent reliability hole. The event replay pattern guarantees reconnecting clients never miss a billing update, payment approval, or session state change.

January 31, 2026 11 min read
Read Story →
Architecture

I Made Billing Invisible. Now My Developers Ship Paid Features Without Writing a Single Line of Payment Code.

How Vibe's billingGuard middleware intercepts paid API calls, pushes approval requests via SSE, auto-renders payment modals, and settles transactions — without feature developers touching payment logic.

January 30, 2026 9 min read
Read Story →
Architecture

Our Mentoring Platform Was Bleeding $17 Per Overrun Session. Then I Built a Timer That Kills Zoom Calls.

How I built an in-memory billing engine that broadcasts millisecond-accurate charges via Server-Sent Events, escalates balance warnings, and automatically terminates Zoom meetings when credits run out.

January 29, 2026 9 min read
Read Story →
Framework

I Deleted Every Password From My Database. Here's Why My Users Are Safer Than Yours.

How I built passwordless authentication with magic link tokens, GitHub/Google/LinkedIn OAuth via Arctic with PKCE, JWT httpOnly cookies, and Elysia.js middleware — and why the password era needs to end.

January 28, 2026 10 min read
Read Story →
Architecture

HMAC-Signed Vibe-to-Vibe Calls: How We Stopped Micro-Apps from Impersonating Each Other

Inside the HMAC-signed request protocol that secures inter-app communication on the Vibe platform — where every micro-app runs in its own Cloudflare Worker sandbox and no one trusts anyone.

January 27, 2026 20 min read
Read Story →
Runtime

I Processed 1.2 Billion Map Records on a $7/Month Server. The Lead Database Industry Doesn't Want You to Know This.

How I built a Bun-powered pipeline that downloads 13GB of OpenStreetMap data, extracts 7.4 million businesses, crawls their websites, and produces over one million qualified leads — all on a single Hetzner VPS.

January 26, 2026 9 min read
Read Story →
Architecture

Layered Authorization in Elysia.js: Why Your Middleware Is Doing Too Much

How we built composable authorization layers using Elysia's derive() and scoped middleware — replacing a monolithic auth check with elegant derive chains that narrow permissions at every step.

January 25, 2026 18 min read
Read Story →
Architecture

Your SaaS Handles Money With a Balance Column. That's Why Your Numbers Don't Add Up at 2 AM.

How I built NostroLedger — a double-entry accounting system inside PostgreSQL that tracks every cent flowing through a real-time mentoring platform, and why 700-year-old bookkeeping principles will save your startup.

January 24, 2026 9 min read
Read Story →
Runtime

I Deleted a 200MB Rust Binary From My Docker Image. My Deploys Have Never Been the Same.

How migrating from Prisma 5's Rust query engine to Prisma 7's pure-JavaScript driver adapter cut our Docker image by 42%, slashed cold starts by 68%, and gave us back control of our connection pool.

January 23, 2026 8 min read
Read Story →
Architecture

Every User Gets Their Own Database. The Billing Architecture That Shouldn't Work — But Outperforms Everything.

How Vibe gives every user their own bank.sqlite for credits, holds, and transactions — the hold/confirm/release pattern, 5-minute TTL self-healing, and why database-per-user scales better than you think.

January 22, 2026 11 min read
Read Story →
Runtime

Your Users Download 1.5MB of JavaScript to See a Landing Page. We Fixed It With an If Statement.

How we split a React SPA into public (400KB), auth (150KB), and private (1.5MB) bundles — selected server-side by URL path, built with Bun, zero framework required.

January 21, 2026 9 min read
Read Story →
Architecture

Our Entire SaaS Is One 13,870-Line File. We Tried Splitting It. We Put It Back.

The case for keeping a micro-SaaS as a single Elysia.js monolith — where the seams are, why we reverted the extraction, and why premature decomposition is the root of all evil.

January 20, 2026 9 min read
Read Story →
Architecture

We Use Subdomains as Security Boundaries. No Kubernetes. No Containers. Just Directories.

Inside Vibe's multi-tenancy architecture where every user's micro-app gets its own subdomain, filesystem, derived secret key, and SQLite database — all on a single server process.

January 19, 2026 8 min read
Read Story →
Runtime

We Built a 340-Line Static Site Generator That Made Next.js Irrelevant. It Renders 480 Pages in 650ms.

How mentoring.oakoliver.com generates 40 locales × 12 routes at server startup using React 19, hydrates with React Query, and why we'll never go back to a framework for this.

January 17, 2026 9 min read
Read Story →
Runtime

We Replaced Node.js With Bun Across Every Production Service. Here's What Nobody Tells You.

The real story of migrating three production services from Node.js to Bun on a single VPS — cold starts, memory savings, deleted dependencies, and every gotcha that bit us.

January 15, 2026 9 min read
Read Story →