Lab, Internal tool, in daily use
AI that writes the draft and then stops.
A content operating system for a portfolio of websites. It finds an opportunity backed by real search evidence, briefs it, generates it with Claude, runs it through deterministic quality gates, and waits. You press the button. The app never acts on its own.
- 82 Source files
- 21,033 Lines of code
- claude-sonnet-5 Model
- zero Autonomous actions
The problem
Why we built it.
Content tools fall into two piles. One drafts a paragraph in a text box and leaves you to do everything around it: work out what to write about, check whether it is any good, get it into the site, remember what you published. The other promises the whole loop and quietly becomes an autonomous publishing bot, which is fine right up until the week it puts something wrong on a client's website.
Neither is usable across a portfolio. The first does not save enough time to be worth the subscription. The second cannot be trusted with a site that somebody's livelihood depends on, and no amount of prompt engineering changes that, because the risk is architectural rather than linguistic.
So we built the middle. The tool does the parts that are genuinely tedious and genuinely mechanical: reading search evidence to find what is worth writing, holding the brief, drafting, and running deterministic checks that do not need an opinion. Then it stops and shows its work. Publishing is a button a person presses, and the things it refuses to do are enforced in code rather than promised in a settings page.
01 / Inside the tool
The pipeline. Seven steps, and the two that put anything into the world are both a person's.
-
Find
agentReads the local Search Console dashboard and surfaces opportunities backed by real evidence. If the dashboard is offline it uses cached data and says so, rather than pretending it is current.
-
Brief
agentTurns the opportunity into a brief: the angle, the audience, the channel and the evidence behind it, so the draft is aimed at something specific.
-
Generate
agentDrafts with Claude, sending bounded, relevant excerpts rather than a whole repository. Without an API key it falls back to a deterministic mock so the whole workflow still runs.
-
Gate
agentRuns deterministic quality checks. These are code, not a second opinion from a model, so the same draft always gets the same verdict.
-
Approve
personA person reads the draft and decides. Nothing moves past this point on a timer, a schedule, or a confidence score.
-
Export
agentWrites exactly two files into the website repository, the Markdown and the image, and stops. It will not touch navigation, layouts or config.
-
Mark posted
personYou record the live URL yourself. Nothing is inferred; the app knows only what you tell it.
02 / Inside the tool
The limits, as the app documents them. These are enforced in code, which is the difference between a boundary and a promise.
| It will | It will never |
|---|---|
| Read Search Console through the local dashboard | Write to Search Console, claim an action, ship one, or request indexing |
| Read a linked website repository | Modify one, except on an explicit Approve and export |
| Write exactly two files on export: the Markdown and the image | Commit, push, deploy, or touch navigation, layouts or config |
| Commit and push those two files, when a project opts in | Force-push, amend, or commit anyone else's staged work |
| Show you social copy to paste | Post to any social platform |
| Render a finished video file and stop | Upload it, schedule it, or open TikTok |
| Send bounded, relevant excerpts to Anthropic | Send a whole repository |
| Read public content files | Read or display anything that looks like a secret |
03 / Inside the tool
Opportunities carry the same evidence discipline as the search workbench: what it found, how confident it is, and what it thinks that is worth.
- Long-form draft
/guides/heat-pump-running-costs/awaiting approvalWhy — Query cluster with real impressions and no page targeting it. Draft generated and passed all quality gates.
- 1,940 impressions
- no matching page
- gates passed 6/6
~120 clicks/mo (est.) confidence medium priority 34 - Refresh
/guides/choosing-a-heat-pump/briefedWhy — Existing page ranks 5.2 but the content predates the current product range. Refresh brief prepared.
- position 5.2
- last updated 19 months ago
impact unscored confidence medium priority 26 - Social repurpose
/guides/annual-servicing-checklist/ready to pasteWhy — Long-form piece performing well. Social copy generated for manual posting.
- copy generated
- no auto-posting
impact unscored confidence low priority 12
Every action carries its own history
- opportunity
- briefed
- generated
- gated
- awaiting approval
- exported
- posted
How it is built
The decisions that matter.
- 01
The button is the product
Every capability that puts something into the world is behind an explicit human press. There is no schedule, no auto-publish and no confidence threshold that bypasses it, because the moment one exists it becomes the default nobody reviews.
- 02
Refusals live in code
Not posting to social, not requesting indexing, not force-pushing, not sending a whole repository. These are enforced by the implementation rather than described in a policy, so they hold even when someone is in a hurry.
- 03
Deterministic gates, not a second opinion
Quality checks are code with fixed rules, so the same draft always gets the same verdict. Asking a model to grade another model's output feels rigorous and is not reproducible.
- 04
Degrades honestly
No API key falls back to a deterministic mock. No voice key renders silence of the right length. A stale search dashboard says it is stale. The pipeline keeps working and tells you exactly what it could not do.
- 05
Opt in, per project
Commit-and-push is off for every project until you switch it on, one at a time. Convenience that arrives switched on is how tools end up doing things nobody agreed to.
- 06
Bounded context
Only relevant excerpts are sent for generation, never a whole repository, and anything resembling a secret is never read or displayed.
Transfer
What this has to do with your business.
The valuable idea here is not content generation. It is the shape: let the machine do the mechanical middle, put deterministic checks where judgement is not required, and keep a person on every step that reaches the outside world. That shape transfers to quoting, onboarding, reporting, claims handling, or whatever your version of the same problem is.
- Find the mechanical middle of a process, not the whole process
- Use deterministic checks where a rule will do, and a model only where it will not
- Make the refusals structural, so they survive a busy Friday
- Degrade honestly when a dependency is missing, rather than guessing
- Ship it switched off, and let each team turn it on when they trust it
Where this leads
The engagements this work sits under.
- AI adoption Useful, low-risk automation around your website, content, admin, and reporting.
- Content systems Planning, drafting, repurposing, and publishing workflows the team controls.
- Custom software Custom software, internal tools, and AI assistants for one business.
- Content & blogs A content-led website built around the questions your customers actually ask.
FAQs
Questions, answered.
- Does it publish to my website automatically?
- No. By default it writes two files into the repository and stops, and you commit and deploy. There is an opt-in setting, off for every project until you turn it on, that lets it commit and push those two specific files. It will not force-push, amend, or commit anything you had staged.
- Does it post to social media?
- No, and it is not a missing feature. It generates the copy and shows it to you to paste. For video it renders a file and stops rather than uploading or scheduling. Anything that publishes on your behalf is a decision we think should stay yours.
- What gets sent to the AI provider?
- Bounded, relevant excerpts, never a whole repository, and nothing that looks like a secret is read or displayed. The API key is read on the server only, never sent to the browser, never logged and never stored in the database.
- Is the output any good without a human editing it?
- It is a solid first draft that has passed a set of fixed checks, which is a genuinely useful place to start from. It is not finished work, and a tool that told you otherwise would be selling you something. The time saved is in the research, briefing and mechanics, not in skipping the edit.
- Could you build something like this for us?
- Yes, though it would look different, because the useful part is the shape rather than the content features. We start with an operating review that maps how the work moves today and returns a costed, sequenced plan, including the parts we would tell you not to build.
Start a project
Got routine work worth handing off?
Tell us what eats the most time in your week. We'll tell you honestly whether it's worth automating, and what we'd build first. You'll hear back from Jake directly.
Three questions · about a minute
See the work