Why we stopped writing AI features and built a platform
One workflow engine, one prompt registry, one validator, one renderer — and no feature that talks to a model provider directly.
The second feature is where you find out
Our first AI feature, the Business Idea Validator, worked well. Building the second one revealed how much of it was not really about business ideas: calling a provider, retrying a timeout, repairing not-quite-JSON, validating the shape, recording what it cost, rendering it, exporting it.
Copying that into a second feature would have been the beginning of two subtly different implementations. So we extracted it instead.
One pipeline, no exceptions
Every AI run now follows the same path: input validation, rate limiting, provider selection, prompt loading, execution, JSON validation with repair and retry, persistence, usage tracking.
A feature cannot skip a stage, because none of the stages are the feature's to call. There is exactly one module that constructs a model client, and exactly one function that runs a workflow.
Prompts are versioned files, not strings
Prompts live as markdown files under version control, each with a version and a checksum. Every run records which prompt version produced it.
When output quality shifts, the question 'what changed?' has an answer you can look up rather than reconstruct.
