Blog

Learning and experiments

Lightweight notes on design processes, tools, and occasional poetry.

How wiring up Playwright for E2E screenshots, and letting a coding agent view them, dramatically shortened the loop for fixing broken UI.

Playwright
E2E
AI Agent

A note on Knip, a tool that finds unused files, dependencies, and exports in JavaScript and TypeScript projects.

Knip
TypeScript
JavaScript

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.

Claude
AI Agent
ADR

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.

AI Agent
ReverseEngineering
Prompt

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.

Strapi
TypeScript
Build

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.

Strapi
TypeScript
OSS