subaud
When I stumble upon an unsolved or undocumented problem and solve it, I like to document it here.
Printing Zebra Labels from a Browser
A friend runs a lab with custom software that handles sample tracking, inventory management, and reporting. It does nearly everything they need — except print labels. They have Zebra thermal printers on the network and a collection of ZPL templates, but the software has no integration with the printers, so printing
MixCraft - Adding Claude Skills to the music assistant
MixCraft connects Claude to Apple Music. The infrastructure post explains why the server is hosted remotely — Apple Music requires server-side JWT signing with a private key, so a local MCP server wasn't an option. This post covers the other side: the Apple Music integration itself, the adapter pattern
MixCraft - A hosted music assistant MCP
Several months ago, I was looking for some new music and decided to give Claude a crack at finding me some new music. i'm trying to make an album based playlist. It should consist of 3 (mostly) complete albums. Right now I have Hum - Downward is Heavenward
Teaching Claude to Teach AWS
A friend had been building a web app with Claude Code — Express server, vanilla HTML/CSS/JS, in-memory data storage. The app worked and kept growing. But it was running on her laptop with no deployment, no database, and no auth. She needed to get it to AWS and had
Modernizing a CDK Project - WebSocket Server with Fargate
I recently revisited cdk-websocket-server, a demo I published in 2023 for running a WebSocket server on ECS Fargate behind CloudFront. The original worked, but it carried unnecessary complexity — EC2 instances backing a Fargate cluster, a custom Lambda to patch CloudFront headers, and a single-stage Docker build running as root. Here&
Modernizing a CDK Project - Private RDS with Lambda
I recently revisited a CDK project I published in late 2022 — cdk-private-rds-with-lambda — and ended up rewriting most of it. The original worked fine, but it carried complexity that didn't earn its keep: projen for project management, an EC2 bastion host for database access, password-based auth via Secrets Manager,
Event-Driven Claude Code and OpenCode Workflows with Hooks
I needed a plugin that could run a multi-phase workflow autonomously — start a task, wait for it to finish, check the result, start the next one. I built it in Claude Code using Stop and SubagentStop hooks, then rebuilt it in OpenCode using session.idle events. Both work. The orchestration
Distributing OpenCode Plugins via npm
OpenCode plugins have three extension points: tools, skills, and commands. They're discovered differently, and two of the three work automatically from an npm package. Commands don't. This post documents how I set up a bunx setup script to handle the gap. How OpenCode discovers plugin artifacts
Claude Code Hooks and the Statusline
The feature-workflow plugin tracks features in files (docs/features/[id]/plan.md), but that state isn't visible without reading the files. Multiple terminal tabs running Claude Code have no indication of which feature each is working on. The statusline integration solves this by writing the current feature ID