AI agents & assistants
Task-scoped agents with tool access, guardrails, and a human in the loop wherever the cost of being wrong is high.
We design and build web platforms, mobile apps, and AI systems — and we run our own products, so we ship under the same constraints our clients do.
What we do
From a first release through to modernising a platform that has outgrown itself — and the AI and data work that increasingly sits across both.
AI engineering
Language models become useful when they are wired into real data and real workflows. That wiring is the engineering.
Task-scoped agents with tool access, guardrails, and a human in the loop wherever the cost of being wrong is high.
Retrieval over your own documents and data, with citations, so answers can be checked rather than trusted.
Queues, schedulers, and event pipelines that move work between systems without anyone copying fields by hand.
Model selection, prompt and context design, caching, evaluation, and cost control on the hot paths.
How we work
Fixed scope when the requirements are known, a dedicated team when they are still moving.
A defined deliverable at a defined price. Best when requirements are settled and the surface is well understood.
Engineers embedded with yours, working your board and your standards. Best for ongoing product work.
A read on architecture, security, or performance, delivered as findings you can act on without us.
Why us
Each of these has cost us work at some point. We would rather lose it up front than halfway through.
It lives in your repository, or is transferred at handover. No licence retained, no escrow, no dependency on us to keep running.
If the thing you asked for is not the thing that solves the problem, that goes in the discovery report — even when the smaller scope is worth less to us.
A number without the assumptions behind it is a guess with a decimal point. Ours name what would change them.
The people in the kickoff are the people writing the code. Nothing is passed to a team you have not met.
Stack
Chosen for maintainability over novelty. Almost everything here runs in our own production, not just our clients’.
Industries
Domain shapes the constraints more than the stack does.
Resources
Written when something took longer than it should have, or when the answer online was wrong.
Deployment
Shared hosting can run Next.js, but not the way the docs assume. What Passenger expects, why the build succeeds and the app still will not boot, and the monorepo trap.
7 min readArchitecture
Tenant isolation is a data-model decision, not a permissions one. Why retrofitting it means touching every query, and the guardrail that makes it stick.
6 min readEngagement
Why the same brief gets quotes that differ by 4×, which variables move the number most, and what to ask for so the estimates are comparable.
6 min readIf your question is not here, it is probably worth a call rather than a paragraph.
Still have a question? Talk to the team
A short call is usually enough to say whether we are the right team, and what it would take.