projects

omnia#

present (work in progress)

  • Rust
  • Axum
  • SQLite

omnia is a work-in-progress tag-based file organizer. I'm working on this because I wanted a general-purpose tag-based file organizer for saving and sharing memes, wallpapers, music, textbooks, and other files, but none of the existing softwares had all the features I wanted. I plan to support files of any type, full-text search, predicate-based access control, and external file libraries. This is a ground-up redesign of an older project that I am no longer satisfied with.

reverie#

present (work in progress)

  • Rust
  • Slang
  • Vulkan

reverie is a work-in-progress voxel rendering engine. I've been working on it on and off for a while, but most of my current progress is in backend Vulkan abstractions and multithreading technicalities. Because of this, I haven't actually tackled the bulk of the voxel rendering and graphics work yet, but I've mostly planned out the engine architecture already.

qalc.nvim#

(undergoing rewrite)

  • Lua
  • C++
  • Neovim
  • libqalculate

qalc.nvim is a reactive text-based calculator inside of Neovim. It allows you to write expressions that depend on others, edit their values, and watch the results update in real time. With libqalculate as a backend, advanced features like unit conversion, algebra, and calculus are available and integrated with diagnostics, syntax highlighting, and autocompletion support.

lwk#

(undergoing rewrite)

  • Lua
  • HTML
  • CSS
return Document {

	lang = 'en',

	head {

		meta { charset = 'UTF-8' },

		title 'Hello world!',

	},

	body(p 'Hello from Lua!'),

}

lwk (Lua Website Kit) is a web templating engine/SSG in ~1300 SLOC. It's mostly a bespoke tool made for this website because I got tired of hand-writing HTML and CSS but didn't want to use a complex JS framework. It allows pages, templates, and reusable components to be authored with a Lua-based DSL, compiling them into raw HTML+CSS. It also supports file handlers (powerful enough to do something like write a markdown processor).

sidechain#

  • Rust

sidechain is a simple bulk audio transcoder. The existing solutions I found for mirroring lossless music libraries to lossy formats had limitations of some kind, so I made this. Designed to be run in a cron job or systemd timer, it uses SQLite to track files and ffmpeg to transcode them, skipping previously transcoded tracks and passing through lossy tracks, album covers, and other non-audio files.

raytracer#

  • Rust
  • GLSL
  • OpenGL ES
  • egui

raytracer is a path-tracing renderer that supports simple objects (ellipsoids and boxes). It uses a naive stochastic method to approximate realistic lighting, implemented in a fragment shader in OpenGL for GPU acceleration. It's written in Rust using egui for UI interaction and can run either in the browser (via WebAssembly and WebGL) or as a native application. It's not super optimized and was mainly built while I was learning basic graphics programming concepts.