Skip to main content
Zubin KhavarianZubin Khavarian

hi, I'm Zubin I build highly interactive apps and 3D games for the web and native platforms(iOS and Android)

React, TypeScript, Three.js, game-dev, and AI-native engineering, plus notes on what I learn along the way.

Projects

See all →
  • 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.

Open Source

See all →
  • three-kit

    three.js dev tools, each published on npm as @zkmake/*: a performance HUD, a live texture panel, a camera inspector, scene audits and draw-call batching. Vanilla three and React Three Fiber. Also on GitHub and npm.

Recent posts

See all →

Hundreds of Draw Calls Down to a Handful with BatchedMesh

7 min read

How Typo's Voyage draws every tile and every 3D letter through four three.js BatchedMeshes, poses a whole treadmill on the GPU with one vec4 a frame, and what breaks when you move instances in the vertex shader.

Stamp DEV on the Debug Icon

4 min read

My Debug builds are their own app: a .dev bundle ID, a Dev name, and the real icon with a DEV ribbon a small script draws across the corner. They install beside the App Store version and never touch its data.

Your Shader Stutter Happens at First Draw

8 min read

A three.js hitch the first time an effect appears is usually a WebGL program link. It blocks at the first draw, not at compile, and a warm-up only fixes it if it links the same program variant your frames use.

Roll It Has No Outline Pass

9 min read

The ink lines in Roll It aren't a post-process. Each material finds its own edges: the median of three distances on a box, crease barycentrics on a mesh, and a view-angle band on the ball.

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.

zubin@zubin.dev: man keys

// go to

  • ghhome
  • gwwriting
  • gaapps
  • gpprojects
  • goopen source

// move

  • jscroll down
  • kscroll up
  • ggtop of page
  • Gbottom of page
  • }next section (posts)
  • {previous section (posts)
  • ]newer post
  • [older post

// do

  • ⌘Ksearch everything
  • /search, too
  • ttoggle light / dark
  • ?this sheet
  • escclose