Context
The same UK AI fintech as the AI pipelines case study. Advisers record their client meetings, and a pipeline turns each transcript into what the firm needs: notes, structured data, documents.
Every advice firm works a little differently, so every firm wanted its own output: its own sections, its own questions answered from the conversation, its own style.
Problem
A new client’s pipeline was a package of code, made by copying an existing one and changing what that client wanted. A typical one was about 1,000 lines in 10–30 files, and seven new ones were written in 2024. Every new firm meant engineering time and a release, and so did every change after that: even rewording one section took hours of a developer’s time, a code review and a deploy. The number of firms kept growing.
Architecture
The proposal to the business: let the firms define the output themselves. Instead of code per client, an editor where a firm’s admin builds a template: an ordered list of sections, each described in plain language: a title, the questions it should answer, bullets or paragraphs, and how much detail.
01 · A new firm or a change
The firm’s admin defines the output: an ordered list of sections, each described in plain language.
- 01 · A new firm or a change The firm’s admin defines the output: an ordered list of sections, each described in plain language.
- 02 · The definition One JSON document per template, validated with Zod on every write. The draft lives in DynamoDB.
- 03 · Going live Publish writes an immutable snapshot to a versioned S3 bucket. No release.
- 04 · Every meeting A finished recording becomes an event, then a queued job; the template becomes a graph of steps, and independent steps run in parallel.
- Stored as one JSON document per template, validated with Zod on every write. The editable draft lives in DynamoDB; each publish writes an immutable snapshot to a versioned S3 bucket.
- Scoped to a meeting type and to the whole firm, a team or a single user. At run time the most specific published template wins.
- Edited in a React editor: sections are reordered by dragging, every change puts the template back in draft, and an admin can discard it, publish it, or restore an earlier published version from the history.
- Executed by the same engine as the coded pipelines. A finished recording becomes an event, then a queued job; the template is turned into a graph of steps (transcript, sections in order, report), and independent steps run in parallel.
Decisions & trade-offs
-
An ordered list of sections, not a free graph
An admin cannot build an invalid pipeline, so validation stays small: the order matches the sections, tags are unique, limits hold. A template becomes the same graph the coded pipelines use, so there is no second runtime to maintain.
TRADE-OFF New kinds of steps still need code
-
Draft in DynamoDB, published snapshots in versioned S3
Version history comes with the bucket, and a meeting is only ever processed from an immutable published copy, never from a draft someone is still editing.
TRADE-OFF Restore and audit are rebuilt, not recorded
-
Templates next to coded pipelines
Firms moved over one at a time, behind a feature flag, with no big-bang migration. Clients with unusual needs still get a coded or hybrid pipeline.
TRADE-OFF Two things can now decide what a meeting produces
-
Built for people who are not technical
The users are advisers and their admins, not engineers. Plain-language questions instead of typed fields, three levels of detail instead of prompt settings, and limits a firm cannot trip over by accident.
TRADE-OFF Less freedom than code
Results
- 0lines of code to switch a new firm on: a feature flag
- 26+firms switched on in the first rollout
- 7 → 1new coded client pipelines, 2024 → 2025
Now a firm changes its template itself and sees the result straight away. The editor went live for the first firms in the summer of 2025 and became a mature part of the product. The work was recognised in front of the whole company.
Stack
- React
- TypeScript
- Mantine
- tRPC
- Zod
- Node.js
- AWS Lambda
- DynamoDB
- S3
- EventBridge
- SQS