I just picked up Joe Hill's latest novel, which earned a glowing review from The New York Times. I've only made it through the first couple of chapters, but it's already drawn me in. The writing is sharp and vivid, the atmosphere unsettling in that signature Joe Hill way. It feels like the kind of story that builds slowly, layering unease and mystery until you realize you're completely hooked. I'm looking forward to seeing where it goes.
PDF Generation
October 15, 2025 · uneasy.in/563b243
I've added a PDF generation feature to the blog that allows readers to download any post as a formatted PDF document. The system uses AWS Lambda with a Python function that converts markdown content to PDF using the ReportLab library. When someone clicks the Download PDF link on a post, their browser sends the post content to an API Gateway endpoint, which triggers the Lambda function to generate and return a properly formatted PDF file. I chose this serverless approach because it keeps costs minimal (typically under $0.02 per month for a personal blog) while providing real-time generation without pre-building PDFs for every post during the blog build process.
The implementation took some iteration to get right. I initially tried using WeasyPrint for PDF generation, but quickly discovered it requires system libraries that aren't available in the Lambda environment, so I switched to ReportLab which is pure Python. The design of the button also evolved through user feedback — starting with a prominent button with an emoji icon, then refining it down to a subtle text link Download PDF that appears inline with the post date, using a minimalist gray color that turns blue on hover. I also had to work through some technical challenges with CORS configuration and binary media type handling in API Gateway to ensure the PDFs download correctly as binary files rather than corrupted base64 text. The end result is a system that generates 2-10 KB PDFs in about 200-500 milliseconds, with proper formatting for headers, lists, code blocks, and other markdown elements.
Agentic Context Engineering
October 11, 2025 · uneasy.in/323b5fb
After reading a paper on Agentic Context Engineering, I realized my Claude Prompt Builder had been collecting valuable feedback data without actually learning from it. The paper explored how AI systems can refine themselves by analyzing their own context — and that struck a chord. My system already tracked performance across dozens of tasks, but it lacked a feedback loop. I decided to bridge that gap by introducing a new layer of self-awareness: the Context Evolution Engine — a module designed to analyze historical results and guide smarter prompt decisions.
The engine works quietly and safely. It’s feature-flagged, read-only, and non-disruptive, meaning it observes rather than alters live behavior. By grouping similar tasks through keyword and complexity analysis, it identifies which strategies have historically worked best. When a new task appears, it checks for pattern matches and offers transparent recommendations only if confidence is high. Early analysis of 41 feedback records revealed healthy consistency — no over-engineering and clear success clusters across styling, review, and debugging tasks. Everything remains stable and fully backward compatible, supported by 24 automated tests.
This project reminded me that meaningful improvement doesn’t require sweeping change — it comes from structured evolution. By adding a safe analytical layer, the Prompt Builder now has the foundation to grow intelligently, phase by phase. It’s a cautious but powerful step toward an AI that learns from real-world experience rather than static rules — the essence of agentic context engineering.