Software engineer · creative tools, canvas, and 3D graphics · Los Angeles
I build interactive tools that run in the browser, on desktop, and on mobile. At Genies I've built Unity SDKs, React and Go platforms, and real-time notification systems. Before that I worked on a WebGL CAD renderer at Zea.
On my own I'm building a GPU drawing engine and an animation editor in Rust, plus a few multiplayer experiments. Three of them are live below.
A GPU drawing engine that runs in the browser with WebGPU and natively on iOS. It renders a tiled raster canvas and has pressure- and tilt-sensitive brushes, selection, fill, undo, and SQLite persistence.
Most of the work went into keeping the pen responsive. Input, rendering, and saving run separately. The canvas only redraws when something changes, and browser storage runs in a worker, so disk work never delays a stroke. Coalesced pointer events and Apple Pencil's predicted touches go through the same coordinate mapping as pan and zoom.
A multiplayer 3D sandbox where players grab, move, and throw props together, then record, scrub, and export a take. A Rust server runs the simulation at 30 Hz and owns the result.
The challenge is making a prop feel like it's in your hand when the server decides where it is. The client predicts locally, reconciles against delta snapshots, and recovers after a dropped connection. Rooms run on Edgegap and connect over WebTransport (QUIC) where the browser supports it, falling back to WebSocket elsewhere.
Live cursors and a shared draggable object, synced through one Cloudflare Durable Object. The demo opens two connected views side by side so both ends are visible at once.
Because one Durable Object owns the room, there's nothing to merge. Clients batch their input, and the receiving side adjusts its interpolation to the network so remote motion stays smooth when packets arrive unevenly.
Open the demo· drag the ringed circle in either view
Varyia Animator
Rust, wgpu, WebAssembly · in progress
A 2D/3D animation editor that layers drawings, 3D scenes, and images on one timeline. One authoring SDK drives the editor UI, a command-line tool, and MCP clients, across desktop, web, and mobile.
Experience
Genies
2025 – now
Full Stack Engineer
Admin and creator portals in React and Next.js, with Go APIs and OpenAPI contracts for avatar assets and content catalogs. Generated SDKs for Unity/C#, C++, and TypeScript. Durable WebSocket notifications with reconnect replay, acknowledgments, and multi-region routing.
Genies
2022 – 2024
Software Engineer, Unity
SDK and runtime systems that let outside developers build experiences for a shared Unity launcher on iOS and Android. Designed much of the launcher's physics-layer and collision-matrix integration. Also built dialogue tools, visual-scripting APIs, native mobile integrations, and image caching.
Zea
2021 – 2022
Graphics Developer
Migrated a browser-based 3D CAD rendering SDK to TypeScript, cleaned up its render-state and shader interfaces, and fixed WebGL rendering regressions. Wrote unit and end-to-end tests, CAD memory tests, and developer docs.