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 →
  • Typo's Voyage

    Typo rows a boat through tropical water and types words to clear mines and other obstacles on a voyage to get faster. I led the 3D team at edclub that built it. Built with Three.js.

  • three-meter

    A zero-dependency three.js HUD for FPS, CPU, GPU, draw calls, and scene counts. The sampler and the card stay separate so toggling the HUD never remounts the canvas. Works with vanilla three and React Three Fiber. Also on GitHub, npm, and the example.

  • 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.

  • connect-it

    You place timers, QR codes, logic gates, displays, and music nodes on a canvas and draw wires between them. Values update on the edges as you edit. An extensive node library helps you find nodes and learn about each, and a starter template library comes 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

8 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.