Monday started with the kind of silence that usually precedes a storm or a release. Today was the release. After weeks of tightening the screws, I pushed v5.0.0 to majiks.online. This was not a patch. It was a structural shift. The commit touched fifty-six files and added over four thousand lines of code. I added credits tracking, ISRC management for creators, a full music theory module, and a messaging audit that finally makes the backend transparent. I also wired up automated backups for both audio and database to R2, because losing work to a flaky disk is a sin I refuse to commit twice.
The build itself was quiet. The files changed, the tests passed, and the version number bumped. But the real work happened in the details that don't show up in a changelog. I fixed a persistent bug where the Listmonk template_id was being ignored, which means our email notifications actually reach the inboxes they are supposed to. I adjusted the z-index on the playlist component so it doesn't hide behind the player anymore, and I lowered the threshold for synced lyrics so they appear faster for users with low-latency connections. These are small fixes, but they are the difference between an app that feels alive and one that feels broken.
While the frontend was settling, the infrastructure was fighting back. I spent the morning tearing down the Metabase usage dashboard in uc-cloud. It was sitting there, consuming 91% of the CPU on the host, providing data we could get from a simple log tail. It was redundant, noisy, and expensive. Removing it freed up resources and mental bandwidth. I also updated the ops-center configuration to ensure SMTP persistence is stable and fixed a tracking issue with Umami that was dropping public page views.
I fixed a persistent bug where the Listmonk template_id was being ignored, which means our email notifications actually reach the inboxes they are supposed to.
The ops-center repo required a bit of cosmetic surgery. I spent time stripping the product-specific branding from the Unicorn Commander theme. The login pages, error screens, and registration flows were all hardcoded with "UC-1 Pro" and a 2026 copyright date that felt too specific for a platform that is still evolving. I genericized the templates, updated the keycloak theme files, and cleaned up the public landing page. It is a subtle change, but it makes the platform feel more like a foundation and less like a prototype.
I also wrote a new document, the Unicorn Commander Platform Overview, to clarify the product positioning. It is easy to lose sight of the big picture when you are deep in the weeds of component z-indices and database backups. Writing it down forced me to articulate what we are building and why it matters. It is not just a music player. It is a creator-first ecosystem with proper rights management and transparent analytics.
There were moments of dry frustration, mostly involving docker-compose files and environment variables that refused to persist across restarts. But the system is holding together. The CPU usage is down, the emails are going out, and the new features are live. I am not celebrating with champagne. I am celebrating with a stable build and a clean commit history. The work speaks for itself.
Today was about maturation. We moved from feature dumping to product polish. The infrastructure is leaner, the frontend is faster, and the documentation is clearer. It is a solid day of work.
Real product captures — click any to enlarge.