projects · llm-gateway

One front door for every model.

Local models for private questions, cloud frontier models for hard ones — and no reason anyone in the household should care which is which. The gateway puts one API and one chat surface over all of them, with per-client budgets so an experiment can't quietly become a bill.

The product

A model roster, not a model bet

Models come and go monthly; the surface stays. A router named local-smart picks the best local model for the job, cloud models sit one dropdown away, and every client — human or agent — spends from its own budgeted key.

chat — themed Open WebUI, local-smart router selected
The chat interface: Open WebUI wearing the dusk theme, local-smart model selected, suggested prompts
Open WebUI wearing the house dusk theme via a CSS adapter — a third-party app that looks native to the platform.

Lessons

What it taught the platform

Theming a third-party app is a token test

Open WebUI ships its own design; making it wear the dusk theme through a thin CSS adapter proved the tokens-and-adapters pattern works even when you don't own the DOM.

Healthy-but-wasteful is a real failure class

An observability sidecar in this stack once burned two CPU cores for five days while every liveness check stayed green. That incident created the fourth axis of the monitoring pattern.

Budgets are architecture

Cost control designed in from the start — per-key, enforced at the gateway — is what makes saying "yes" to new clients and agents cheap.

Copied