
Spatial experience · Interaction & motion · Three.js
Making an invisible data ecosystem tangible, explorable, and alive.
The foundation
Buttons, forms, menus, and dialogs appear throughout Domo. Bits gave teams a shared React foundation for those everyday interactions.
I led the effort through Domo’s UI Forum, bringing frontend representatives together to agree on the architecture, assign owners, and coordinate the migration from AngularJS.
The library
A component is more than its default appearance. It needs to handle selections, validation, loading, and all the little changes around an interaction. Scroll through this collection to see those states unfold.
The migration
We didn’t need to rewrite Domo to move forward. Adapters let teams use React components inside existing AngularJS pages, replacing the underlying pieces while product development continued.
I wrote usage-scanning scripts to find the remaining instances of each legacy component. Component-level burndowns made the work concrete, so teams could coordinate replacements and see what was left.
“This is the most organized effort I’ve seen since working here.”
The result
Every base UI component had a React implementation, most legacy component usages were replaced, and new features could be built entirely in React. Existing AngularJS application code could stay in place without dictating how we built the next thing.

Spatial experience · Interaction & motion · Three.js
Making an invisible data ecosystem tangible, explorable, and alive.

Layout architecture · Editor interactions · Mobile composition
A flexible foundation for turning dashboards into applications of your own.

Frontend product ownership · Interaction design · Report experience
Turning an ambitious AI concept into research people could return to, inspect, and keep working with.