Selected work

Self-hosted LLM stack

vLLM serving Qwen behind a LiteLLM gateway with per-app keys, rate limits and capacity management, plus an open-source agent platform. External AI spend went down noticeably.

WebhookShop, ticketing, mailboxScheduleCron, pg_cronOrchestratorn8n, WindmillQueueJobs table, batchesAgentStructured output, toolsLookupERP, catalogueExtractJSON schemaWriteRecords, emailsLLM gatewayLiteLLM, keys and limitsModelQwen on vLLMMCP serverFastAPI over PocketBaseDatabasePocketBase, Supabase, PostgresHostingDocker, small serversEdgeCloudflareObservabilityRun logs, alerts
The parts of the system this work ran through.

Context

Several teams wanted AI in their automations: classification in support, email drafts in supply chain, lead scoring in B2B sales. Each new use case meant another external API key, another bill and another place where customer data left the company.

The job

Decisions

vLLM with an open-weight model
Qwen on vLLM gives OpenAI-compatible endpoints, batching and good throughput on a single GPU server. Teams integrate with the same client libraries they already know.
LiteLLM as the one front door
The gateway issues virtual keys per app, enforces requests and tokens per minute, tracks spend and can route a request to an external provider when a task really needs a larger model. Switching models is a config change, not a migration.
Capacity is a number, not a feeling
Limits per key are derived from measured throughput of the server, and the remaining headroom is checked before a new key is issued.
MCP over operations data
Supply-chain demand and inbound figures are exposed to AI assistants through an MCP server, so analysts ask questions instead of exporting spreadsheets.

Outcome

Stack: vLLM, Qwen, LiteLLM, Docker, FastAPI, MCP, PocketBase.