Learning and experiments
Lightweight notes on design processes, tools, and occasional poetry.
Letting Playwright take screenshots made my coding agent 10x better at fixing UI breakage
Jun 11, 2026 ・ 5 min read
How wiring up Playwright for E2E screenshots, and letting a coding agent view them, dramatically shortened the loop for fixing broken UI.
I finally learned about Knip, and dead code cleanup got much easier
May 26, 2026 ・ 4 min read
A note on Knip, a tool that finds unused files, dependencies, and exports in JavaScript and TypeScript projects.
I Built "nanj-dev-bu", a Claude Skill for Preserving Design Decisions as Forum Threads
Apr 14, 2026 ・ 8 min read
Why I built a Claude Code skill that discusses design topics in a forum-like thread, promotes conclusions into ADRs or specs, makes decision history easier to revisit, and accepts higher token usage as the tradeoff.
How I Recovered Design Understanding After Speedrunning Approval Buttons
Mar 25, 2026 ・ 2 min read
A note on the reverse-engineering prompt I use when I approve AI agent proposals too quickly and need to recover the Why behind the implementation.
My Strapi Plugin dist Was 22 MB — Fixing externals Brought It Down to 448 KB
Mar 11, 2026 ・ 3 min read
The dist of a Strapi v5 plugin built with @strapi/pack-up ballooned to 22 MB. The cause was a missing @strapi/admin entry in externals, and the way pack-up matches package names internally made the subpath workaround ineffective.
Building a CSV/JSON Import Plugin for Strapi v5
Mar 5, 2026 ・ 5 min read
I built an open-source Strapi plugin that lets you import CSV and JSON files through a wizard UI in the admin panel. This post covers the motivation, features, implementation decisions, and the v0.1 → v0.2 evolution.