
I design and I build — and the line between the two stopped mattering a long time ago. I think in systems, move in code, and build interfaces the same way I learned motion: frame by frame, with intent.
I started in motion graphics in the early 2010s, animating commercials for Smirnoff and music videos for Danny Ocean. Motion taught me something most product teams ignore: timing is a design decision, not an afterthought. Every transition either builds trust or breaks it.
Then I moved into brand and identity — mostly for software and AI companies. That's where I learned systems. Not the Figma kind. The kind where constraints matter, naming matters, and consistency is the only thing that scales.
Product is where everything clicked.
At Tranzport, a logistics SaaS, I worked on tools dispatchers actually depended on. Not “nice-to-have” interfaces — real workflows under pressure. That's where I started writing code seriously. First to prototype faster. Then because I didn't want to wait on tickets to fix things I understood better.
Now I build end-to-end systems.
I shipped Waco3.io, an AI-powered platform for proposals, quotes, and invoices — built with React, Node, and a deeply integrated AI layer that generates structured outputs, not just text.
I maintain @reactzero, a set of zero-dependency React libraries focused on accessibility, performance, and control. No magic. No black boxes.
I work with AI daily — Claude, Cursor, Codex — but I don't outsource thinking. I still check every ARIA role, every interaction edge case, every state transition.
Because tools change. Standards don't.
The throughline hasn't changed since my motion days: make complex systems feel simple, and never lie to the user.
What I won't do
- Treat motion as decorationIf it doesn’t clarify, guide, or reduce cognitive load, it doesn’t ship.
- Ship inaccessible componentsWCAG isn’t a checklist. It’s the baseline for respect.
- Hide complexity behind “magic” abstractionsIf I can’t explain how it works, I won’t build on top of it.
- Pretend AI replaces judgmentAI is fast. Judgment is earned.
- Build things I wouldn’t trust in productionIf it breaks under pressure, it’s not done.
- Design for Dribbble instead of realityReal users don’t scroll galleries. They complete tasks.
- Skip research and jump straight to pixelsDiscovery first — understand the problem, find patterns, build context. Then wireframe, design, and build.
- Add a dependency before understanding the problemMost problems don’t need a library. They need clarity.
- Put pineapple on pizzaSome lines shouldn’t be crossed.
- Reject a good, spicy pad thaiSome things are non-negotiable. Extra chili, no exceptions.
What I'm building toward
- Design systems that machines can read
Tokens, structure, and semantics that AI can interpret and generate from.
- Procedural UI that builds itself from intent
Layouts, flows, and components generated from structured inputs — not static mocks or predefined screens.
- Automated design variations at scale
Systems that generate options with creativity and consistency — so exploration doesn’t sacrifice coherence.
- Terminal-first workflows for designers
Faster loops, less friction, no context switching between tools.
- Motion as infrastructure
Not polish. Not delight. A core part of how systems communicate state and change.