01 Gaussian splats
Splashery
An interactive Gaussian splat playground.
It runs entirely in the browser. Pick a toy, a real captured object or one generated from a seed, then spin it, poke it, blow on it, splash paint on it, drop it, and watch it fall apart and come back. Make your own, and share it as a link, an embed, a GIF or a video.
On this page, the cloud beside this text is a small cousin of those toys: 96,000 splats, drawn by a renderer written for the page. Push the pointer through it, or drag to turn it.
I defined the project’s vision and its toy categories, refined the interaction design through hands-on testing, and contributed mathematical recipes.
On its shelves
- Waves and optics. A ripple tank that solves the 2D wave equation, and a light bench that traces rays with Snell’s law through lenses, mirrors, a prism, a glass block and a fiber.
- Sound. A Chladni plate whose sand moves live with the sound, and a song landscape drawn from measured features.
- Molecules and crystals. A viewer that opens PDB, mmCIF, SDF, MOL and XYZ files or fetches an entry from the Protein Data Bank, and hydrogen orbitals sampled from |ψ|².
- Volumes and imaging. CT, MRI and microscope scans opened on the device, with window and level, a transfer function and cut planes.
- Scale and sky. One continuous zoom from a galaxy down to a single molecular machine, and the night sky for any date, time and place.
- Earth and data. Real landscapes from public data, and a CSV turned into a scatter, bars or a surface.
- Math. A Lorenz attractor, a Klein bottle and a gyroid among them. Those three are redrawn on this page.
dx = 10 (y − x) dy = x (28 − z) − y dz = x y − 8⁄3 z
01 Splashery, continued
Recipes
A toy that is written, not scanned.
Splashery’s captured toys are real scans of up to 450,000 splats. Its generated ones are built from seeded recipes, so a saved scene rebuilds the same toy. A splat equation toy goes further and places every splat from equations in u, v and t.
Its Tinkerer’s Manual explains what one splat is (the Gaussian and its covariance), how a recipe is built, and the equation language. Another toy fits 2D Gaussians to a picture by gradient descent, step by step.
On this page, every form is made the same way in miniature. A seeded recipe a few lines long says where each splat goes, which way its stroke runs, and which ink it takes. The card at the top of the page lets you change one, or write your own in u and v.
Read the manual Write a recipe
sin x cos y + sin y cos z + sin z cos x = 0 scatter points, then walk each one onto the surface
02 Graphs for 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.
On this page, the figure is about the smallest such graph: a builder, a critic, one loop back, and a person at the stop.
three nodes, two edges, one loop back the node printed solid is a person
03 Words, rearranged
Ars Magna
An anagram of “anagrams.”
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.
On this page, the figure spells the proof of its name: ANAGRAMS and ARS MAGNA.
draw the word; keep every pixel the ink reached; drop a splat on each
04 Words, as pictures
aqrobat
QR codes, in character.
A local text and emoji QR lab. It builds QR artwork from letters, symbols or emoji, right in the browser.
On this page, the figure is a QR code built from splats instead. It is a real one, and it holds aqrobat’s address. Try a phone camera on it.
encode the address; add the check words; fill every dark module with splats; the hearts of the eyes take both inks
05–10 Also on the shelf
And six more
-
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 the application contacts no model provider itself.
-
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.
-
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.
-
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), auditable correction records, and a browser explorer.
-
Amordle
A free word game: any word length from 2 to 35 letters, three difficulties, a daily puzzle, and ranked multiplayer with an Elo rating.
-
The Speed-Accuracy Trade-Off in Perceptual Decision-Making
My undergraduate research capstone, April 2025. It models evidence accumulation as a diffusion process to study decision boundaries in a simulated autonomous-vehicle obstacle-avoidance scenario.
draw the character; keep every pixel the ink reached; drop a splat on each
Research
Interests
- Digital media
- Computer graphics
- Scientific visualization
- Software engineering
- Information retrieval
I’m in the MS program in computer science at the University of Cincinnati, concentrating in artificial intelligence. I started in August 2025 and expect to finish in May 2027. My thesis advisor is Dr. Yizong Cheng.
Before that I took a BA in mathematics and a BS in neuroscience, also at the University of Cincinnati.
r = 2 + cos ½u sin v − sin ½u sin 2v x = r cos u, z = r sin u y = sin ½u sin v + cos ½u sin 2v