
ROUND
Anyone can make a bracket without signing up, and correcting a result never leaves past records and the next matches out of sync.
Products I build and run, the engines and modules grown inside them, and projects built inside other companies' products.
Services I plan, build, and operate myself.
At Firstage, the company I founded, I plan, build, and run on my own a family of services led by Journey, which turns photos and places into a record of everyday life, along with the modules they share.

A product that put writing and scheduled posting for several social platforms on one screen, which I built alone over about six months to test the market.

Projects where I designed and built core flows inside other companies' products.
Only the country fields a route needs appear on screen, and server checks, storage, and printed documents follow the same conditions.

The operations team now manages everything from product listings to documents, terms, and news without asking developers.

The Yogiyo app now handles very different order types, from robot delivery to dining in, through one checkout flow.

Each client's design and feature requests can now be met while the core code stays untouched.

Managers can now be grouped into teams, so one mention calls the whole team and a chat can go to a team, and operators no longer wait at the screen for a large download to finish.
Operators now open seasonal event pages themselves in the builder, where each season used to need a developer deploy.
Volta can now ship and roll back only the part that changed, without rebuilding the whole service.
Private packages I separated out while building products. I develop them in Storybook and use them in Firstage products.

Records are filtered exactly as the chips show, and a selection never widens the scope of an action.

Pages hold together whether someone with no design training edits them or hands the job to AI.

Servers keep the language of the person on screen apart from the language of the person receiving a message, so a push notification about someone else reaches each recipient in their own language.

Screens with a map never handle the map library directly; they pick only what they need, such as place clusters or routes.

Sorting, filtering, and scrolling never change the selected rows, so bulk actions apply only to the records you picked.

A product adding AI conversation only adds its own messages, such as edit proposal cards, without rebuilding live replies or scrolling.

Every app keeps the same accessibility standard while choosing its own color theme.

New writing screens and other products don't build an editor of their own; they pick the features they need on the shared core.
Things I built to test a product idea or to support the work.