portfolio
Vulkan/Slang Renderer (2025/2026)

This is the main project I worked on in my time at Recurse Center. It's a continuation of the official Vulkan tutorial, with a number of additions:
- hot reloading for Slang shaders
- code generation for type-safe shader bindings using Slang's reflection API
- pipelined compute shaders, when a dedicated queue is available
- a number of examples using it, including:
- 2D sprite rendering
- 3D ray marching & mesh rendering
- 2D SDF-based music visualization with beat synchronization
- a watercolor painting program using a 2D fluid sim
Clef (2022/2023)

A desktop music player built with Iced, Symphonia, and SQLite. It's intended to work well with a local music directory of Bandcamp downloads.
In addition to getting familiar with audio APIs, this ended up being a way to explore using Rust for desktop software, and try out Iced's Elm-like approach to background worker threads.
World Burner (2019/2020)
A character creation tool for the Burning Wheel RPG, built with Elm and Rust. Includes a from-scratch implementation of drag and drop, and a form of serialized predicates for dependencies between character options (eg, Knight requires either Squire, or any professional soldier lifepath).
Vibe Spam (2022)
A chat server that only allows emoji, built with Elm, Rust, and GraphQL subscriptions. This was largely a way to experiment with one of the Elm GraphQL libraries.
Typeshift Solver (2023)
A solver for Typeshift, a word game that currently lives at puzzmo. This was mostly a way to try out different approaches to perf testing in Rust, with both criterion and insta snapshots of cycle/step counts.
White Wolf Bot (2018)
A discord bot for rolling dice in White Wolf games. A group of friends made regular use of it for a few years. This was my first Rust app, and first software with actual users.