Two decades directing creative work. Seven years inside Intel's labs deciding whether hardware was good enough to ship. Both halves point at the same job now: design the product, direct the AI that builds it, and refuse the answer that looks fine and isn't.
Case study 01 · Product design · Concept · AI direction
A private, offline personal-finance ledger that lives in a single HTML file — open it in a browser and it just runs. No cloud, no account, no network. I run my own money on it.
Personal finance tools force a bad trade: convenient but cloud-hosted, or private but a clunky spreadsheet. I wanted the third thing nobody makes — private, offline, own-your-data, and actually designed.
Never write after a failed read. Bad state triggers snapshot recovery, or the app refuses all writes to preserve the corrupt record rather than overwrite it. For a finance app, silent data loss is unforgivable — so I designed the persistence layer around protecting the record, not around the happy path. That's a product-judgment call, not a code trick: decide what the product can never do to the user, then build backward from it.
The app also carries an encrypted password vault — logins with live TOTP codes, cards, secure notes, its own passphrase. The design decision worth naming is section-lock rather than app-lock: the vault is a locked room inside an app you are already using, so checking a balance never asks for a passphrase and reading a password always does. ★ And it is the cleanest evidence here for why a person still has to look. Automated verification proved the cryptography correct and found zero behavioral defects — every bug in that build came from driving a real browser. The maths was right and the product was broken. The bug ledger →
When a self-imposed constraint — no third-party JavaScript, no network — left no room for a spreadsheet library, I had the AI hand-build the Excel engine: a ZIP/CRC32 reader-writer. The constraint forced a cleaner, fully self-contained result. That's the pattern I care about: the limit is the design tool.
See the full evidence pack →Case study 02 · Design language · Domain UX
A browser-based suite for designing and running a home renovation — floor plans, site and landscape, and a live cost center — tying design → cost → permits in one place, location-aware down to the ZIP.
I'm mid-renovation on a 1962 Phoenix ranch. Every tool did one slice: draw a plan, or track a budget, or look up setbacks. The expensive mistakes happen in the gaps between tools — you design something you can't afford, or can't permit, and find out later.
One product, two design languages. The design tool is a dark interface wrapped around a light drawing surface — the chrome recedes so nothing competes with the plan. White print is the deliverable. The person exploring wants a quiet, focused workspace; the person receiving the plan — a contractor, a permit office — wants something authoritative on paper. Serving both means designing two deliberate contexts, not one stretched compromise. The deliverable is a separate render pass, never a screenshot of the tool.
Case study 03 · Systems design · Color science · AI direction
An offline music player with two interfaces, and the split is by form factor rather
than by taste. The classic Winamp form — genuine .wsz skin support
— is a fixed 275×116 framebuffer, so it belongs where windows dock: desktop,
and iPad. A phone has no windows to dock, so it gets ARC — the modern skin,
and my design. You pick a photograph from your library and it becomes the ground the interface
sits on. One decision about where the thing is used, not two features.
An insulator holds high tension so it never arcs; ARC is the one place that energy is
allowed to show.
No streaming, no account, no network. It plays the files you already own.
See the proof — the phone interface,
with live controls →
I built it because of how I actually work. Long hours on composites, mockups and edits with my own music running — and every player wanted an account and a connection first. High tension, low noise: the line carries the music and nothing else gets through.
The Winamp UI is a framebuffer, not a widget set. 275×116 pixels of RGBA — no layout engine, no text metrics, hit-testing by rectangle comparison. Once you see that, the whole architecture falls out of it: the interface can live in shared code as pixels, so each platform needs only a window, a bitmap and an audio sink — a few hundred lines. It also means the interface can be tested as an image, which you cannot do to a native widget tree. And it means a photograph can be the interface. One observation, three consequences. That is what looking closely buys you.
#3B302B arriving as #251E1B, with chroma collapsing from 0.0123 to
0.0055 because multiplying toward black desaturates. Bevel shadows went gray instead of
staying in the skin’s hue. Bottom row scales lightness about a pivot in Oklab instead;
chroma holds flat at 0.018. Both are published because the wrong one is the evidence.
Why this matters more than the screenshots
Assembling the evidence on this page should have been a screenshot session. Both times it became an audit, because I read the output and didn't believe it.
A permit document counting a garage as conditioned living space. Every expense in a ledger signed + — money leaving, marked as money arriving. A debt goal reading “$12,293.50 of $1,500.00 — 0%”: two true numbers arranged into arithmetic that can't be right. And the serious one: re-running setup deleted transactions silently, with no confirmation and nothing to restore from, then reported success.
Not one of those could fail a test, because not one of them was a calculation. The code did exactly what it was told. A test cannot know that “conditioned space” excludes a garage, or that a plus sign on a debit is a lie. That takes somebody who knows the domain, reads the result, and refuses it.
AI made producing things nearly free, so the value moved to knowing which output to keep. I've been paid to do that since 2019.
See the working method →The part that happened at work
Everything above this line I built at my own desk. These I built inside Intel's validation labs, on the clock, for people who are still using them. Same instinct, seven years, and a job title that says technician.
Stop before you do something irreversible. The drive cleaner finds what it found, shows you, and asks before it wipes. The bringup script asks separately about kernels, because a test system pinned to a specific build is destroyed by the update any sane default would have run. Neither is a technical nicety — both are somebody deciding what this tool must never do to the person using it, then building backward from that. It's the same call I made years later when a finance app of mine turned out to delete records silently.
In 2021 the lab held over a thousand pieces of pre-production silicon across several labs and no way to find any of it — locating one part meant a thirty-minute hand search. I was tired of losing the half hour, so I designed the coding scheme and built the database. It's still what the lab uses.
The four since are the same move. A script that reclaims USB drives which Linux installs have left unreadable — the reason it matters isn't the drives, it's that engineers were interrupting their own work, and each other's, hunting for one that worked. A bringup script that takes a fresh machine from unusable to working, since a new system can't update at all until the corporate proxy configuration is in place and that was being typed by hand every time. A Windows utility that discovers the active COM ports and maps them for serial capture, because the machine already knows which ports are live and making a person retype that is the actual defect. And a PowerShell tool that updates KVM and PDU firmware across the lab and logs what it did, so somebody can audit it afterwards.
I wrote these; AI compressed the work. That's a different claim from the products above, where I set the principles and directed the build against them — and the difference is worth stating rather than blurring. What AI changed here was how fast a noticed problem becomes a shipped fix. It didn't do the noticing.
It's also on the other side of the job, and that side is the one worth hiring. I use AI to troubleshoot systems, and it's wrong often — which isn't a complaint. A wrong answer isn't a failure of the tool; it's a hypothesis. Root cause analysis is the business of killing hypotheses until one survives, and AI generates them faster than I can. That's exactly what I want from it.
A remote desktop service stopped working after a routine point release. The model kept returning to the same fix — switch off the security layer — because that is the answer the internet has for those symptoms. It was wrong, and it was wrong in a way worth understanding: the fault was newer than anything the model had read, so it reached for the most common answer rather than the right one. A model with nothing to draw on doesn't say “I don't know.” It says the most common thing. Knowing that's how it fails is worth more than catching any single wrong answer — and you don't disable a security control to make a service start.
The system behind all of it
447 hours across 303 sessions, and at that volume the thing that breaks isn't the model being wrong — you catch that. It's drift. So the process got written down: an operating contract, ten workflows that open and close every session the same way, and 91 automated guards that test the method rather than the output. Two of them have gone red and were closed the same day — and the page keeps the count visible rather than quietly turning green.
A dashboard that only ever shows green has stopped being an instrument.
The combination is the moat
I'm a creative director with a product designer's hands. Two decades of concept work — a boutique ad agency, a self-published photography book, commercial video, half a dozen businesses I built and ran — taught me to know good when I see it. Since 2019 I've also been at Intel, validating silicon and server hardware: paid to decide whether something is good enough before a customer ever sees it.
Those felt like two careers until I noticed I keep doing the same thing in both — the lab tools above, a finance app I now run my own money on, a renovation suite for my own house. See the missing tool, build the missing tool. AI made that faster. It didn't change the other half of the job, which is refusing an answer that looks fine and isn't.
Twenty years, narrated — The Path →Same work, different order — that door opens on the craft. Otherwise: I'm looking for a remote role directing AI product or AI creative work, somewhere the taste and the rigour both get used.
Get in touch Creative director door →