Senior front-end engineer · San Francisco

I build websites, apps and the occasional odd little game.

This is where I keep all of it: the games I make, the toy apps I build for fun, and the work I do for clients and teams.

Day job
Front-end and full-stack at R-Zero
After hours
Making games for GameFrame
Good at
Next.js, React, data-heavy dashboards
Open to
Freelance web projects

Games

I make games, too

GameFrame is my one-person game studio. Every game runs right in your browser, and every one starts from an idea that probably shouldn’t be a game.

Games about things nobody makes games about.

  • 01
    [Courtroom game title] [One-line pitch that makes you want to play.]
  • 02
    [Paper football title] [One-line pitch that makes you want to play.]
Play something odd

Toy apps

Small things I built because I wanted them

Weekend projects that scratched an itch. Some are polished, some are a little rough, all of them work.

01

VibeTV

YouTube, but it works like an old TV. Flip channels with a remote, go back with channel down, and the video controls stay out of the way.

  • Next.js
  • YouTube API
Turn it on
02

The List of Us

A shared bucket list for friends and family. Make a list together, share it with a link and check things off as you go.

  • iOS
  • Next.js
  • Firebase
See the app
03

[Another toy app]

[What it does, in one or two short sentences.]

  • [Tech]
[Try it]

Work

Work for clients and teams

I’ve spent my career in startups, building the front end and a good chunk of what sits behind it.

01

R-Zero

Showing customers what they saved

I build the workflows and dashboards that calculate how much energy R-Zero’s HVAC controls save each building. Data pipelines in n8n over TimescaleDB and Postgres, with Next.js dashboards on top.

  • Next.js
  • n8n
  • TimescaleDB
  • PostgreSQL
02

R-Zero

Helping a team build with AI

I’m the team’s internal champion for AI-assisted development: shared conventions, real workflows and demos of what a small team can ship with it.

  • AI tooling
  • Team practices