Introducing dpkit Terminal and TypeScriptSee the announcement

Services & integration

AI engineering

Models behind an interface we control, with retrieval and evaluation around them.

  • OpenRouter
  • AI SDK
  • Mastra
  • MCP
  • pgvector

What it is

Putting language models to work on a defined task — extraction, classification, matching, assistance — behind an interface with types, limits and a fallback.

Why we chose it

We route through OpenRouter so a model is a configuration value rather than a rewrite, and build on the AI SDK and Mastra for structured output, tool calling and agent state. Retrieval runs on pgvector in the database that already holds the data, which avoids operating a second store and keeps permissions in one place. MCP is how we expose our own systems to models, and the same discipline applies as anywhere else: a schema on the output, an evaluation on the result, and a deterministic path when the model is wrong.

Where we use it

In data normalisation and matching, where the alternative is an unmaintainable pile of rules, and in the tooling we build for our own engineering.
captureapplication.fairspec.org
The Fairspec site, the data exchange format we author, with its Python and TypeScript implementations.

Fairspecdata framework in TypeScript and Python

A specification for describing tabular datasets, with reference implementations in TypeScript and Python.

we author

capturefireargs.dev
The Fireargs documentation site, showing its schema-first approach to building command-line interfaces.

Fireargsschema-first CLI builder

Schema-first CLI builder generating composable commands with built-in JSON I/O from Zod schemas.

we maintain

Get in touch

Tell us what you need built.

We are a small team in Portugal, working London hours. A site, an app, an internal tool, or the platform behind them — start with a sentence about the problem and we will take it from there.

All technologies
Get a quote