Jon Loome · Norwich
Not a demo and not a prototype. Shelf is a Shopify app I specified, built and deployed on my own, working AI coding tools as hard as they will go, and it runs on a real shop’s 1,153 products every day.
Shelf takes plain English — “rewrite the Chord Company cables”, “what’s losing traffic this month” — and turns it into catalogue work: product pages, collection pages, blog posts, SEO titles and meta descriptions, bulk price changes, scheduled changes.
It reads Google Search Console to decide what to work on first, so the pages people already land on get fixed before the ones nobody sees. It audits the whole catalogue against a written ruleset and publishes straight to Shopify.
Getting a model to write a product page is the easy part. Getting it to tell you the truth about what it did is the whole job.
Said six times in a row, for a product that had never been created.
That is the class of fault that matters when software writes to a live shop. A batch publish once wrote each product’s description onto the next product in the list — 183 listings, restored from a backup. One subwoofer’s price was applied to 250 others. A listing was built from a different product’s specification sheet and read perfectly well, which is what made it dangerous.
None of those were model failures. They were mine — routing, matching and verification — and every one is now a named test that runs before anything ships. I write the tests from the incident, not from the happy path.
Every one of those incidents has a reference — SHF-FY4T, SHF-CSQ5 — because Shelf reports its own failures.
An unhandled error generates a short code, writes it to the database for later inspection, and posts to a private channel with the stack and the last few conversation turns attached. A merchant can also just say “something’s gone wrong” in plain English: that files a report with the same context and answers with the reference, then asks what they were trying to do. Codes avoid characters people misread — no O against 0, no I against 1 — because the whole point is that someone can read one down the phone.
And when the reporter itself fails, it does not swallow the error: it hands back the code and an email address. A reporting path that can fail silently is not a reporting path.
That is the loop the incidents above came out of. A fault happens once, arrives with the conversation that caused it, gets a root cause, and becomes a test with its reference in the name. It is why a five-month-old codebase has a written history of its own worst days.
This was not a weekend with an AI tool. I have run an independent hi-fi retailer’s entire online operation since 2016 — Shopify, SEO, Google Ads, Merchant Center, GA4 — and a decade in regulated financial services before that. Ten years of working each of those platforms as its own separate thing is exactly what made Shelf possible: I already knew what the catalogue had to do, where the feed breaks, which disapproval means what, and what a product page has to say to sell.
That is why the journey ran the way it did. I got a working system running first, tested it against a live catalogue where a bad write does real damage, and only then expanded it out into the application it is now. The domain knowledge came first and set the requirements; the code followed.
Those Google Ads campaigns now generate more work than the business can service — they funded three new pest controller appointments and the company’s expansion into Suffolk, and are deliberately paused at Christmas and in summer so the team can catch up.
What I bring to an AI delivery role is not model theory. It is the judgement to tell when a fluent, confident output is quietly wrong, and the discipline to enforce correctness in code rather than in a prompt. Looking for remote AI work — delivery, applied AI, anything where knowing the business is half the problem.