AI stack & practice

What we actually run.

Not a logo wall. The layers we build with, the rules we hold to, and an honest label on what is a default choice versus something we reach for only when the problem calls for it.

How we handle it

The rules come before the tools.

Models change every few months. These do not. They are the reason our work still holds up when the tooling underneath it moves.

Boring infrastructure, sharp models

The database, queue and deployment pipeline should be unremarkable. Model choice is where the interesting decisions live.

Evaluations before scale

If we cannot measure whether it is working, we do not put it in front of your customers.

A human where it counts

Judgment, money and anything customer-facing keep a person in the path until the evidence says otherwise.

Your data stays yours

We do not train on it, we scope exactly what reaches a model, and we can run the whole thing inside your cloud.

Cost and latency are design constraints

A feature that works but costs too much per user is not finished. We budget tokens the way we budget load time.

Reversible by default

Model routing, prompts and retrieval sit behind interfaces, so we can swap any of them without a rewrite.

The stack

Eight layers, one job each.

Every layer exists because something breaks without it. Open a category to see what we use and how firmly we commit to it.

DefaultOur starting point on most engagements
When it fitsWe reach for it when the problem calls for it
EvaluatingPromising, but we haven't bet a client on it yet

Frontier LLMs

Default

General reasoning, drafting and extraction across the providers worth using.

Open-weight models

When it fits

Self-hosted or private-cloud inference when data cannot leave your estate.

Embedding models

Default

Turning your documents and records into something searchable by meaning.

Rerankers & small classifiers

Default

Cheap precision on top of retrieval, and clean routing before a big model is called.

Fine-tunes & distillation

When it fits

Small task-specific models when latency or unit cost dominates the design.

Postgres with pgvector

Default

Our default store. One database to run, back up, secure and reason about.

Managed vector databases

When it fits

When volume, isolation or throughput outgrow what Postgres should carry.

Hybrid search & chunking

Default

Pure vector search quietly fails on names, codes and numbers. We combine approaches.

Ingestion pipelines

Default

Documents cleaned, deduplicated, permissioned and versioned before they are indexed.

Warehouse connectors

When it fits

Read-only access to your systems of record instead of copying data around.

What this means for you

You are not locked in to our opinions.

Everything above sits behind interfaces we can swap. If a model, a vector store or a provider stops being the right answer, we change it without rebuilding your product.

How we build

Engineers first. AI where it does the most good.

We don't bolt AI onto a traditional process. We use it to deliver faster, and engineering judgement to make sure what ships survives production.

AI-accelerated delivery

Prototyping, coding, testing, documentation and research move dramatically faster. You see working software sooner.

Production judgement

Architecture, security, validation and human oversight. Speed doesn't cost you reliability. That's the whole point.

AI where it pays

Start with an AI Opportunity Audit to find the use cases with real ROI, and skip the ones that just look impressive.

Vibe-code rescue

Already built something fast with AI? We harden it for real users, security, tests, data integrity, without a rewrite.

Start with what pays off

The stack is the easy part once you know where AI is worth applying. That is what the audit answers, in two weeks.