Skip to main content
Zubin KhavarianZubin Khavarian

Hey, I'm Zubin

I build for the web and write about what I learn along the way. React, TypeScript, Three.js, game-dev, and AI-native engineering.

Projects

See all →
  • Mathness!

    It's a timed math drill made for a phone in portrait. You can play it in a desktop browser too. It is a PWA. Add it as a bookmark on your phone.

  • learn-eth

    You place timers, QR codes, logic gates, and displays on a canvas and draw wires between them. Values update on the edges as you edit. Six starter graphs come with it. Inspired by Austin Griffith's eth.build, which I still think is amazing. Built with React Flow.

  • Roll It

    WASD rolls a ball over floating tile islands while you collect gems. Rapier runs the physics. A sketch shader inks the world. When the ball rolls behind a wall or a tree, that scenery turns see-through. Built with React Three Fiber and Three.js.

Recent posts

See all →

Soundscapes for Web Games: A Pluggable Howler Implementation, Part 2

12 min read

The soundscape engine is one class under a hundred lines. A six-function adapter is the seam.

Soundscapes for Web Games: The Layer Beneath Your SFX, Part 1

7 min read

Web games sound flat because they treat audio as event SFX. A soundscape is the layer that fills the silence.

switch(true): The Stylish Way to Simplify Complex Conditionals in React

4 min read

switch(true) is an ordered list of boolean cases. First true wins. Use it when precedence matters. Use a lookup, or a normal switch, when it does not.

Crafting Quality Code with Conventional Comments

4 min read

A code review comment needs two things: what kind of feedback this is, and whether it blocks the merge. Conventional Comments is a prefix that says both.

To Yak Shave or Not: The Art of Procrastination in Software Development

4 min read

Yak shaving is a dependency chain, not a personality flaw. Bike shedding is a meeting. Shave it, stash it, or skip it.