Now Playing, status pages, and chasing zero CLS
A big stretch of personal site work: a new /status page, Last.fm "now playing" integration, Pi live stats, and a push to get Lighthouse CLS down to zero.
Busy run on the personal site this stretch. Highlights:
Blog structure: rolled every content category up under a single /blog/ path with a filter, made top-level pages (About, Contact) editable through the CMS, added a hidden category for draft/AI-related posts, and added drag-and-drop ordering to the admin collection list.
Pi live stats: wired up a small service on a Raspberry Pi to report system stats (CPU, memory, temperature — shown in Fahrenheit now), service health, and Lighthouse scores, surfaced in the site footer and homepage. Took a pass at making sure the request/polling code didn’t double up timers when a browser tab refocused mid-fetch.
/status page: built a public status page backed by a small edge worker that runs uptime checks and keeps a 90-day rollup, with a fallback view for when a monitor result is stale rather than letting it misreport as “down.” Added a markdown twin of the page and an entry in llms.txt for text-based crawlers, plus a privacy policy page (needed for an OAuth consent screen elsewhere).
Now Playing: added a Last.fm-powered “now playing” indicator — a small equalizer icon in the nav with a scrolling track display, and a matching “Now Spinning” card on the homepage. Tightened it up so only HTTPS artwork URLs ever reach the page, and fixed line-wrapping in the tooltip.
Performance: dug into Lighthouse results to push the score up from 89 — deferred gtag.js until first user activity, inlined the stylesheet, and then went after render stability specifically: matched fallback web fonts to real font metrics and server-rendered the homepage slider dots so nothing shifts on load. Got CLS down to zero. Also started tracking CLS as a trend over time in the audit runner and explored running audits from a second Pi so the numbers aren’t skewed by the one already carrying live-stats duties.
Also spent a little time organizing a personal media library — fixing some album metadata and cleaning up duplicate/junk files.
Quiet day otherwise.