Plutonic Rainbows

Entropy

You get to create temporary pockets of order, beauty, meaning, and experience inside a universe that is always unfolding.

The Unquiet Past

I keep a collection of vintage fragrances hidden away in drawers — bottles from the 1980s and 1990s that seem to hold their breath in the dark. I seldom touch them, yet I cannot bear to let them go. They feel less like objects and more like fragments that have slipped into an afterlife, familiar but no longer belonging to my world. Whenever I think of opening one, I sense the eerie autonomy of the past — how something once ordinary can become mournful and faintly threatening simply by surviving beyond its time.

A fragrance from that era does not summon a simple memory; it resurrects an entire atmosphere. One breath would bring back a decade with startling precision: the colours, the confidence, the textures of a vanished social world. And yet that world would return without context, stripped of the life that once animated it. It would feel like viewing an old mall through degraded film stock — recognisable, but ghostly; intimate, yet hollowed out. These scents carry the residue of human presence, but none of the presence itself. That absence unsettles me more deeply than I like to admit.

There is something profoundly uncanny about the recent past, especially when it returns through objects that should have remained fixed in memory. The bottles in my drawers seem almost familiar but just out of reach, as if they belong to a timeline I no longer inhabit. They have slipped free of the era that created them and now exist on their own, adrift, exerting a quiet pressure on the present. Their very survival feels like a small act of defiance, as though the past has developed its own momentum. I don’t remember them so much as feel them watching, waiting — alive in ways I can’t fully explain.

That is why I keep them sealed away. In ordinary remembering, I summon the past; but with these fragrances, it feels as though the past would summon me. One scent could pull me into a sense of déjà vu mixed with grief, presenting a version of myself I can no longer reach. The reversal of control is the truly sinister part: something inert — glass, liquid, a label — seems capable of acting on me. These bottles hold no narrative, no explanation, only traces of life without the life itself. They feel slightly malevolent not because they threaten harm, but because they remind me how thoroughly time can erase meaning while leaving the evidence intact.

And yet I cannot discard them. Their presence is unsettling, but their absence would feel like erasing an entire section of my own history. So they remain in the drawers, patient and self-possessed, like ghosts caught between worlds. Sometimes I open the drawer a fraction and glimpse a faded cap or the darkening of vintage juice, and the air seems to tighten. It is as if these fragments of the past still breathe in their own strange way — out of time, out of context, and utterly beyond my control.

King Sorrow

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

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

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.