FLOOR SUPERVISOR
Customizable DJ portfolio and content hub
TL;DR
A self-publishing platform for a local DJ — full track streaming, flexible post creation, and a Sanity CMS backend a non-technical user can actually operate.
OVERVIEW
A friend of mine has been picking up more DJ gigs and wanted a home base on the web — somewhere to share his music, post about upcoming events, and generally keep people in the loop. The hard requirements: listeners should be able to play full tracks directly on the site without logging into Spotify or anything else, and he needed to be able to manage all the content himself without touching code or learning a new technical tool to be able to post something.
THE PROBLEM
The content problem was the tricky part. He had a general sense of the kinds of posts he wanted — music releases, event announcements, photo dumps — but was largely hands-off on the specifics, which meant I couldn't just build a fixed set of post types and call it done. I was concerned about locking him into the wrong structure where he'd quickly hit a wall trying to post something that was outside of that.
Another concern was full-track audio playback, which ruled out any streaming embed approach. Spotify, SoundCloud, and YouTube all either cut previews or require users to be logged in. The audio had to live somewhere he controlled without introducing an additional hosting platform.
Finally, this all had to be as cheap as possible — free if I could swing it.
THE SOLUTION
I knew that the website was going to be more interactive than your typical portfolio site, involved a potentially large amount of images being served, and still revolved around static content. I went with Astro ↗ which is a static site generator that allows incorporating "islands" of React logic. For the CMS, I went with headless Sanity.io, which is highly customizable and offers a generous free tier ↗.
Instead of pre-built post types, I built a small set of composable blocks — text, photo, music release, and events list — each with its own Sanity schema and renderer. He creates posts by stacking blocks in whatever order and combination he wants. Each block supports a custom color or image for the background, as well as several options for customizing the color, size, and placement of text. This gave him the flexibility of easily creating custom post formats without requiring me to anticipate them upfront.
Image and audio files are uploaded directly into Sanity alongside the rest of the content — no separate storage bucket to manage. Images are optimized during build time by Astro and audio is served as native HTML audio elements.
OUTCOME
Not publicly launched yet — we're still working together as he plays around with it and figures out exactly what he wants. A live demo is up at demo.floorsupervisor.com, deployed to Cloudflare Pages with automatic builds triggered by GitHub pushes.