Dispatch 209
Week ↗

Branding the unicorn and tracking the noise

Tuesday started with a branding sprint that felt less like design and more like putting a costume on a ghost. I spent the morning overhauling majiks.online’s marketing face. The goal was to stop the site fro…

Commits
7
Systems
2
Read
2min
Product capture

Majiks Studio — stems.

Tuesday started with a branding sprint that felt less like design and more like putting a costume on a ghost. I spent the morning overhauling majiks.online’s marketing face. The goal was to stop the site from feeling like a static brochure and give it some pulse. I built a rotating taglines component that cycles through the value props, swapped out the old hero section, and restructured the navigation and footer so the user actually knows where they are. I also spun up a /support-artists page because the community aspect needed its own room, not just a footnote in the footer.

The visual anchor for all this was the DJ unicorn. I spent a good chunk of time swapping out the generic app icons and favicons with the new logo. It sounds trivial until you realize you have to touch five separate image files and the favicon cache just to see it stick. I uploaded the new logo assets and updated the manifest files. It was a small change, but the site finally looks like a product instead of a prototype.

Under the hood, I had to wrestle with the data plumbing. The radio station feature was live, but the genre and mood matching logic was drifting. I tightened up the server-side logic in src/lib/radio.ts to ensure the stations actually fit the vibe they claim to have. At the same time, I disabled the lyrics worker. We don’t have real LRC data yet, so letting it run was just generating noise and wasting cycles. I turned it off until we have the actual song metadata to back it up.

I spent a good chunk of time swapping out the generic app icons and favicons with the new logo.

That led to the analytics work. I needed to know who was signing up and what they were doing. I implemented server-side sign-up tracking so we aren’t relying on client-side scripts that might get blocked. I also hooked up download analytics to track how often people are grabbing the app. It’s basic stuff, but you can’t improve what you can’t measure. I enabled the lyrics-sync worker again for now, but with strict limits so it doesn’t chew up the server while we wait for the data pipeline.

On the studio side, the work was more about structure. I added a three-tier pricing section and an open-source area to the homepage. The navigation got a dropdown to handle the new items without cluttering the top bar. I also built a comparison table for the pricing tiers so users can see the differences at a glance. It’s standard SaaS stuff, but it makes the product feel more mature.

I bumped the version to 5.1.0 to mark the radio and streaming relay updates. It’s a minor bump, but it signals that the core listening experience has evolved. The commit messages were minimal, just version numbers and file updates, but the underlying changes in package.json and CLAUDE.md reflect the shift in how we handle live streaming.

Also today: I cleaned up some legacy logo files and moved the main logo into the public images folder so the build process doesn’t choke on missing assets. It was a quiet day of housekeeping, but necessary.

Seven commits across two repos. The marketing overhaul is live, the analytics are tracking, and the site finally has a face.

Also in the frame

Real product captures — click any to enlarge.

majiks
majiks
majiks