I put AI agents into real products and ship the full stack around them.
Senior full-stack engineer (React, Next.js, Node.js) with 12 years building software for companies in the US, Sweden and Argentina. Most recently Tech Lead at KitchenSync, where our accounting platform for restaurants integrated QuickBooks, Slack and LLMs from OpenAI, Anthropic and Gemini.
Here I write about what actually works when LLMs meet production: structured outputs, validation, cost, evals and agents. More about me.
Writing
LLMs in production: the hard part is the contract around the model
What I learned putting OpenAI, Anthropic and Gemini behind an accounting product: schemas, deterministic checks, confidence thresholds and a human review queue.
Building an LLM feature, part 5: ship it and keep it healthy
Running Nora's categorizer in production: graceful degradation, timeouts and retries, cost tracking, logs you can query, privacy, and the loop that makes the model less necessary over time.
Building an LLM feature, part 4: test and evaluate it
Unit tests for the deterministic parts, a golden set for the model, and an eval script that reports accuracy, coverage and confident mistakes and can fail CI.
Building an LLM feature, part 3: build the rules, the model call and the service
The code behind Nora's categorizer: a rules-first decision function, a batched LLM call with a schema-enforced enum, and a background service that saves answers and learns rules.
Building an LLM feature, part 2: design the system around the model
Architecture, data model and the contract with the model for Nora's transaction categorizer: async processing, confidence scores, idempotency and rules that learn.