Senior full-stack developer · Linux

I build software that lives close to the metal and ships to the edge.

Professional web experience since 2018, from database to frontend. I daily-drive NixOS, write Rust and TypeScript, and ship most of what I build in the open — a Wayland compositor, bots on Cloudflare Workers, and a pastebin on R2. The paid Stream control plane is the exception.

2018professional experience since
25technical posts
300+GitHub stars
Rust+ TypeScript, Nix

Where I've worked

Newest first — the résumé has the detail.

Full résumé
  1. 2021 – Present

    Independent DeveloperOpen Source

    Built and run Codebam Stream, a paid live-streaming control plane on Cloudflare; wrote the Telegram bot framework with 214 forks and 120 npm releases.

  2. Apr. 2021 – Oct. 2021

    Frontend Web DeveloperAssetDash

    Rebuilt the company site on Next.js, TypeScript and React with a Firebase backend; bounce rate down 15%, user engagement up 20%.

  3. Oct. 2019

    Assistant Automation CoordinatorElections Canada

    Kept polling-station computer systems online through the 2019 federal election alongside a team of 10+.

  4. Sept. 2019 – Apr. 2020

    Development InternAVROD

    Built a web store with Django and MySQL as a course placement at the company.

  5. May 2018 – Apr. 2020

    IT Student AdvisorTrent University IT

    Diagnosed and repaired student and faculty machines at the library front desk across Windows and macOS.

Selected work

Open-source projects and shipped services.

All repositories (opens in a new tab)
Viewport desktop shell showing its keyboard controls (on codebam.ca)

2026 · ★ 3

Viewport (on codebam.ca)

A Wayland compositor in Rust on Smithay whose entire shell — wallpaper, dock, window frames and titlebars — is a web page, composited zero-copy alongside native clients. Five interchangeable engine backends render that same page: WPE, WebKitGTK, Chromium, CEF and Servo.

Rustwaylandsmithaywpe-webkit

Latest writing

Notes from whatever I am taking apart.

All 25 posts

Podman Quadlets

Quadlets describe a container as a systemd unit, so systemd owns the lifecycle instead of Podman.

NixOS Flakes

What a flake actually is: inputs, outputs, and a NixOS configuration with every dependency pinned.