Traction Studio AI · Codefi · Systems & tooling · Sept 2025 – present

Product, growth, then the tooling to do both faster

Token architecture
Codefeed
Vibeathon brand system
RoleSole builder, directing AI as an implementation partner
ScopeDesign systems and internal tooling
SurfaceCodefi Dev Studio + Codefeed
StatusOne shipped as a system, one in active use
In short

When the work in front of me needed better raw material, I went and built the tooling for it.

Built, twice: a token system before a line of production code existed, and an MCP-based content engine now running in production.

Judgment calls: turned down a faster route that would've broken the token system's alias chain, a cheaper storyboard that risked identity drift, and a model upgrade that cost 3x without earning it.

Verification: the token system never ended up used, and Codefeed's ad performance hasn't run long enough to measure.

This is the third track alongside product and growth: when the work needed better primitives to run on, I built those myself.

Both systems on this page were built the same way: directing AI as an implementation partner, reviewing what came back against a spec, and rejecting the fast wrong answer when it mattered.

Design Systems AI Tooling Self-directed

Two systems, built the same way

A token architecture and a content-generation tool don't look related from the outside. Both exist because I noticed the work in front of me needed better raw material and decided to build it before anyone got around to prioritizing it.

Neither was a roadmap item. Both got built anyway, on the same instinct: notice the constraint, then go fix it.

The token architecture and Codefeed, the two systems built on the same instinct.
01 Codefi Dev Studio · Craft & process · Never used

Investing in systems before the code existed

This one has no outcome. What it shows is how I work when nobody is grading the result.

ContextScoping for a multi-surface enterprise engagement
RoleSole builder, directing AI against a spec
ArchitectureGlobal → Semantic → Component
StatusNever used, engagement fell through

Built early, never used

Codefi Dev Studio was scoping a large multi-surface enterprise engagement. Before any production code existed, I built the token architecture the surfaces would have shared, on sanctioned work time: a three-tier system, Global → Semantic → Component, with a hard no-hex-in-semantic rule. It was internal infrastructure for the surfaces that would consume it. The engagement died before implementation, so it never ended up being used, and never ran outside npm run dev.

At ConGenius I shipped for three years without a design system and paid for it weekly, duplicated work, inconsistent states, patterns re-solved for lack of a canonical version. This was me refusing to do that again, the moment I had the chance to build one from scratch.

A developer holding a fistful of mismatched loose colour swatches that refuse to line up. picks a value next person picks another
Colour values decided again by whoever is closest to the file.
Global → Semantic → Component, with a hard no-hex-in-semantic rule.
Global → Semantic → Component, with a hard no-hex-in-semantic rule. The alias chain is the whole value of the system; anything that breaks it makes the system decorative.

The DTCG-compliance pushback

There was a faster route available that would have broken the alias chain. I pushed back and kept the system spec-compliant instead, because a token system whose aliases don't resolve is just a colour palette with extra steps.

Held the line

The systematic-audit call

Manual whack-a-mole testing kept missing things. I stopped and switched to a systematic pass across every component, and caught 30+ mis-wired components in one sweep.

30+ caught

The shadcn/Radix catch

I asked whether these were real shadcn components or just things that looked like them. They were the latter. The answer changed the build approach, and would have changed it much more expensively three weeks later.

Changed the plan
The token system as it existed: Global, Semantic, and Component tiers, in the dev environment, the only place it ever ran.
The token system as it existed, in the dev environment, the only place it ever ran.

Directing AI against a spec

This was the first time I worked with AI as an implementation partner: setting the architecture, reviewing what came back against the spec, and rejecting the fast wrong answer more than once. The DTCG pushback and the systematic audit are both examples of that. It's how I now work at Codefi on an AI-native product, and how I built Codefeed.

What changed permanently: I now default to building the infrastructure and tooling before the feature code, on any project with ambiguity at scale. Three years of paying for not having a system, and then once refusing to, is where that came from.

The next time I built something nobody had asked for, it shipped.

02 Codefeed · Internal tooling · In active use

Building the tool because the output looked AI-generated

Ad creative generated through Gemini's Veo was technically clean and still read as synthetic. That's a craft problem, so craft is what I applied to fix it.

BuiltCodefeed, an MCP-based content engine
PredecessorXML Prompt Architect
RoleSole builder, directing AI as an implementation partner
StatusIn active use, 38 real paid generations

What I built

Codefeed calls image, video, voice, and avatar generation vendors directly, no vendor web UIs, driven through a conversation with an AI assistant. I built the MCP server into the first version, so any caller gets the same tool, with or without a UI in front of it.

The brand defaults ship pre-populated, with explicit negative constraints (no cinematic color grading, no anamorphic lens flares) and one governing instruction: shot-on-iPhone energy, not a cinema camera. That line is the actual fix for the problem that started the project.

A commuter scrolling a phone and pulling a faintly unimpressed face at what he sees. sees the ad clocks it as AI keeps scrolling
Someone scrolling past an ad.

"Wasn't 3x better"

A newer video model tested as more prompt-accurate than the one already in use, at roughly 3x the cost per second. I didn't promote it. Whether an upgrade earns its price multiple is now how I evaluate every model swap.

Reusable heuristic

The cheaper storyboard, rejected

One combined image standing in for six shots would have cost less per board. I turned it down: the tool anchors identity from real reference photos, and nothing confirmed that identity holds across multiple sub-scenes inside a single generated image.

Rejected on purpose

No batch button

There's no "run all approved shots" tool, on purpose. Batching the execution would have quietly weakened the cost-confirmation step exactly where spend could stack up fastest.

Declined by design
Codefeed's conversation flow: chat request, prompt assembly, cost confirmation, generation.
Codefeed's conversation flow: chat request, prompt assembly, cost confirmation, generation.

The tool before this one

Codefeed has a predecessor, the XML Prompt Architect, a structured-prompt tool I built earlier for the same reason: consistent output across generations. It's what produced the Vibeathon brand and Codefi's isometric graphics, both shipped. Codefeed is what that grew into: an MCP server any caller can reach, five vendor APIs under it, and a test suite built for repeated production use.

Where it doesn't work, and one place it made things worse

Light mode is the clearest edge. Our UI was dark-native and I needed the light counterpart. I gave the model the palette and the equivalences and it could not produce a usable version, because theming is a hierarchy problem: what recedes on dark does not recede on light, so the whole order has to be re-decided. It was genuinely useful for narrowing which colours to promote as accents. It fed the thinking; the decisions stayed mine.

The worse one wasn't in my hands. Marketing began generating campaign briefs with AI, and a campaign due to launch in four days would arrive as forty pages proposing seven phases, written for a company with a department behind each one. Nobody asked me to follow it. But our outside agency treated those documents as the source of truth and stopped bringing ideas of their own. A generated plan has no budget inside it: it will recommend seven audience segments without noticing that at twenty dollars a day, that is three dollars a segment and buys nothing.

Where it earns its placeThe ideation end, where the output is meant to be thrown away. A marketing-site page now starts as a wireframe generated against a spec of our real Framer components, gets iterated, and goes to the team before I have built anything. The review lands ahead of the craft time
Where it doesn'tAnything needing a judgment to hold across two contexts at once, and any plan a third party will treat as settled
Why it exists, and what isn't measured

The goal was raising the creative bar. Grant-funded ad pushes made the timing matter, but they're not why the tool exists.

Codefeed is in active use, but ad-performance data from Codefeed-sourced creative doesn't exist yet. It hasn't run in a live campaign long enough to measure.

The product side of this job

Codefi: designing the handoff from a conversational AI into a structured product

The growth side of this job

Codefi: the strategy I wrote, and the paid motion I ran

Next case study

ConGenius: three years as the only designer