Uncle Versace

Deploy Notes 05.10.2026

Random Thoughts from a Restless Mind

Category: Deploy Notes

Published On: May 10, 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.

uncleversace.com

No changes this week.

They Said It!theysaidit.app

No changes this week.

Accumulated Knowledge — v2026.5.2 — accumulatedknowledge.app

A solid mix of user-facing improvements this week.

  • About page — Added a proper About page that walks through why the project exists, the story of how it went from a notebook to a spreadsheet to a Symfony app, what it's for, who it's built for, and where things stand. Long overdue.
  • Blog page — Added a public-facing blog for the site, kicking it off with the first post: "Why I built Accumulated Knowledge." The blog page is linked from the navbar and the sitemap, so search engines can find it.
  • Prefill from last match — The match quick-add form now has a "Prefill from last match" button that copies over your deck (when you've stuck with one all event), bracket, and opponent count from your most recent round. Saves a bunch of clicks when logging multiple matches in the same event.
  • Smart deck autofill — The form now defaults to your last-used deck only if you haven't rotated decks within the event yet. Once it sees you've switched decks at least once, it stops guessing.
  • Improved deck stats — Deck show pages now display the min/max game duration and min/max turn count alongside the averages, with a "small sample size" indicator when there are fewer than 5 games to draw from.
  • Tightened home page copy — Reworked the hero text to better reflect what the site actually is for new visitors.

uncleversacebot.com — v2026.5.2

The biggest release this week, by a wide margin.

  • Check-in improvements — Added dashboard restore functionality and from-chat management for check-ins. Also removed the auto-check-in logic that used to fire when a stream went live (it wasn't fitting cleanly with how the rest of the check-in system was evolving).
  • Bingo customizations — Bingo games can now be customized with different grid sizes and free space configurations, plus full from-chat management for running games. Also refactored the Bingo show page's JS into a proper Stimulus controller and moved Bingo ownership checks into a Voter.
  • Undo last call (Bingo) — Added an "undo last call" mechanism to Bingo games, so mistakes in chat or on the dashboard can be reverted cleanly.
  • Channel Brand + widget theming — Channels can now define a brand (colors, etc.) and have it applied to their widgets, so the OBS-embedded widgets actually look like part of their stream instead of generic.
  • Owner widget preview — Creators can now preview their own widgets from the dashboard, which makes iterating on theming a lot less painful.
  • Widget permalink scaffolding — Started laying down permalink support for widgets, starting with Task Board widgets. The goal is stable URLs that channels can reuse across OBS scenes without re-copying.
  • Navbar restructure — Cleaned up the My Account dropdown so it's better organized as more profile features get added.
  • StreamLog refactor — Refactored StreamLog and related code in preparation for the Twurple migration on the Node.js bot side (more on that below).
  • Deployment process — Updated the production deployment steps to handle PHP-FPM and OpCache more carefully (stop FPM before the cache rebuild, then start FPM after, to avoid workers serving stale paths during the swap).

uncleversacebot (Node.js) — v2026.5.2

The big infrastructure change this week was switching the Node.js bot's Twitch integration library from tmi.js to Twurple — a more modern, actively maintained library that better supports current Twitch API patterns.

  • Chat client migration — chat.js now uses Twurple's ChatClient + StaticAuthProvider instead of tmi.js. The backend payload shape is preserved via a lib/userstate.js adapter that translates Twurple's ChatMessage into the tmi.js-shaped userstate JSON the dashboard has historically received, so no backend changes were needed.
  • Helix client migration — stream.js now uses Twurple's ApiClient + AppTokenAuthProvider for live-status polling. App access tokens are auto-refreshed by Twurple, so the manual token refresh logic (and the axios dependency it relied on) is gone.
  • Process cleanup — Removed the server.js heartbeat process (PM2 keeps things alive on its own) and the one-off test.js filesystem check. The axios dependency was removed entirely; Twurple plus native fetch cover all HTTP. Also fixed a stale main field in package.json and updated the homepage URL.
  • Deployment note — On the first deploy after this release, the retired server PM2 process needs to be removed via pm2 delete server and then pm2 save. One-time cleanup.

On Deck

The home page CMS migration is still on the back burner. For Accumulated Knowledge, the Scryfall artwork sync cron job is still on the to-do list, and now there's a blog to build out further. For the bot, the Twitch integration scaffolding work continues — proper "Sign in with Twitch" flow, TwitchAccountLinker, and the pre-link admin page are next. And for the Node.js bot, removing the TWITCH_CHANNELS env var fallback once the dynamic poller has soaked in production for a while.