💧 The DropletsRoutine Sunday maintenance, plus some runbook hardening that came out of a real near-miss....
Continue reading...Deploy Notes 06.22.2026
Random Thoughts from a Restless Mind
Category: Deploy Notes
Published On: June 22, 2026
💧 The Droplets
Routine Sunday maintenance, run a day late - packages updated and reboots applied across LEMP 1, LEMP 2, and Node 1. The one non-routine note is a security housekeeping pass: production secrets are moving off the bare .env.prod filename onto the self-protecting .env.prod.local (it matches the gitignore rule, so prod secrets can't be committed by accident), and the home site got a precautionary APP_SECRET rotation. The rotation only invalidates active sessions, so the only visible effect was a forced re-login.
🏠 Personal Home Page - v2026.6.3
The site finally has a real About page. The home page has always been the terse, bullet-point version of me; /about is the warm, first-person version - a few actual paragraphs with some personality, a portrait (with Hubert!), and the through-line of how a would-be film composer ended up writing software. It does real SEO work too: the blog's author now resolves to a concrete author entity (Person structured data) instead of pointing back at the homepage, which is a cleaner E-E-A-T signal. Linked from the navbar and footer.
Behind the scenes, this release kicked off a standardization push that rolled out across the Symfony projects: a documented .env file standard (a committed, diffable key map plus .env.example, with secrets confined to gitignored override files), GitHub Actions CI pipelines running PHPStan, PHPUnit, and php-cs-fixer on every push, and some QA hardening so the test suites now fail on new deprecations instead of quietly accumulating them.
🎬 They Said It! - v2026.6.3 - theysaidit.app
The home page leads with a poster carousel now - the most-popular movies that actually have artwork, in an auto-rotating, swipeable hero. It respects reduced-motion preferences (no autoplay if your OS asks for less animation) and degrades cleanly to nothing if there's no art to show, so it never renders an empty frame. The "behind the scenes" stats block that used to sit up top got moved to the bottom, now that there's real content to lead with.
🧙 Accumulated Knowledge - v2026.6.3 - accumulatedknowledge.app
New pace stat: Average Time per Turn, sitting alongside the existing average game duration and turn count on both deck pages and format pages (including the per-bracket breakdown). It's derived from data already being recorded - game start/end times over turn count - so there's nothing new to track; anything without enough data just shows a "Data Pending" state.
🤖 Uncle Versace Bot (dashboard) - v2026.6.3
An SEO-and-polish pass. Shared links finally render a proper preview card: there's a real 1200x630 Open Graph image (regenerable from the brand palette via a new console command) in place of the literal "PLACEHOLDER" string that was shipping before, so pasting a dashboard link into Discord or Twitter shows something real. robots.txt and sitemap.xml exist now (both used to 404), pointing crawlers at the public pages and away from the dashboard, admin, and API. Login, roadmap, auction, and bingo-card pages picked up proper meta descriptions and OG titles, and a couple of accessibility gaps got alt text.
💬 Uncle Versace Bot (Node.js) - v2026.6.3
This is the fix for the bug where the bot would silently vanish from every channel and not come back until I manually restarted it. Twitch periodically drops the chat socket and the library usually reconnects, but it could get stuck connected to nothing while the process stayed alive - and PM2, which only restarts on a crash, never noticed. There's now a connection watchdog that detects a prolonged disconnect and exits on purpose so PM2 does a clean restart. An automatic restart in the logs is now the fix working, not a crash.
The rest of the release is hardening around that: graceful shutdown that drains the queue before exit (so a reload doesn't drop the last batch of events), per-request timeouts on dashboard API calls, a bounded request queue that can't grow without limit during an API outage, a fix so a transient dashboard outage during a reconnect can't accidentally part the bot from every channel, startup env validation that fails fast with a clear message, leveled logging to keep production quiet, and a versioned PM2 config. It also picked up a real unit suite (76 tests). The wire format between bot and dashboard is unchanged, so this one deployed on its own with no dashboard lockstep.
🔮 On Deck
The real test of the bot watchdog is the wild - the zombie-disconnect incidents have clustered around Monday evenings, so the next one or two of those windows are where I'll confirm it actually self-heals. Also queued up: getting Node 1 off its end-of-life Node 20 and onto Node 22 LTS, and turning the new CI pipelines into enforced branch protection now that they're running.
More in Deploy Notes
Deploy Notes 06.07.2026
💧 The DropletsRoutine maintenance — system packages updated, reboots applied, no infrastructure changes....
Continue reading...Deploy Notes 05.31.2026
💧 The DropletsNot a routine week. The headline was bumping the PHP Redis client extension (ext-redis)...
Continue reading...