Here is a selection of software I have developed. Aside from my commercial side projects, these are primarily tools I built for myself and projects to learn and experiment.

Commercial

cluster-tabs

website
screenshot of cluster-tabs

A webextension to organize tabs into tab groups using AI

haskellnixoswebextension6441 LOC

pikabook

website
screenshot of pikabook

A service to turn family photos into a personalized coloring book.

haskellnixospurescript39776 LOC

Open Source

Image processing

colortransfer

repository
screenshot of colortransfer

A small tool to transfer colors between images.

haskelljuicypixelscolortransferimage-processing535 LOC

linear-gamma-resizer

repository

An quick and dirty C application to resize images using linear gamma

ccliniximage-processing247 LOC

CLI and TUI applications

github-ls

repository

A simple tool that uses the GitHub API to list your repositories.

cligithub-apihaskellnix537 LOC

hirc

repository
screenshot of hirc

A ground-up TUI IRC client written in Haskell.

brickhaskellirc-clienttui1612 LOC

pomonad

repository
screenshot of pomonad

A Pomodoro timer in the terminal.

nixpomodorotuihaskell550 LOC

til

repository
screenshot of til

A TUI for a logbook/diary.

haskelllogbooknixtui873 LOC

wordkell

repository
screenshot of wordkell

A TUI for playing Wordle.

tuitui-gamewordlehaskell6251 LOC

DSLs and Compilers

BrainHask

websiterepository

A BrainFuck interpreter written in Haskell.

haskellbrainfuckcompilerinterpreter1166 LOC

PlotDSL

repository

An experiment to play with the free monad and build a DSL for plotting.

haskellfree-monadplotdsl329 LOC

espbunker

repository

A Haskell DSL for describing ESPHome configurations using the indexed free monad.

dslesphomehaskellfree-monadindexed-monad3494 LOC

ghcaniuse

websiterepository
screenshot of ghcaniuse

GHC language extension support checker across compiler versions.

haskellghcghc-extensionsnixcompiler884 LOC

Haskell libraries

cloudinary

repository

Cloudinary API client in Haskell

cloudinaryhaskellhaskell-library454 LOC

lemon-squeezy-haskell

repository

A Haskell client library for the Lemon Squeezy API.

haskellhaskell-librarylemonsqueezyservant3305 LOC

stripe-haskell

repository

A haskell client library for the Stripe API.

haskellhaskell-libraryservantstripe3076 LOC

NixOS modules

my-xmonad

repository
screenshot of my-xmonad

My xmonad config

haskelltwmxmonadnixosnixos-module582 LOC

nixos-pg-basebackup

repository

NixOS PostgreSQL basebackup module

backupnixospostgresqls3nixos-module256 LOC

nixos-snapraid-btrfs

repository

NixOS module for snapraid-btrfs.

btrfsnixossnapraidnixos-module618 LOC

nixos-ssh-apps

repository

A NixOS module to expose CLI/TUI applications over SSH via a hardened, sandboxed NixOS container.

nixos-containernixos-modulesshssh-apps323 LOC

Nix tools

flake-templates

repository

A collection of templates to use with the Nix package manager

nixhaskellnix-flakenix-template544 LOC

nix-cache-lookup

repository

A github action to check if a flake attribute is already cached in any of the flake's binary caches.

cachegithub-actionnixnix-flake155 LOC

nix-remotion

repository

Nix tooling for rendering Remotion videos with Chrome Headless Shell and FFmpeg, using bun2nix to manage dependencies

nixremotionbunchrome-headless-shellffmpegnix-flake1630 LOC

Other

check-folder-copy

websiterepository

Webapp that traverses two directories to verify that their structures and files match

purescriptpurescript-concurwebapp1353 LOC

loggia

repository

Experimenting with the cofree comonad

cofreecomonadhaskell2314 LOC

syncbox

repository

A file server supporting streaming

fileserverhaskellservantstreaming807 LOC