Uncle Versace

Deploy Notes 05.03.2026

Random Thoughts from a Restless Mind

Category: Deploy Notes

Published On: May 4, 2026

The Droplets

Routine system updates and reboots across all three droplets — LEMP 1, LEMP 2, and Node.js 1. The usual apt update && apt upgrade -y followed by reboots, all came back clean. Bigger news on the infra side: upgraded all three to the Basic AMD / 1 vCPU / 2 GB RAM / 50 GB disk plan tonight. Nothing user-facing, but the extra headroom should help — especially on the LEMP boxes where the apps have been quietly outgrowing the previous tier.

uncleversace.com — v2026.5.1

A small but useful release. Added a Bluesky link to the social icons on the home page (now that I'm actually using it). Also ported over a new /sync-dev Claude skill — a tool that compares dev-environment scaffolding (skills, CLAUDE.md, configs, etc.) across all my projects and surfaces drift, so the four sibling projects stay in lockstep on shared conventions without me having to babysit it manually.

They Said It! — v2026.5.1 — theysaidit.app

Mostly tooling and infrastructure work this week — first release on the new WSL setup, with the /sync-dev skill ported over and various phpstan/phpunit config improvements that came along for the ride. No user-facing changes.

Accumulated Knowledge — v2026.5.1 — accumulatedknowledge.app

A couple of real bug fixes alongside the tooling work. Fixed a deck list pagination issue where the page parameter wasn't propagating to the URL (so refreshing or sharing a paginated link wouldn't preserve your spot). Also fixed an output escaping issue on deck descriptions inside the deck list — descriptions now render with proper sanitized HTML instead of escaped tags. Also got the /sync-dev Claude skill ported over.

uncleversacebot.com — v2026.5.1

The biggest release this week, by a wide margin.

  • Wheel improvements: Added the ability to toggle items on and off without deleting them (so you can temporarily exclude an entry from spins), added two quantity modes — split (default) and combined — for how items get weighted, and added delete buttons for wheel items directly on the spin page and a Winners section for tracking results.
  • Profile management improvements: Added a check-in history grid to the show page, plus banner notifications on profile management/index pages that have something worth flagging.
  • Premium / data retention scaffolding: Started laying the groundwork for time-gated queries — the foundation for premium tier features and data retention rules down the road.
  • Custom commands variable refactor: Reworked the variables mechanism inside custom commands to make it cleaner and more flexible.
  • From-chat command management: This one's a big quality-of-life upgrade. Built-in commands now carry the same permission system as custom commands, custom override triggers can be set on built-in commands, commands can now be managed directly from chat (no dashboard required for a lot of common operations), and channels can opt in to a public, toggle-able commands page so viewers can browse what's available.
  • Twitch integration scaffolding: Started laying down the proper Twitch integration scaffolding on User and Channel models — phase 2 work.
  • User/channel management: Added user/channel management to the admin dashboard so I can easily onboard people, plus the ability to delete users from admin.
  • Task board polish: A few cleanup commits for the task board feature from last week — fixed bad polling routes that were getting blocked by the API firewall, fixed the widget background, and tidied up some general code issues.
  • Maintenance mode: Fixed maintenance mode (it was misbehaving), and resolved an indexing issue on a few pages.

uncleversacebot (Node.js) — v2026.5.1

The Node.js bot got a real overhaul this week, mostly to support the dashboard's new dynamic channel management.

  • Dynamic channel polling: The bot now polls a /api/channels endpoint on the dashboard to figure out which channels to monitor, instead of relying on a hardcoded TWITCH_CHANNELS env var. Both chat.js (Twitch IRC) and stream.js (Helix poller) reconcile their channel lists on a configurable interval, so adding or removing a channel in the dashboard now propagates to the bot automatically.
  • Reliability fixes for stream.js: Made sure the state directory exists at startup (so a fresh deploy doesn't crash on first run), isolated state-save errors so they don't take down the whole poller registration, and differentiated Helix auth errors (401/403) from other 4xx/5xx responses so the bot doesn't burn through token refreshes for unrelated transient errors.
  • Tooling/scaffolding catch-up: Initialized Claude on this repo, ported over the /update-release-version and new /sync-dev skills, added a CLAUDE.md, .editorconfig, .env.example, .gitattributes, and a CHANGELOG. Now properly aligned with the rest of the projects.

On Deck

The home page CMS migration is still on the back burner — no decision yet. For Accumulated Knowledge, the Scryfall artwork sync cron job is still on the to-do list. For the bot, phase 2 work continues (proper Twitch integration, premium scaffolding, more from-chat management improvements). And for the Node.js bot, removing the TWITCH_CHANNELS env var fallback once the dynamic poller has soaked in production for a while.