Skip to content

This page is fully readable without JavaScript. Every figure is printed in the HTML. Motion, the evidence receipts, the project map and the command palette are progressive enhancements only.

Robert McCullock · AI Systems Architect · Boston

I build autonomous AI systems.Then I audit my own claims about them.

Every number here is graded — click one for its receipt

I write the constraints and the acceptance criteria. AI agents write, test and deploy the code. 556,586 authored lines in seventeen months — measured with declared exclusions, not estimated. Where a July 2026 audit proved a published figure wrong, this page says so and shows what it used to say.

Quick answer

Robert McCullock is a Boston-based AI systems architect and full-stack engineer, and the founder of Design Delight Studio. Working solo, he writes specifications and acceptance criteria and directs AI agents — Claude, Antigravity, Gemini and local Ollama models — to build and ship production software. The work spans six production AI systems led by Sovereign Orchestrator Pro, two commercial desktop apps, three browser games, a free 78-class coding academy and a Shopify storefront, totalling 556,586 authored lines of code measured on 27 July 2026 with stated exclusions. Every figure on this page carries an evidence grade: MEASURED, CALCULATED or ASSERTED.

Contact: Robert@ddsboston.com · (617) 334-5912 · Boston, MA · LinkedIn · ddsboston.com

How this was built

Every visible number, its receipt panel, the audit table and the Dataset JSON-LD all render from one Liquid array. They cannot drift apart because there is only one copy of the data.

{%- assign rows = ledger | split: '~~~' -%}
{%- for row in rows -%}
  {%- assign f = row | strip | split: '|' -%}
  {%- if f[0] == id -%} ... render f[1] value, f[3] grade ... {%- endif -%}
{%- endfor -%}

The method

Constraints, not keystrokes

I run a pipeline where I write the specification and the acceptance criteria, and agents do the typing. The part that matters is not that agents write code — it is that nothing reaches production without an audit stage that can fail the build, and that stage never accepts an agent’s word for anything.

01

Architect

Intent, constraints, acceptance criteria. The only human authorship in the pipeline.

02

Author

An agent produces the code and a validation-gated deploy contract.

03

Execute

A second agent runs the contract through the Shopify MCP server against staging.

04

Audit

SHA-256, marker counts, length parity, live smoke test. The artifact is re-fetched, never trusted.

05

Publish

Human gate, promotion to live, rollback point retained.

The rule that earns its keep

Never accept an agent’s self-report. Verify the artifact itself — the live URL, a re-fetch from the API, the file on disk. “All checks passed” describes the run an agent thinks it did. In a single session that rule caught a false “all 37 passed”, four corrupted images, two overlapping SVGs, a sprint claim contradicted by its own timestamps, and a cost figure that overstated real spend roughly tenfold.

build manifest — this page
template ................ templates/page.portfolio.liquid
engine .................. native scroll-driven CSS + worker canvas, zero frameworks
progressive enhancement . anchor positioning, view transitions, popover, subgrid, container queries, oklch
human_keystrokes_in_body 0
figures ................. 32 ledger entries, each with grade, method, date and exclusions
internal links .......... 16 targets, all returned HTTP 200 on 2026-07-27 before inclusion
readable without JS ..... yes — every number is in the HTML source

Seventeen months

February 2025 to here

The earliest retrievable artifact anywhere is a t-shirt design uploader, dated 27 February 2025. Eight independent sources agree on it, including the filesystem. 26,779 older files were examined and rejected — all browser-extension and game-cache assets stamped with an invalid 1979 epoch. So this is seventeen months, not the vaguer “two years” this page used to claim. The compressed timeline is the whole story.

In one sentence

From a first Shopify conversation in February 2025 to 78 published masterclasses, six AI systems, two commercial desktop apps and a measured 54,886-line orchestration platform — in seventeen months, self-taught, with every date established by a platform timestamp, an operating-system timestamp or a dated conversation.

Build density — dated artifacts per month

What this measures, precisely: the count of artifacts carrying a verifiable date in that month — application records, first commits, conversation timestamps and operating-system file stamps, across eight sources. It is not a record of hours worked, and no hours figure is claimed anywhere on this page, because no time-tracking data exists to support one. The three empty months in 2025 are real: nothing dated survives from them.

Tool adoption — ten rungs, nine of them timestamped

Each date below comes from an operating-system file stamp or a platform record, not from memory. The one exception is marked, because it should be.

2025-02-27claude.aiFirst retrievable artifact
~2025-04Firebase StudioAsserted — no record survives
2025-07-23CursorOS timestamp
2025-10-07Google AI StudioPlatform record
2025-10-31Claude CodeOS timestamp
2025-11-05CoworkEarliest artifact
2026-02-18Ollama, localOS timestamp
2026-02-26Antigravity + Gemini CLIOS timestamp
2026-04-25claude-maxOS timestamp
2026-05-22Antigravity IDEOS timestamp

Firebase Studio is the honest weak link and it stays labelled as such. I adopted it in its launch month; no artifact from it survives, so the claim is ASSERTED, not measured. What is externally checkable is the product itself: Firebase Studio entered preview on 9 April 2025, was renamed from Project IDX on 15 April 2025, and Google announced its retirement in March 2026 with a final shutdown date of 22 March 2027. That is why it is no longer in the stack.

The record — 40 dated events

2025-02-27 First retrievable conversation anywhere — an HTML t-shirt design uploaderclaude.ai
2025-02-28 First Shopify Liquid work: “cut and paste into the Shopify HTML editor”claude.ai
2025-03-03 First structured data — a JSON-LD ItemListclaude.ai
2025-04-09 Firebase Studio enters preview; adopted in its launch monthasserted
2025-07-12 Virtual Try-On v1 — first brief specifying accessibility, performance and theme version togetherclaude.ai
2025-07-20 First game landing page: Legend of the Red Dragon 2026claude.ai
2025-07-23 Cursor adoptedfilesystem
2025-07-24 CounselAI — a civic housing-court toolclaude.ai
2025-09-14 Architecture shift to Shopify Online Store 2.0 sectionsclaude.ai
2025-10-04 Virtual Try-On deployed to Google Cloud Runclaude.ai
2025-10-07 First Google AI Studio applications — three on one dayAI Studio
2025-10-21 AI Shorts Factory — first of five tools that become VibeTubeAI Studio
2025-10-30 ThriftFind, first of three iterations on one ideaAI Studio
2025-10-31 Claude Code adoptedfilesystem
2025-11-05 Earliest artifact reachable from CoworkCowork
2025-11-13 Two YouTube optimisation tools in one dayAI Studio
2025-11-21 Legend of the Red Dragon 2026 v4.2AI Studio
2025-11-25 AGI Nexus v10.0 — autonomous publishing officeAI Studio
2025-12-06 The Synthetic Director: build beginsCowork
2026-01-02 PromptDJ and PromptDJ Pro, same dayAI Studio
2026-01-03 PromptDJ MIDI — hardware control addedAI Studio
2026-01-20 First real codebase measurement: wc -l against AGI Nexus v10claude.ai
2026-02-18 Ollama adopted — local inference on owned hardwarefilesystem
2026-02-26 Antigravity 1.0 and Gemini CLI adopted; Atelier OS created the same dayfilesystem + AI Studio
2026-03-05 PromptDJ NS-9000 ships at $79 — fourth generation, 62 days after the prototypeAI Studio
2026-03-08 NICHE-FORGE-CORE v3.0filesystem + AI Studio
2026-03-17 DDS Master Brand Hub created — origin of the flagship orchestratorAI Studio
2026-03-22 Sovereign Orchestrator Pro: first source fileCowork + Antigravity
2026-03-23 JTD Masonry — bilingual site, the only paid third-party client workclaude.ai + Antigravity
2026-03-26 Consolidation: Atelier OS retired, systems reduced from 14 to 13claude.ai
2026-04-08 The Bay State Treasure Gazette — six months after the first ThriftFindAI Studio
2026-04-21 shopify-dds-mastery skill built, hardened, ported and blind-tested 10 of 10 first attemptclaude.ai
2026-05-01 Morning Brief begins. 62 consecutive weekday issues follow, zero missedCowork + Shopify API
2026-05-22 Antigravity IDE adoptedfilesystem
2026-05-31 Evidence standard formalised: every factual claim cites file and line, or is marked NOT VERIFIEDclaude.ai
2026-06-13 110-page inventory published; all valuations stripped from my own public structured dataclaude.ai
2026-06-19 A completed build rejected for skipping the research-approval gateclaude.ai
2026-06-23 Certification error corrected: Fair Trade to Fair Wear Foundation membershipclaude.ai
2026-07-25 Eight Academy classes shipped in one day, taking the curriculum from 70 to 78own verification
2026-07-27 Full evidence audit: 556,586 authored lines measured; six published claims corrected downward, four upwardown verification
How this was built

The timeline, the density bars and the adoption rail are three views of one pipe-delimited dataset. The rail scroll-snaps with two CSS declarations and no JavaScript at all.

.rfx-rail{ overflow-x:auto; scroll-snap-type:x mandatory; }
.rfx-rung{ scroll-snap-align:start; flex:0 0 auto; }

The systems

Six AI systems in production

Working, audited, multi-agent systems. The headline figure this page used to carry — “51,000+ lines across all builds” — was understated by roughly eleven times. One system alone exceeds it.

Flagship · autonomous · in production

Sovereign Orchestrator Pro

A publishing engine that researches, writes and posts across four platforms with no human in the loop. Hybrid inference: local Ollama models on an RTX 3060 for bulk work, Gemini for the hard calls, behind a telemetry-enforced budget gate.

Say this precisely or an interviewer will catch it: the 22 “threads” are interval-timed async jobs inside a single Node.js process. They are not OS threads and not worker threads. The only concurrency primitive is a 15-minute execution timeout. Anyone who assumes OS threads and then reads async/await will rightly stop believing everything else.

TypeScriptOllama, 5 local models RTX 3060Gemini WordPressShopify XReddit Pinterest — wired, gated
Read the case study →

Generative media · measured

The Synthetic Director

AGI-CORE-Pro. Scripts, generates and assembles video and imagery through Veo, Imagen and Gemini. In continuous development since December 2025 through multiple major rebuilds, including a full re-architecture in February 2026.

25,746 LOC measuredDexie / IndexedDB9 modes
Case study →

Portable agent standard

shopify-dds-mastery

A cross-agent skill encoding brand constants, WCAG 2.2 AA limits, Core Web Vitals ceilings and a ten-phase pre-ship checklist. Installed into two different agents and validated by blind build test: a cold agent passed all ten proof-required audit items on the first attempt.

5,529 LOC9 filesBlind-tested 10/10

Never appeared on this page before. It is arguably the strongest single artifact here.

Neural operating system

Atelier OS

A multi-agent orchestration layer coordinating specialised agents into one working environment. Source written across a four-day window in late February 2026, with file-write activity concentrated in roughly 16 hours of active editing.

17,887 LOC measuredRetired 2026-03-26

Correction: this page previously said “architected and shipped in a 52-hour sprint.” The timestamps contradict it — 97.5 hours elapsed, 81 of them idle. The claim is withdrawn.

Compliance automation

claims-compliance-sweep

A four-class classifier with reversible repair that swept 561 live URLs for unsupported claims, behind backup JSON and pre-flight abort gates. Built to police my own marketing copy.

561 URLsReversibleAbort gates

Research to output

NICHE-FORGE-CORE V3.0

A dual three-step pipeline across four Gemini models, turning a niche brief into structured product and content assets. Version dates confirmed independently by filesystem and platform record.

4,281 LOCv2.0 2026-03-06v3.0 2026-03-08
Case study →

Live · customer-facing

Shopify Virtual Try-On

Photorealistic AI garment fitting on apparel product pages. A key-safe Express proxy on Cloud Run keeps the API key server-side. No email, no signup.

React 18 + ViteGCP Cloud RunLive since 2025-10-04
Open the Try-On →

Adoption and conversion effects: not verified. No figure claimed.

Every project, plotted by date

Horizontal axis is time, February 2025 to now. Node size is measured lines of code. Connecting lines are lineage — where one build became the next. Hover or tab to a node for its record.

Node detail appears here on hover or focus. Every project below is also listed in the timeline above, so nothing here depends on JavaScript to be discoverable.

Where the 556,586 lines actually are

Tile area is proportional to measured lines. A total with no exclusion list is worth less than a smaller one with a reproducible command behind it, so the exclusions are stated below the map, not buried.

exclusions — declared, because the number is meaningless without them
method .......... stack directory walk, SHA-256 content dedup, newline count from bytes
counted ......... .ts .tsx .js .jsx .mjs .cjs .py .ps1 .rs .go .java .rb .php .cs .sh .sql
plus ............ 229,493 lines of Liquid measured on the LIVE theme via the Shopify Admin API, 143/143 files, 0 failures
NOT counted ..... .json .md .txt .yml .csv .xml .svg — config and docs are not source
removed ......... node_modules, browser profiles, rendered DOM dumps, minified bundles, build output
removed ......... 441,148 lines of vendored Shopify base theme — not my work
removed ......... 2,360,839 lines of byte-identical duplicates across 3,736 files
date ............ 2026-07-27

The first version of this measurement returned 6,491,299 lines. It was wrong, and it was wrong in a specific and instructive way: 83 percent of it was Liquid, because the same Shopify theme sat in five working directories and every copy got counted. The tell was two byte-identical base.css files at different paths. Content hashing removed 2.36 million lines in one pass. A big number with no exclusion list is worth less than a smaller one with a reproducible command behind it — and that applies to my own output first.

How this was built

The treemap is flexbox, not a charting library. Each tile takes flex-grow equal to its line count, so the layout is the data. No JavaScript, no dependency, and it reflows correctly at any width.

<div class="rfx-tile" style="flex:' }} 1 150px">

Live and purchasable

Two commercial desktop apps — and how they got there

Not prototypes. Both ship today, both bring-your-own-key with a serverless licence gate, so inference cost sits with the user and there is no subscription. The part worth showing is not that they exist — it is the dated path from a browser prototype to a paid product.

Generative audio · desktop

PromptDJ NS-9000

$79.00

A bring-your-own-key neural synthesiser. Electron desktop client, MIDI hardware control, serverless licence check.

PromptDJ · 01-02 Pro · 01-02 MIDI · 01-03 NS-9000 · 03-05

Four generations in 62 days. 4,509 lines measured.

Buy PromptDJ →

YouTube automation · desktop

VibeTube AI Desktop App

$49.99

A bring-your-own-key content automation studio in a single Electron app — a 19-section orchestration matrix turning a URL into titles, tags, scripts, thumbnails and cross-posts.

Shorts Factory · 10-21 Shorts Gen · 10-26 Product Shorts · 11-07 SEO + Channel Optimizer · 11-13 VibeTube

Five dated predecessors. This page previously listed VibeTube with no provenance at all.

Buy VibeTube →

Free and live

Three games, a web app, and two civic tools

All shipped, all free, none monetised. The game count on this page said two; three are live. Three further game builds exist and are deliberately not counted here, because they are demos and counting them would be padding.

Browser game

Legend of the Red Dragon 2026

A modern reimagining of the BBS-era RPG. Turn-based combat, character progression, a living text world. The largest single game build and one of only two projects under version control.

27,837 LOC measured54 commitsgit
Play LORD 2026 →

Browser game

Dragonfly Crush

A polished match-3 puzzle game with no email, no signup and no tracking. Built as a birthday gift, then shipped publicly.

Match-3100% private
Play Dragonfly Crush →

Browser game · own subdomain

Ashaveth

Live on its own subdomain. Notable for the accessibility work: measured contrast lifted from a failing 3.4:1 to 8.56:1, verified by pixel sampling rather than by eye.

Contrast 3.4:1 → 8.56:1WCAG AA
Play Ashaveth →

Live web app

The Bay State Treasure Gazette

A real-time directory of Massachusetts thrift, vintage and antique shops, engineered to be found by both search engines and AI assistants. Six months of iteration from three ThriftFind prototypes.

JSON-LD + llms.txtSPA
Visit the Gazette →

Civic tool · free

Free Legal Help — Housing Defense

A self-serve tool to help tenants defend their homes. A real civic build, live and in use, made with the same agent-directed method.

See the tool →

For Shopify owners · free

One-Prompt App Library

Single-prompt app builds for store owners: copy a prompt, get a working tool. A teaching artifact and a working toolkit at once.

Open the library →

Hard-won

Engineering judgment, from real incidents

The work that does not fit in a feature list. Each entry is an actual production failure — symptom, root cause, fix, and the rule it locked in. This is the difference between writing code and operating systems. Two of them are my own mistakes from the last 24 hours.

Deleting 6,000 legacy posts without wrecking SEO equity
SymptomA retired AI system had auto-published 8,254 articles. Most were disposable; a few carried real equity.
Root causeUnbounded automated publishing with no quality gate and no inventory.
FixHTTP 410 Gone for the bulk — faster de-indexing than 404, equity deliberately forfeited — with 301s for only the top 100, behind backup JSON and pre-flight abort gates. 6,163 deleted, 100 redirected, 1,995 kept, in 1:38:01, zero errors.
LessonDestructive mass operations need restore points and tolerance checks before they run, not after.
Storefront filters returned zero results for every category
SymptomCategory filtering silently matched nothing across the whole catalogue.
Root causePrint-on-demand assigned one product_type — “Print Material” — to every product, so the field had no variance to filter on.
FixMoved category detection to the product title and gated the certification badge to apparel only.
LessonVerify the shape of the data a platform actually emits before trusting a field to carry meaning.
A model upgrade silently killed every posting workflow
SymptomThe Synthetic Director stopped posting. No error surfaced.
Root causeModel IDs hardcoded across 22 files; a duplicate <script> tag double-mounting React; a 35 KB brand file orphaned from the runtime.
FixCentralised the model IDs, removed the duplicate mount, rewired the brand file.
LessonHardcoded vendor identifiers are a time bomb. Config belongs in exactly one place.
Multi-model inference thrashed a single consumer GPU
SymptomA local multi-model matrix stalled under concurrent load.
Root causeConcurrent model calls oversubscribed 12 GB of VRAM on an RTX 3060.
FixAsync-mutex serialisation of model calls and a num_ctx budget of 4096. Production inference on hardware already owned.
LessonTreat VRAM as a shared resource with a scheduler, not an infinite pool.
Tooltips hid behind their neighbours on the Academy map
SymptomMap tooltips rendered underneath adjacent nodes.
Root causetransform: translate on each node created a new stacking context, trapping the tooltip inside it. Flip-left and flip-right class bodies were also swapped.
FixNegative-margin offsets and two targeted patches, no rebuild. The evidence receipts on this page use CSS anchor positioning, which is the structural fix for that whole class of bug.
LessonKnow which CSS properties create stacking contexts before reaching for them.
Mobile performance plateaued and would not move
SymptomMobile scores stopped improving regardless of what was optimised.
Root causePlatform-injected scripts set a hard floor on Total Blocking Time that no page-level work can cross.
FixOptimised to the floor, then stopped and documented where the ceiling is.
LessonKnowing where the ceiling is prevents wasting weeks chasing a number the platform will not permit.
Duplicate structured data across theme sections
SymptomMultiple Organization and ItemList blocks emitted on the same page.
Root causeSeveral sections each independently emitted their own schema.
FixOne schema, one owner. The layout owns Organization, WebSite and Breadcrumb; the hero owns the storefront types; the SEO manager owns ItemList and HowTo.
LessonStructured data needs a single source of truth per type, exactly like any other state.
An agent skill could hallucinate brand facts
SymptomAgents invented certifications and shipped code that broke house rules.
Root causeNo encoded ground truth for the brand or the platform’s limits.
FixWrote a 5,529-line brand-rules skill, then validated it with a blind build test: a fresh agent with no context passed all ten proof-required audit items on the first attempt.
LessonProve a skill against a cold agent. Do not trust it because you wrote it.
A shell variable clobbered an auth header mid-deploy
SymptomA deploy script failed loudly partway through, after staging had been written but before production.
Root causePowerShell variables are case-insensitive. A loop variable $h silently overwrote the $H headers hashtable holding the API token.
FixRenamed the loop variable. More importantly: the script failed before the production write rather than halfway through it, because the deploy order is staging first, production second, with a parity assertion between them.
LessonOrder your deploy so that the failure mode you have not thought of yet lands on the safe side of the gate.
My own measurement returned 6.5 million lines, and it was wrong
SymptomA line-count script reported 6,491,299 lines across my projects — a number that would be disbelieved on sight and would poison every figure next to it.
Root cause83 percent of it was Liquid. The same Shopify theme sat in five working directories and every copy was counted. The tell was two byte-identical base.css files at different paths.
FixSHA-256 content hashing so each unique file counts once globally, plus authorship bucketing that separates my code from the vendored base theme. It removed 2,360,839 duplicated lines in one pass.
LessonI had already rejected someone else’s 9.6-million-line count for exactly this error, then reproduced it myself an hour later. The rule only works if it applies to your own output first.
How this was built

The category filter is pure CSS. Radio inputs plus :has() on the wrapper — no JavaScript, fully keyboard operable, and it still works if scripts fail to load.

.rfx-conwrap:has(#rfx-f-css:checked) .rfx-inc:not([data-cat~="css"]){ display:none; }

The part that took the longest

I used to publish numbers I could not defend

Most “AI-assisted developer” claims are unfalsifiable, and mine were too. What follows is a dated, documented reversal toward a stricter evidence standard — made against my own commercial interest, because it cost me every impressive number I had. Nobody asked me to do it.

Jan 2026 Publishing agency-style figures on live pages — ROI percentages in the millions, dollar valuations, labour-replacement estimates. All of it derived from documents I had generated myself. None of it observed.
2026-05-31 Formalised the rule I still work to: every factual claim must cite a file and line, or be explicitly marked NOT VERIFIED. Written down, applied to agents and to myself.
2026-06-13 Stripped every valuation out of my own public structured data. That is search visibility and pitch material deleted on purpose, because I could not source it.
2026-06-19 Rejected a completed, working build for skipping the research-approval gate. The output was fine. The process was not.
2026-06-23 Corrected a certification error I had propagated myself — and traced it to my own agent instructions rather than blaming the agent that repeated it.
2026-07-27 Full evidence audit across eight sources. 16 published figures re-derived: 8 corrected upward, 5 downward, 3 held exactly, and three claims withdrawn outright rather than restated. This page is the result.

The receipts, still online

It would be easy to claim a reversal and quietly delete the evidence. These two case studies are from the old standard and they are still published, unedited. The valuations are baked into their URLs, which is why they read the way they do.

You are about to see “$15.5M”, “built in 52 hours”, “508,800% ROI” and “1,512,200% ROI”. I wrote all of it. None of it was measured. The systems are real — Atelier OS is 17,887 lines and AGI Nexus shipped — but the money figures were cost-to-replicate estimates dressed up as value, built on invented inputs. $15.5M across 52 hours works out to roughly $298,000 an hour, which is the kind of thing that only survives if nobody does the division.

Atelier OS, as published in early 2026 →
AGI Nexus v9.0, as published in early 2026 →

They stay up deliberately. A reversal you can only take my word for is worth nothing; one you can click into and check for yourself is worth something. Both are excluded from this page's structured data — linking them in prose with this warning attached is a different act from feeding those numbers to a machine as endorsed facts.

A big number with no exclusion list is worth less than a smaller one with a reproducible command behind it. The rule I now apply to my own output first

If you are hiring an AI systems architect, the core competence is not prompting. It is knowing which outputs to trust and having a method for deciding. The most direct way I can demonstrate that is on my own claims, in public, including the ones that did not survive.

Both directions

What the audit changed

Every figure on the previous version of this page was re-derived from source on 27 July 2026. The corrections run in both directions, which is what an honest audit looks like — a padded one only ever corrects downward, and a defensive one never corrects at all.

51,000+ lines 556,586 authored lines of code
~26,900 54,886 lines · Sovereign Orchestrator Pro
104 files 258 source files · Sovereign Orchestrator Pro
59 classes 78 free Academy classes
62 issues 64 consecutive weekday blog issues
2 games 3 live browser games
12 agents 12 registered AI agent personas
24 threads 22 scheduled publishing jobs
$8–13 per day $1.19 measured API spend per day
$0/mo hosting $0 per month for hosting
684 products 619 active products
110 pages 129 store pages
two years 17 months, start to here
7 schemas 10 JSON-LD schemas per page
4 platforms 4 live publishing platforms
0.1604 0.0000 Cumulative Layout Shift, mobile

8 understated · 5 overstated · 3 held exactly

8 of these were understated, and that is the part worth pausing on. The class count was 59 and is 78. The blog count was 25 and is 62. The code figure was 51,000 lines against 556,586 measured. This portfolio was not padded — it was unaudited. Those are different failures with different fixes.

The two findings I would rather not publish

A content-hash audit of my own drive found 2,360,839 lines duplicated across 3,736 byte-identical files, and only 2 of 23 project roots under version control — the 54,886-line flagship is not one of them.

To be precise about what this is and is not: backups exist and are deliberate — versioned zip archives plus a monthly full-drive copy to external storage. What is missing is version control, which is a different thing. Backups protect against loss. Git gives you history, diffs, blame and the ability to bisect a regression. The duplicate files are the visible cost of having the first without the second.

It is also the first thing I would fix, and I would rather you read it here than find it in an interview. Concealing it would be worse than having it — and a page arguing for evidence standards that quietly omitted its own worst number would not be worth reading.

How this was built

The filter above uses no JavaScript. A checkbox plus :has() on the wrapper hides every row that is not a downward correction. The counts beside it are computed in Liquid from the same ledger the rows come from, so the tally cannot disagree with the table.

.rfx-diffwrap:has(#rfx-onlywrong:checked) .rfx-drow[data-dir="up"]{ display:none; }

Always on

An autonomous operations fleet

Beyond the headline systems, scheduled agents run the day to day with the human out of the loop — research, publishing, video and engagement — reporting in rather than waiting for instructions.

Daily · 62 issues, 0 missed

Morning Brief

An autonomous research-to-publish agent. Every issue ships with FAQ, breadcrumb and speakable structured data and a 1200×630 CDN cover, with no manual authoring at any stage.

Count verified by Shopify’s own GraphQL articlesCount at EXACT precision — a platform figure, not a self-report.

Daily

Video build

A scheduled pipeline that drives a browser video editor end to end — builds, exports and downloads finished shorts — every day, unattended.

Continuous

YouTube engagement

Agents that verify scheduled videos actually went public, then post and pin formatted comments — and yield safely when another agent holds the write lock.

Release engineering

Deploy toolchain

Roughly 100 PowerShell scripts with three hard ABORT guards that fire before any write to the live theme, plus staging-to-production length-parity assertions and a retained rollback point.

Teaching the method

The DDS Vibe Academy — 78 free classes

I teach the method openly. The Academy is a free curriculum on intent-based AI coding, built with the very workflow it documents. Nothing is paywalled and nothing is gated: no signup, no email capture, no certificate. This page said 59 classes. It has been 78 since 25 July.

Curriculum

78 classes, 67 unique URLs

From vibe-coding foundations through agentic builds, MCP servers, sovereign RAG and the SEO Magnet System. Four stages, ten lanes, four guided tracks.

Architecture

One dataset, 16 surfaces

A single snippet holds the class dataset and renders roughly sixteen different surfaces — the hub grid, the lane pages, the What’s New tab, the search index and the structured data. Adding a class is one row.

Access

Free, permanently

Built as a teaching asset, not a funnel. There is no upsell at the end and there was never going to be.

Enter the Academy →

The storefront

A production Shopify store, engineered solo

Design Delight Studio is itself proof of work: a full sustainable-apparel catalogue on Shopify Basic, built and tuned by one architect, and the environment every constraint on this page was learned in.

Catalogue

619 active products

Made-to-order apparel and accessories across 129 pages. 683 including drafts and archived — this page previously said 684, which counted drafts as live.

Production code

229,493 lines of live Liquid

Measured directly from the live theme through the Shopify Admin API: 143 authored files, 143 retrieved, zero failures. Sections, templates, snippets and blocks.

Accessibility

WCAG 2.2 AA

Twenty-plus sections rebuilt for semantic structure and keyboard support. Contrast verified numerically with pixel sampling, never by eye.

Discovery

10 JSON-LD schemas per page

The SEO Magnet System: structured data, answer capsules, speakable blocks, and an FAQ accordion whose content must match its FAQPage schema exactly or the build fails.

The method, published free →

Compliance

561 URLs swept

A four-class classifier with reversible repair, run across the live site to find claims that could not be supported — including my own.

Measured 2026-07-28

Lighthouse 82 mobile, 98 desktop

Cold-load medians of three runs each. Warm loads reach 100 on both, but the cold number is what a first-time visitor gets, so that is the one in the heading. Full table in the next section.

TBT 0 msCLS 0.0000SEO 100

Measured, not claimed

What this page actually scores

Every previous version of this portfolio published performance figures that were never re-measured after the rebuild. So this time the page was audited before the numbers were written, by an independent agent running Lighthouse programmatically — three runs per configuration, median reported, spread disclosed. Cold means cache and storage cleared. Warm means a repeat visit.

RunPerfA11yBest prac.SEOFCPLCPTBTCLS
Mobile · cold8299921002,621 ms3,823 ms0 ms0.000
Mobile · warm10099921001,102 ms1,116 ms0 ms0.000
Desktop · cold989992100847 ms880 ms0 ms0.001
Desktop · warm1009992100301 ms301 ms0 ms0.000

Median of three runs per row. Spread: 0.0 mobile cold, 2.0 mobile warm, 1.0 desktop cold, 0.0 desktop warm. Lighthouse is noisy, so a single sample would not have been worth publishing.

The number I would rather not lead with

Mobile cold LCP is 3,823 ms. Google's threshold for “good” is 2,500 ms, so that fails it. Warm is 1,116 ms and desktop cold is 880 ms, but a first-time visitor on a phone waits nearly four seconds for the largest paint. It is on the page because a performance section that printed only the 100s would be the exact behaviour this portfolio was rebuilt to stop.

Why Total Blocking Time is zero — and why that is not a trick

A 0 ms TBT on a 190 KB page under mobile CPU throttling deserves suspicion, so here is the actual mechanism rather than a flattering one.

verified against the rendered HTML
template directive ...... {% layout none %} — the page never loads theme.liquid
theme JS bundle ......... absent — zero references to global.js, theme.js, constants.js, pubsub.js, cart.js
stylesheet requests ..... 0 — all CSS is inline
external scripts ........ 2, both Shopify platform-level, neither is the theme bundle
inline executable JS .... 25,542 bytes, deferred and intersection-gated
canvas work ............. OffscreenCanvas in a Web Worker, off the main thread entirely

This does not contradict the earlier finding that Shopify imposes a Total Blocking Time floor. That floor is real — on pages that render through theme.liquid, which is most of the store. This template opts out of the theme layer entirely, so it never pays that cost. Two true findings about two different page types, which is worth stating precisely rather than collapsing into one flattering claim.

Two honest caveats. The accessibility 99 is Lighthouse's automated score, which checks what a machine can check — it is not a WCAG conformance statement, and the manual keyboard and screen-reader passes are separate work. Best Practices sits at 92 because of a console 404 from a Shopify app embed that this template does not load and cannot remove.

How this was built

Lighthouse driven from Node via chrome-launcher, three runs per configuration, median taken programmatically. Warm runs reuse the browser session with disableStorageReset so the HTTP cache and fonts are already primed; cold runs clear both.

for (const cfg of [mobileCold, mobileWarm, desktopCold, desktopWarm])
  results.push(median(await Promise.all([1,2,3].map(() => runLighthouse(url, cfg)))));

The stack

Skills, mapped to proof

A skills list is a claim. Each row below names the artifact that backs it, so the claim is checkable.

  • Multi-agent system architectureSovereign Orchestrator Pro — 20 agent modules, 86 services, 54,886 lines measured
  • Agent skill authoring & portabilityshopify-dds-mastery — installed into two agents, blind-tested 10 of 10 first attempt
  • Autonomous pipeline operationsMorning Brief — 62 of 62 weekdays, verified by platform count
  • Release engineering~100-script toolchain, preflight gating, staging-to-production parity, three hard ABORT guards
  • Shopify Liquid architecture229,493 live lines; one snippet dataset driving ~16 rendered surfaces
  • Structured data & technical SEO10–13 JSON-LD schemas per page; FAQ-to-schema parity enforced at build
  • Accessibility engineeringWCAG 2.2 AA; contrast measured 3.4:1 → 8.56:1 by pixel sampling
  • Test & audit engineering22 invariant tests; 40-gate and 38-gate audits at zero failures
  • React + TypeScriptcase-study dashboard under TS strict, clean; bilingual client site
  • Compliance automationclaims-compliance-sweep — 4-class classifier, reversible, 561 live URLs
  • Hybrid local / cloud inferenceGemini plus local qwen2.5-coder:14b on an RTX 3060; telemetry-enforced budget gate
  • Cloud deploymentTwo independent GCP Cloud Run deployments
  • Evidence governanceThis page. Valuations stripped from my own schema at commercial cost.
TypeScriptReact 19Electron ViteTailwindNode.js PythonPowerShellFirebase GCP Cloud RunGraphQLIndexedDB / Dexie Shopify LiquidOS 2.0 sectionsAdmin API MCP serversOllamaGemini ClaudeRAG + embeddingsJSON-LD WCAG 2.2 AACore Web VitalsGit

Experience

Founder & Architect — Design Delight Studio

Boston, MA · February 2025 – present · AI Systems Architect

  • Designed and operate an AI development pipeline in which agents write, audit and deploy production code under written constraints, with zero human keystrokes in the production pipeline and an audit stage that can fail the build.
  • Shipped 556,586 authored lines of code across six production AI systems, two commercial desktop apps, three browser games and a live web app — solo, measured with declared exclusions.
  • Built and operate a fleet of scheduled autonomous agents; the publishing agent has shipped 62 consecutive weekday issues with zero misses, verified by platform count.
  • Built and run a 619-product Shopify Basic storefront across 129 pages and 229,493 lines of live Liquid, rebuilt to WCAG 2.2 AA.
  • Created the free 78-class DDS Vibe Academy and a 5,529-line portable agent skill validated by blind build test.
  • Authored a compliance classifier that swept 561 live URLs for unsupported claims, and applied it to my own marketing copy first.
  • Manage four supply-chain certifications plus Fair Wear Foundation membership across a made-to-order catalogue.

The brand

Four certifications, plus one membership

The distinction matters and this page used to get it wrong. Four are third-party certifications. Fair Wear Foundation is a multi-stakeholder membership covering factory labour conditions, held through our supplier — not a certification, and it should never be described as one.

GOTSGRSOCS PETA-Approved Vegan Fair Wear Foundation — membership

Design Delight Studio is not OEKO-TEX certified. See the certifications page →

Questions

FAQ

Who is Robert McCullock?
Robert McCullock is a Boston-based AI systems architect and full-stack engineer, and the founder of Design Delight Studio. Working solo, he writes specifications and acceptance criteria and directs AI agents to build, test and ship production software.
How much of this page is measured rather than claimed?
Every figure carries a grade. MEASURED means it came from a command or a platform API. CALCULATED means it was derived from rates or assumptions and never directly observed. ASSERTED means it is stated without working shown. Click any number to see its grade, method, date and exclusions.
How does one person ship this much software?
Through a constraint-driven pipeline. Robert writes the specification and the acceptance criteria; one agent authors code and a validation-gated deploy contract; a second executes it through the Shopify MCP server; an audit stage runs SHA-256 and marker checks plus a live smoke test before a human gate promotes it. No human keystrokes enter the production pipeline.
What is Robert's technical stack?
React 19, TypeScript and Electron on the frontend; Node.js, Python, Firebase, GCP Cloud Run and IndexedDB on the backend; Shopify Liquid, Online Store 2.0 sections and JSON-LD on commerce; and multi-agent orchestration across local Ollama models, Gemini and Claude, including MCP server development in both Python and TypeScript.
Are the systems actually in production?
Yes. Sovereign Orchestrator Pro runs 22 scheduled publishing jobs across four live platforms. The Morning Brief agent has published 62 consecutive weekday issues with zero missed weekdays, a figure verified by Shopify's own GraphQL article count at EXACT precision. The Virtual Try-On runs live on apparel product pages.
What did the audit get wrong?
The audit re-derived 16 previously published figures from source. 8 were understated, 5 were overstated, and 3 held exactly. The largest understatement was the code figure: 51,000 lines published against 556,586 measured. Separately, three claims were withdrawn rather than restated, including a 52-hour sprint contradicted by its own file timestamps and every dollar valuation. A content-hash audit of the drive also found 2,360,839 duplicated lines and only 2 of 23 project roots under version control.
What are the two commercial apps?
PromptDJ NS-9000 at 79 dollars and the VibeTube AI Desktop App at 49.99 dollars, both sold on ddsboston.com. Both are bring-your-own-key Electron applications with a serverless licence gate, so inference cost stays with the user and there is no subscription.
What is the DDS Vibe Academy?
A free 78-class curriculum on AI-assisted coding, built end to end with the same agent-directed workflow it documents. There is no signup, no email capture, no paywall and no certificate.
How long has Robert been doing this?
Approximately 17 months. The earliest retrievable artifact anywhere is dated 27 February 2025 and eight independent sources agree on it. 26,779 older files on the drive were examined and rejected as browser and game cache stamped with an invalid 1979 epoch.
How do I work with Robert?
Email Robert@ddsboston.com. He is open to senior AI engineering and architecture roles, consulting and partnerships. The case studies and the free Academy document the method in depth.

In one screen

Key takeaways

  • 556,586 authored lines measured with declared exclusions on 2026-07-27 — six AI systems, two commercial desktop apps, three games and a live web app.
  • Seventeen months, self-taught, from a first Shopify conversation on 2025-02-27 to a ten-tool agent stack, with every adoption date but one established by an OS or platform timestamp.
  • 62 consecutive weekday publications with zero misses, and 78 free classes — both verified against the platform, not asserted.
  • Corrections in both directions: of 16 figures re-derived from source, 8 were understated and 5 overstated. The portfolio was not padded, it was unaudited.
  • Published my own worst numbers — 2,360,839 duplicated lines and 2 of 23 repositories under version control — because a page arguing for evidence standards that hid its own gaps would not be worth reading.
  • Every number here is clickable and returns its grade, method, date and exclusions.

One architect, directing AI agents under tight constraints, shipping and operating production software at the scale of a small company — and holding the output to a standard that costs him claims. If that is the kind of builder you need, let’s talk.

Work with Robert

Let’s work together

Open to senior AI-engineering and architecture roles, consulting and partnerships. The fastest path is a direct email — or dig into the proof first.

Boston, MA · (617) 334-5912 · Robert@ddsboston.com