Our Blog
Notes, essays from the Riverborn team on AI development, edge computing, and modern engineering.

How We Built an AI Invoice Extractor with GPT-4o Vision
Traditional OCR and regex parsers break the moment an invoice layout changes. Here is how I built an AI invoice extractor that turns messy PDFs and receipts into structured data with a built-in human feedback loop.

How We Built EasyDraft: An AI Content Writer with the OpenAI Agents SDK
A multi-agent content generation platform built on the OpenAI Agents SDK, where six specialized agents research, write, fact-check, score, and publish content, with a human still in the loop.

What We Learned Building an Offline AI App
Before we build an AI system for a client, we usually build it for ourselves first. Here's what broke, what we learned, and why it changes how we scope similar work.

Why On-Device AI Beats Cloud AI on Privacy and Cost
Cloud AI processes every message on someone else's server and meters every request. On-device inference breaks both problems. Here's the trade-off, honestly.

Offline Voice AI: Why More Engine Choices Aren't Always Better
Not every part of an offline voice stack needs a choice. Here's why speech-to-text got one engine, and why text-to-speech got a real trade-off instead.

How to Choose an On-Device AI Model for Mobile
There's no single best on-device model. Here's the real lineup we ship, which ones we actually recommend, and why bigger isn't automatically better on a phone.

Migrating a 40-Agent Sales System from Google ADK 1.x to ADK 2.0 Workflows
How a multi-tenant sales agent system grew from a Google ADK hello-world into a 40-worker orchestrator, then got rebuilt on ADK 2.0 Workflow graphs: what broke, what held up, and what we'd tell any team making the same jump.

On-Device RAG: How We Built Private Document Search
A technical breakdown of Nongor's on-device RAG architecture: hybrid dense and sparse retrieval, reciprocal rank fusion, cross-encoder reranking, citation validation, and running fully local with LM Studio.

Why Nested AI Workflows Sometimes Fail to Resume
Nested human-in-the-loop workflows fail intermittently when an interrupt matches the wrong sub-workflow, or when a resume reads state before the pause write lands. How ADK 2.0, LangGraph, LangChain, CrewAI, AutoGen, and n8n handle both halves.

Why AI Agents Restart Instead of Resuming (And How to Fix It)
A multi-agent coordinator that re-classifies every message will restart mid-flow workflows the moment a human pauses them. The same fix — an active-workflow marker checked before routing — across ADK 2.0, LangGraph, LangChain, CrewAI, AutoGen, and n8n.

How a Static IP and a Cloudflare 521 Broke Our GCP Deploy
We shipped a backend to a Compute Engine VM behind Cloudflare. The container came up fine. DNS and a 521 error did not. Two failures, both preventable, both worth knowing before your first deploy.

Fixing an Infinite Sync Loop in Our Twenty CRM Integration
We wired bidirectional sync into self-hosted Twenty CRM. Our own writes kept echoing back as inbound changes. The fix wasn't a clever filter — it was storing our API key identity once and comparing against it on every webhook.

Introducing Riverborn: The AI Systems Development Partner
An introduction to Riverborn: our mission, the gap we exist to close, what we build, and how we approach production AI engineering.
