Projects
Things I've built
Libraries I maintain and testing tooling I built because I needed it, plus the products I've shipped as an engineer on a team. Star and install counts are live from GitHub and npm.
Open source
state-in-url
410 5.0k/wkStores nested, typed state directly in the URL via React hooks. I built it because I needed a fast, convenient way to preserve state on page reload and share page links.
- React
- TypeScript
- Tailwind
- Next.js
- Remix.js
- react-router
react-horizontal-scrolling-menu
788 84k/wkA reusable horizontal scroll component. TypeScript, well tested, and used in production dashboards I never get to see. Maintained for years across multiple React majors and refactored along the way.
- React.js
- CI/CD
- storybook
- npm
test-proxy-recorder
75 151/wkVCR for Playwright — records real API responses once, then replays them deterministically on CI. Covers Next.js SSR, browser, and WebSocket traffic with no backend and no hand-written mocks. I built it because every flaky e2e run traces back to the network.
- TypeScript
- Playwright
- Next.js
- WebSocket
- e2e
- npm
Client & product work
Closed-source commercial work — the write-ups cover what I owned and what shipped.
The merchant-facing dashboard for Omise's payments platform: three years architecting and maintaining it in React, GraphQL, and styled-components, plus an internal D3.js analytics dashboard and a JavaScript SDK bridging a native mobile wrapper to JS mini-apps.
- React
- GraphQL
- styled-components
- D3.js
- Payments
- SDK
A B2B hiring platform startup. Built the UI to match the design closely, refactored code, adapted it to mobile, and wrote Playwright tests the team actually relies on.
- React.js
- Next.js
- TypeScript
- Playwright
- B2B
Available for full-time remote work in EU timezones, 40 hrs/week.
Get in touch