Resume
At Stripe, I helped build a design system from scratch used by most products today. I wrote the layering system, collections, and other systems from the ground up, and helped build a wide set of components to power Stripe. I also worked on fundamental pieces of the Dashboard. My last year there was spent building out Stripe's AI Assistant product.
More information
Shaping the frontend vision
- A big part of my job was to figure out how to build UI at Stripe in a way that worked well across multiple teams.
- It's easy for UI coming from different teams to conflict, causing incidents. Additionally, it's common for one team to want to reuse something another team built. These needs to be build on a common platform that is able to serve the needs of both teams well, and I helped execute this. (See the next section)
- I frequently paired with other teams to figure out complex UI problems and help build a relisient system.
Components, views, and CSS engine
- On the design system team, we built a custom CSS engine and component API on top of React. The component API (views) was very lightweight and allowed users to build powerful new primitives themselves.
- The custom CSS engine provided a type-safe ergonomic approach to write styles, and allowed for powerful customizations across the system for advanced cases. This customization system unblocked a lot of teams, and was a significant reason the design system succeeded.
The layering system
- I build the layering system in our design system from scratch. This is a core coordination point, where many different pieces of UI can open a dialog, popover, drawer, modal, etc. All of these must render in a consistent, predictable way (nothing should unexpectedly render "under" something else).
- Required deep understanding of the browser, not only for behaviors but also for performance.
- Required strategies for adding hooks into deprecated systems to force them to coordinate well with the new one
AI Assistant
- I spent my last year working on Stripe's AI Assistant. I implemented the entire frontend, working closely with a designer.
- Led a transition to move the Assistant onto an existing shared framework provided by the Support team, requiring deep understanding of a legacy codebase and significant contributions to make the migration work.
- Create many proof-of-concept demos that later influenced the direction and investments made in the team.
I created a product Actual entirely by myself, with the goal of getting it bootstrapped. I acquired a decent amount of users, but eventually open-sourced it and left the project.
More information
An early local-first app with a custom syncing engine
- Actual was one of the first local-first apps with a syncing engine. I build this engine from scratch, leveraging CRDTs so incrementally sync changes from the user.
- The entire app ran locally, using a sqlite3 database. Users interactly directly with it, making the app extremely fast. Changes were recording in the db using CRDTs and eventually synced to other devices.
- I designed the entire app as well.
Acquired up to 1000 users ($4k/month)
- I also managed the business and marketing side myself. This was very new to me, and in 2019 I was able to acquire 1000 users for a revenue of $4k/month (and costs were super low, so mostly profit).
I've also worked for Mozilla on the Firefox developer tools and other projects.
More information
- Led a rewrite of the inspector and debugger UIs to use React, drastically simplifying their complexty.
- Worked closely with SpiderMonkey (the JS engine) developers, adding C++ hooks to for new JavaScript debugger features such as inspecting closures, getting the call stack, and more.
- Spent some time developing experimental apps for the [Firefox OS](https://en.wikipedia.org/wiki/Firefox_OS) project to identify gaps
- Worked on the addons and mozilla.org sites.
Other work
Prettier
I created the Prettier JavaScript formatter alongside vjeux. I wrote the initial version, and Christopher got involved soon after and helped evolve it into the mainstream version you know today. I helped for about the first 9 months and moved to an advisory role after to focus on my consulting business.
absurd-sql
In 2021 I created the absurd-sql project. It was more of a proof-of-concept, but it worked well enough that it powered the web version of Actual in production. I released it to inspire others, but did not intend for it to become a big maintained project itself (due to my lack of time). To this day Actual uses it on the web.
absurd-sql was one of the early SQLite builds for the web. The unique feature was to hook into the filesystem calls and translate page reads and writes to IndexedDB for persistence. It even mapped transactional semantics correctly, which means you can read and write from multiple tabs at the same time. This is something that is still difficult today in most modern libraries.
IndexedDB is very slow, and one of the most surprising results from this was how much it blew away IDB in performance. You essentially get batching for free and it works so well. Read the post for more details.
Blog posts
UI design: My post A case study of complex table design is good example of how I think through complex UI problems.
React: I was an early React adopter and wrote many blog posts about it. One of them got very popular and supposedly was very influential in getting React adopted.