Skip to main content

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

    418
    6.7k/wk

    Stores 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
  • A 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
  • VCR 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
  • X-Pat, a browser extension that puts an X account's country in the hover card and the feed, using X's own location API through your existing session. The feed fills in as you scroll without draining the endpoint's rate limit, and accounts can be collapsed, hidden or highlighted by country, organisation, age or bio keyword.

    • TypeScript
    • Browser extension
    • MV3
    • Playwright
    • Cloudflare Workers
    • SQLite
  • Self-hosted click and hover heatmaps, scroll depth, rage-click detection and ghost-cursor session replay, rendered on the live page. No cookies, no third-party scripts, and a tracker that is 1.7KB gzipped.

    • Cloudflare Workers
    • D1
    • SQL
    • TypeScript
    • Node.js
    • Analytics
  • A single-worker priority queue for local LLMs, exposed as an OpenAI-compatible HTTP service — so cron jobs, browser extensions and OpenAI clients all share one serialized queue against one model instead of fighting over the GPU.

    • Node.js
    • TypeScript
    • Ollama
    • HTTP API
    • CLI
    • 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