CDK
A CDK Lambda Bundle-Size Gate for CI
A deploy in one of my CDK projects passed every gate I have — CI, cdk synth, code review — and merged. The CloudFormation stack deployment to AWS failed with: InvalidRequest: Unzipped size must be smaller than 262144000 bytes 262,144,000 bytes is 250 MiB, AWS's hard limit on
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 - 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 and
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
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
Securing AWS S3 with Cloudflare: The Worker Direct Fetch Pattern
When building a React SPA with Cloudflare as the CDN it is possible to use S3 for static asset storage. If you have all of your resources typically on AWS, but want some of the advantages of Cloudflare, you can build a system that is very similar to the traditional
Ghost on AWS: ActivityPub Federation
Ghost recently released ActivityPub support, enabling Ghost blogs to participate in the Fediverse alongside Mastodon, Threads, and other federated platforms. Through extensive testing and production deployment, we discovered that the official ActivityPub container has a bug that prevents self-hosted ActivityPub deployments from working. Combined with AWS-specific networking challenges,
Ghost on AWS: Email and Newsletter Automation
Ghost handles email differently than most CMS platforms. It ships with newsletter capabilities built-in but requires external SMTP for transactional emails and lacks automated digest features entirely. This post covers setting up both transactional email through Mailgun and building an automated weekly digest system using AWS Lambda and EventBridge.
Ghost on AWS: S3 Storage and CloudFront CDN
Running Ghost in containers presents a storage challenge. Container filesystems are ephemeral - when a container restarts, any locally stored files disappear. This includes all uploaded images, making local storage unsuitable for production Ghost deployments on ECS. The solution uses S3 for persistent storage and CloudFront for global content delivery. Ghost