Today was about making the broadcast pipeline actually work. I spent the bulk of the day in the broadcaster repo, turning a scaffold into a functioning audio engine. The goal was simple: capture system audio, process it, encode it, and push it to a relay without dropping frames or sounding like garbage.
I started by integrating a real DSP library written in Rust. It handles room correction, FFT convolution, and biquad filters. Getting the Swift code to talk to the Rust library required building an xcframework and fixing a few overlap-save bugs in the FIR convolver. Once the engine was linked, I built the encoding pipeline. The plan was to support multiple codecs. AAC (primary), MP3, Opus fallback. I added loudness normalization and a stream health monitor so the app knows if the connection is degrading.
The app itself needed a face. I added a menu bar mode, keyboard shortcuts, and a proper onboarding flow. The recording feature was also implemented, allowing users to save local copies of their streams. Distribution scripts were made executable, and the app icon was finalized. It feels like a real tool now, not just a prototype.
I started by integrating a real DSP library written in Rust.
On the relay side, I hardened the infrastructure. Production hardening: PostgreSQL, TLS, env config, healthchecks Rename to Majiks-Relay, add video-ready stream_type column, preparing for future media formats. A silence fallback file was added for Liquidsoap, so the stream doesn't go dead if the source cuts out.
The website got some love too. I overhauled the album pages with better genre normalization and Open Graph metadata. The lyrics sync was fixed by auto-scaling LRC timestamps to the actual audio duration, which solves a lot of timing issues. Comments + reactions + API keys for agents, making the platform more interactive and extensible. The fullscreen player now features a backdrop blur and an artwork lightbox, which looks much cleaner.
Also today: Rewrite homepage copy to better communicate the platform's differentiators and fixed a few visualizer audio taps.
The day added up to a functional broadcast stack. The app captures, processes, and streams audio reliably, and the relay is ready to handle the load. It is a solid foundation for what comes next.
Real product captures — click any to enlarge.