I make small tools for oddly specific problems.
A 2D puppet engine where an AI agent does the rigging. A CLI that untangles your YouTube Music likes. A city builder where every commute turns into traffic. Each one gets a unit number the day it starts.
25 units so far, 21 of them live right now. Browse the catalogue
Units on file
Real products, libraries and a few experiments, every one of them shipped.
Listed by preference, numbered by build order. Purple tape means you can try it live.
hyperclaude
Unit 16Claude Code plugin where Claude plans and writes the code and Codex reviews it read-only, looping until Codex has nothing blocking left.
Claude Code plugin · Codex CLI · Node.js · git
Demo
chordotomy
Unit 23Local harmony analyzer that finds a recording's chords on the beat, inversions included, and labels them with Roman numerals that flag secondary dominants and borrowed chords.
Python · librosa · lv-chordia · Beat This! · Vanilla JavaScript · Claude Code plugin
Demo
WC2008 Rating Lab
Unit 21Tracker for the CPU ratings in Yu-Gi-Oh! World Championship 2008 (DS), with a headless emulator harness that played 1,600 tournaments and pinned down the game's rating formula.
React · TypeScript · Firebase · Recharts · Python · melonDS DS
Demo
tangent
Unit 22Studio where Claude Code agents make Korean math and science Shorts, from topic to upload file, with code-rendered Remotion animation and a human approving at checkpoints.
Claude Code agents · Remotion · TypeScript · KaTeX · Gemini TTS · Codex CLI
Watch on YouTube
like-surgeon
Unit 15Fix the mismatches between your YouTube Music liked songs and YouTube likes — swapped, duplicated, missing and dead songs. A local CLI that fixes only what it can prove.
Python · ytmusicapi · YouTube Data API v3 · SQLite · SQLAlchemy · Typer
View on PyPI
Commentarium
Unit 05Chrome extension that adds a social layer to any page with ratings, comments, and community voting.
Chrome Extension · Next.js · React · TypeScript · Firebase
Demo
Pokémon Numerals
Unit 18A numeral system where n is the Pokémon with National Pokédex number n, shown on a live clock and a converter, with a silhouette hardcore mode.
Vanilla JavaScript · BigInt · CSS · PokéAPI · Node test runner · GitHub Pages
Demo
LeetCode Study
Unit 19A LeetCode study log kept as GitHub Discussions and published with Repozine, plus a Claude Code plugin that gives one hint level at a time instead of handing over the answer.
Python · Claude Code plugin · LeetCode GraphQL · GitHub Discussions · GitHub Actions · Repozine
Demo
Next.js Firebase Boilerplate
Unit 07A Next.js + Firebase starter where the server does the Firebase work: session cookies verified by the Admin SDK, and per-user Firestore data.
Next.js · Firebase Admin SDK · Firebase Auth · Firestore · TypeScript · Vitest
Demo
KakaoTalk Viewer
Unit 03Browser-only viewer for KakaoTalk export files with search, date navigation, and multi-platform parser support.
Preact · TypeScript · Vite · Tailwind CSS · Vitest
Demo
Number Lab
Unit 25Seven browser machines for famous number facts, from Kaprekar's constant to aliquot sequences, each doing its arithmetic live as you watch, with no libraries.
Vanilla JavaScript · Canvas · Web Workers · BigInt · Web Audio · Node test runner
Demo
Backend Interview Guide
Unit 06Korean backend interview guide organized across database, cloud, system design, and programming, drafted and reviewed with Codex, Claude Code, and an agent harness.
Codex · Claude Code · Agent Harness · Markdown · Python · GitHub
Demo
Fairy of Grass
Unit 02GitHub Actions template that auto-generates daily contributions by creating scheduled empty commits.
GitHub Actions · Cron Schedule · Template Repository · Git
SourceLab notes
Build logs from the units above: what broke, what I measured, and how it got fixed. Every one is also in Korean.
-
Oct 6
The Like Never Movedlike-surgeon
When a song's upload dies, YouTube Music seems to move your like to a replacement. It doesn't. Liked songs is your YouTube likes shown in the same order, and lining the two lists up shows which like is behind every song.
한국어로 좋아요는 옮겨진 적이 없었다
-
Oct 4
Renderable Isn't GoodIki
Getting an agent to draw and rig a 2D character that looks right took a reference to aim at, a critic that isn't the artist, and a second reference for the head turn. The turn is still the weakest score.
한국어로 렌더된다고 잘 만든 건 아니다
-
Oct 3
From 0.52 to 0.90: Five Steps to a Better Chord Analyzerchordotomy
How chordotomy's chord accuracy climbed, from a DSP-only first version to a pretrained model with better beats, and what each step cost.