portfolio

Vulkan/Slang Renderer (2025/2026)

sdf music visualiztion viking room

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)

clef screenshot

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.