Skip to content

Long-form bio

This is the Starlight-themed bio, served via the docs collection — same content as the sci-fi about page, just rendered in reading-mode typography for those who prefer the clean docs look. Both URLs are stable.

Software engineer who turns “that’ll take months” into “it’s already in prod.” Based in Vancouver, BC, currently at Monstercat. Day job is systems work in Go, PostgreSQL, and TypeScript. The rest goes into a homelab that started small, kept compounding, and now hosts a quiet little corner of services for friends, family, and future-me.

My passion for computing ignited at age nine, when I first encountered a BASIC animation of a stick figure pushing a box. I memorized the entire script on the spot, despite barely knowing any English. That spark led me to enroll in a computer cram school in Korea, where I dove into BASIC and started crafting my own simple games. By grade six, I’d earned a spot on the honor roll of the National Personal Computer Competition (전국 퍼스널컴퓨터 경진대회) in Korea — competing among adults with Turbo C 2.0, dBase III, and Lotus 1-2-3.

Facing the 64-tile limit of animation on an IBM 286 AT pushed me to teach myself C and C++. When my family moved to Canada, I tested directly into Computer Science 12 as a grade-nine student. The next year (June 1996), I earned another honor-roll nod in the Canadian Computing Competition, writing algorithms in Borland C++ 3.11 as one of the youngest in the province.

Life steered me into other ventures through my 20s and 30s. The passion never faded, but the keyboard time did. At 40, I came back to it full force — working days, pursuing my Computer Science degree by night. Today I’m a full-time software engineer doing what I’d been chasing since the BASIC stick figure: building software and solving problems through code.

Most of my open-source work orbits Neovim and the workflow of operating a homelab from inside it. The plugins below are mine; they’re all on GitHub and they’re each MIT-licensed.

“If the terminal is home, this config is the furniture.”

autovim is the opinionated Neovim distribution I actually live in. It’s built on top of LazyVim and bundles the rest of the plugins on this list into a cohesive editor for AI-assisted development in Go and TypeScript. Single-command installer with OS-detected branches.

What it solves: piecing together LSP, debug, AI integrations, terminal workflows, and remote-development plumbing is a project. By the time you’ve finished, three of the pieces have shifted underfoot. AutoVim treats the whole stack as one thing — versioned, installable, opinionated. If you don’t agree with my opinions, fork it and edit ten lines.

auto-agents.nvim is the multi-agent panel inside AutoVim. Run Claude, Codex, Gemini, and Copilot side-by-side as named slots, each with their own knowledge base scope, status reporting, and per-agent model configuration. They share a navigation dock; F5 cycles among them; you treat them like terminals because that’s what they are. The orchestration glue (status sync, model auto-detection, panel-aware keybinds) is the part you don’t see.

worktree.nvim is a comprehensive worktree manager for multi-repo projects. Switch between worktrees, add new ones, remove the ones you’ve shipped — all without leaving the editor. Built because git worktree add and a sticky note on my monitor wasn’t a workflow.

gitsgraph.nvim is the multi-repo + worktree git graph that pairs with the worktree manager. Three-pane floating panel: repo picker, IntelliJ-style graph, live commit preview. Pull, fetch, destroy worktrees from the picker. I built it because gitgraph.nvim is great but shows one repo at a time, and I live in five.

md-harpoon.nvim is six markdown previews pinned to single-letter slots (q w e a s d), with persistent cursor state across slot switches. I write a lot of markdown — runbooks, ADRs, blog drafts, the knowledge-base documents that keep my agents grounded. Six slots is enough; ten is too many.

remote-sync.nvim is the local-first, git-backed rsync workflow that lets me edit my homelab’s configuration on my laptop and ship it to the VPS without ever SSHing for editing. Every directory has a small .autovim-remote.json describing where it goes, what to exclude, and a per-directory list of named commands the plugin can dispatch (build, deploy, reload nginx, etc.). It’s how this very site is deployed.

If you’ve read this far, you’ve probably noticed the through-line: I want to operate a homelab from inside Neovim, with Claude as a working pair, without my workflow ever leaving the keyboard. The plugins are how I got there. The blog posts are how I remember what I learned along the way.

If you’re working on similar problems — multi-agent orchestration, remote-first development, Go + Postgres at scale, the boring-but-essential plumbing of self-hosting — I’m always interested in trading notes. The contact page has the channels.