Side projects and hobby builds — things I made for fun, to scratch my own itch, or just to learn something new. For my professional work, see experience.
Twitch Apex Stats
● activeApex Legends stat overlays & chat commands for Twitch streamers.
A suite of tools — stream overlays and chat commands — that let Twitch streamers show off and track their Apex Legends stats live, right from their broadcast and chat.
LaravelNext.jsReactTypeScriptMariaDB (Galera)KubernetesTwitch APIStripePatreon
ModTrack
● activeTime-tracking & invoicing for contracted ALGS broadcast moderators.
An internal tool built for a client: contracted Twitch & YouTube moderators on the official Apex Legends ALGS broadcasts log their moderating hours and generate invoices. An admin panel handles job creation, extra job benefits, and invoice review/processing, with a Wise integration that collects each moderator's payment details for payout.
Next.jsTypeScriptMariaDBKubernetesWise
◉ private · client tool
glsms
● activeSend & receive SMS through GL.iNet cellular routers — Go library, REST server & CLI.
A Go library, REST server, and interactive terminal UI (built with Bubble Tea) for reading and sending SMS through GL.iNet cellular routers on firmware 4.x. The SMS JSON-RPC protocol was reverse-engineered by probing a live GL-X3000 / Spitz AX, and it ships as a single CLI with prebuilt binaries for Linux, macOS, and Windows.
GoBubble TeaJSON-RPCREST APIGoReleaser
Patreon Local Library
● activeSelf-hosted archiver that pulls creator videos into Plex with AI captions.
A personal, self-hosted tool that routinely checks the creators I support on Patreon (but site support expanded to YouTube, Nebula, and Floatplane), downloading new videos along with their thumbnails and metadata into a SQLite database. Each video runs through a local instance of OpenAI's Whisper to generate closed captions, and a Next.js control UI doubles as a Plex metadata-agent source so everything lands in Plex with proper details. The download and captioning workers are horizontally-scalable, multi-instance Node processes. This all results into captioned video libraries with great app support across web, mobile, and TV from a single source.
Next.jsTypeScriptNode.jsSQLiteOpenAI WhisperPlex
◉ personal · self-hosted
Apex Legends Comp Review
● archivedALGS pro player & team stats, analytics, and stream-performance tracking.
A now-discontinued analytics site that collected Apex Legends pro esports stats from ALGS tournament matches. Player and team profiles surfaced match history and performance analytics alongside live Twitch/YouTube stream status, plus stream and video performance tracking. Python workers pulled data from the Twitch and YouTube APIs, behind a Laravel backend on a MariaDB Galera cluster.
Next.jsTypeScriptLaravelMariaDB (Galera)KubernetesPythonTwitch APIYouTube API