What’s in the box
Splashery
Splats you can play with. A toy box of 3D Gaussian splats that runs entirely in the browser: pick a toy (a real captured object, or one generated from a seed), spin it, poke it, blow on it, splash paint on it, drop it, watch it fall apart and come back, make your own, and share it as a link, an embed, a GIF or a video.
My part
I defined the project’s vision and its toy categories, refined the interaction design through hands-on testing, and contributed mathematical recipes.
It is built on the PlayCanvas engine, with WebGPU when the browser has it and WebGL2 otherwise. Static files and ES modules only: no build step, no framework, no server.
-
Toys
Real scans of up to 450,000 splats, and generated toys built in the browser from seeded recipes: sports balls, planets, food, a neuron that fires, a chess set that plays Morphy’s Opera Game.
-
Eight effects
Poke, wind, dissolve, drop, magnet, twist, slice and paint. Each runs on the GPU for every splat, every frame, and they stack.
-
A sound for every toy
Synthesized from a library of about 80 voices. The guitar strums a chord progression; Big Ben plays the Westminster quarters. Off until you turn it on.
-
Pictures and pages
In the labs: open a PDF, a picture, a GIF or a video and see it made of splats. Photos get one splat per pixel; GIFs and videos recolor their splats every frame.
-
Six ways out
A link with the whole scene compressed into it, a JSON file, a PNG, a GIF, a WebM video, or an embed: an iframe or a
<splashery-toy>element. -
A manual
The Tinkerer’s Manual explains how to program splats, level by level, starting with what one splat is: the Gaussian and its covariance.
One splat, up close
The toy above is thousands of these: a flat Gaussian, brightest in the middle, switched off three sigmas out. Stretch it and turn it, and its covariance follows.
Σ = R S Sᵀ Rᵀ
Cutting at 3σ keeps 98.9% of a splat’s paint: 1 − e−4.5. I didn’t take the formula’s word for it; a script adds up 16,777,216 samples and gets 98.889%.
Also on the shelf
Other things I’ve made
Not toys, strictly. Tools for words, for collecting and reading, and for work with coding agents.
-
grooph
Visual loop graphs for coding-agent workflows. You draw who builds, who checks, where a person decides and when the work stops. grooph checks that every loop names a stop, then compiles the graph into a prompt package for a separate coding-agent harness. It runs no agent and calls no model, and graphs stay on your device.
-
aqrobat
A local text and emoji QR lab: QR artwork built from letters, symbols or emoji.
-
Amordle
A free word game with any word length from 2 to 35 letters, three difficulties, a daily puzzle, and ranked multiplayer with an Elo rating. By its own sum: Wordle + Hurdle + Lichess − ads.
-
Ars Magna
An anagram finder. Give it any text and it returns every way those exact letters can be re-partitioned into real English words, by a deterministic search. Its name is an anagram of “Anagrams.”
-
English OpenList
A free, open, continuously maintained list of valid English words, about 345,000 of them, with the provenance of every word: which sources attested it, and when. It keeps auditable correction records and has a browser explorer.
-
Link Meteor
A Chrome extension that collects links with their anchor text and URL in separate fields, for reviewing sources and exporting a research collection. No account, ads, telemetry or backend.
-
resmon
A local-first literature-monitoring desktop application. It runs scheduled searches across open-access scholarly sources, removes duplicates, and compiles reading reports, with optional summaries.
-
reword_nerd
A local-first browser workbench that turns a reviewed document, or a set of images, into a portable workbook of rewriting prompts. Everything stays reviewable in the browser, the download is a separate, explicit step, and it contacts no model provider itself.
And at the back of the shelf: The Speed-Accuracy Trade-Off in Perceptual Decision-Making (April 2025), my undergraduate research capstone. It models evidence accumulation as a diffusion process and uses dynamic programming and value iteration to study decision boundaries in a simulated autonomous-vehicle obstacle-avoidance scenario. Code Video
The serious sticker
Research
I’m in the MS program in computer science at the University of Cincinnati, with a concentration in artificial intelligence, and expect to finish in May 2027. My thesis advisor is Dr. Yizong Cheng. Before that, also at UC: a BA in mathematics and a BS in neuroscience, 2025.
What I’d like to work on in digital media starts where Splashery leaves off: a splat is usually a way to look at a captured scene, and I’m interested in what it becomes when it is a material instead, something a person can push around, recolor, hear and hand to a friend.
- digital media
- computer graphics
- scientific visualization
- software engineering
- information retrieval