Most consultants show you slides. Here's my production stack.
Everything I deploy for customers is a right-sized subset of a stack I've run in production for two years — on my own hardware, on my own time, at my own cost. This page shows how it's built and what running it has taught me. If you have engineers, show them this page; it will answer their questions faster than a call.
One router in the middle. Everything else replaceable.
The design rule the whole stack obeys: no application ever talks to an AI provider directly. Every call — local or commercial — goes through one router (LiteLLM) that exposes a single OpenAI-compatible API and enforces:
- · Routing policy — which workloads may use which models. Sensitive routes pin to local models on my hardware — those bytes never leave. Routes I allow onto frontier providers send the minimum necessary context, under no-training API terms. The boundary is configuration, not convention — and the logs show exactly what crossed it.
- · Cost visibility — per-call tracking into dashboards. I know what every model, team, and workflow costs, in real time.
- · Budgets — per-key limits so an experiment can't torch a month's budget in an afternoon.
- · Swappability — a provider change is a config diff. When a model is deprecated or a price doubles, applications never notice.
Around the router:
- · Chat workspace: LibreChat — tracking upstream, deliberately NOT forked. My customizations live in build-time patch scripts that locate structural anchors in the code, apply idempotently, and fail loudly if upstream refactors — so I get upstream's fixes and features forever without maintaining a divergent fork. Two years of upstream churn survived; zero forks maintained.
- · Local inference — GPU-backed models on unified-memory hardware, systemd-supervised, started before the containers that need them.
- · Document pipeline — the routed OCR system (page-type routing, honest quality manifests, versioned outputs). Detail below.
- · Monitoring: Prometheus + Grafana — exporters on every datastore, container metrics, cost dashboards, alert rules.
- · Configuration as a single source of truth — one manifest compiles into every service config. A pre-flight check refuses to render when live files have drifted. Every change is a git commit.
OCR that never lies about quality.
The most valuable data in a regulated company lives in documents — and most AI document pipelines fail silently: they ship garbage pages with a green checkmark. Mine is built so that can't happen:
- · Pages are routed by type before OCR. Born-digital pages are extracted directly from the text layer — exact, instant, no OCR noise. Scanned pages go to a dedicated OCR engine. Pages containing embedded diagrams go to a local vision model at high resolution, because text-OCR reads boxes-and-arrows as glyph soup.
- · Output is validated against ground truth. Text-layer character counts anchor the checks; a garble guard catches the failure mode where OCR noise is long enough to look like success.
- · The manifest tells the truth. Every run ends in one of three states: complete (clean), partial (usable, benign warnings listed), or needs-review (the short, precise list of pages that genuinely need human eyes — with reasons). Downstream tools block only on needs-review. Nobody wades through false alarms.
- · Versions are immutable. New document revision → new versioned output beside the old one, diffable. Identical re-drops are detected by hash and skipped.
The lesson under all of it: silent failure is a design problem, not a model problem. You don't fix it with a better model; you fix it with routing and validation that make lying structurally impossible.
The unglamorous parts, done properly.
- · Tested recovery. Bare-metal rebuild of the full stack in under two hours — rehearsed, documented, timed. Backups every six hours across five datastores, synced off-site, with restore procedures that have actually been run.
- · Staged changes. Every risky change goes through a written pre-flight: image bumps researched against upstream changelogs, volume changes diffed, destructive commands individually flagged, staging before production. Boring by design.
- · Runbooks over memory. Every operating procedure is a script or a document in the repo. The standard I hold: the stack must be operable by someone who isn't me. That's the same standard your handover gets.
- · Real post-mortems. When it breaks, the failure gets a written root-cause and the fix gets automated. Two favorites from the scars: an out-of-memory crash that taught me hard limits on every heavy container, and a health-check misconfiguration that was quietly costing ~€20/month in API calls — found through the cost dashboards, fixed in one line, verified by the same dashboards. Small numbers; the discipline is the point.
What I'll tell you before you ever pay me.
- · Local models are not frontier models. A 30B-parameter local model is remarkably capable and completely private; it is not Claude or GPT at their best. The craft is routing each workload to the cheapest model that's genuinely good enough — and being honest about which that is.
- · Hardware matters more than vendors admit. Serious local inference needs serious memory bandwidth. That's why I state the hardware gate openly on the services page.
- · Hybrid beats absolutism. I started fully local-only. Production taught me the honest architecture is a boundary you control, not a wall you worship: sensitive work stays local, and where you allow a frontier model, bytes DO go to that provider — minimized by the setup, logged per call, covered by no-training API terms, but not zero. Anyone who tells you “hybrid” means “nothing leaves” is selling you a wall with a door in it and hoping you don't ask. You should know exactly where your door is. Mine is in the config, and the logs show every crossing.
- · AI without human governance is a liability. Anything I build that judges, assesses, or decides keeps a human in charge — by architecture, not by disclaimer.
Want this, sized for your team?
Start with the assessment — €3,500, fixed, remote.