Julian Bevan
Building a high-performance digital home for one of the best beat curators I've ever heard.
Overview
I can’t remember where I was when I first heard about Julian Bevan, but I do remember that it started sonically.
When you’re an audiophile / DJ / guy-who-puts-the-cool-music-on-at-parties, you’re always listening. At the grocery store, in traffic, while you’re getting coffee, while you’re watching an old movie. Your ears are pricked 24/7, ready to receive that next beat, mine that next sample, that next source of inspiration.
So when I was living in Brooklyn (pre-Covid) and a friend-of-a-friend put some music on at a gathering, I experienced what I can only describe as spidey-sense. Something tingled. This was too groovy for a typical Pandora/Spotify shuffle. It was like someone played a string of tunes that you’d never heard before, but were already your favorites.
"What is this?" I asked the host.
"It’s a DJ mix. Guy named Julian. Heard of him?"
I hadn’t. But I think I spent the rest of the gathering standing next to the speaker, making that face that I can only describe as 'a combination of wincing in pain and laughing out loud.'
I was hooked. A fan for life. I spent the next several years putting Julian’s DJ mixes on at my own hangs, and using his extensive catalogue (on his own website) as a go-to soundtrack for my own life: long car rides, dog walks, whatever.
But around 2024, his website started to slow down.
Problems to Solve
Julian’s website was using an off-the-shelf WordPress theme, and he was hosting his ~ hour-long mixes on the site itself inside of the Media Library.
He’s a Creative Director, not a dev nerd, so he was stuck with a typical potato-hosting company: the type that throttles your site performance if you exceed bandwidth thresholds and jacks you up for storage add-ons.
I noticed this little warning in his sidebar and saw an opportunity to connect: I’m a WordPresser who fixes stuff like this:
Warning: Invalid argument supplied for foreach() in /home/julianbevan/public_html/wp-content/themes/afternight/lib/php/widget/tweets.php on line 242
I reached out to let him know about it, and we got on a call to talk shop. A redesign was due. After a few minutes of me showering him with praise, we unpacked some of the major issues with his site:
- The site was painfully slow. It was taking ~30s to load posts, and the delivery of the mixes was getting compromised. Streaming large audio files was eating up his performance quotas, and the UX was suffering.
- His 300+ mixes were using the native audio player that didn’t persist as you browsed the site. This was the status quo with a WordPress site, but as he was featuring a body of creative work that was as impressive as his musical output, that struck me as blasphemy.
- The general design of the site was just bloggish and didn’t do his vibe justice. Tracklists were a wall of text, search was nonexistent, the layouts were stale.
My web development skills had matured to the point where I was confident that I could help out.
What I Did
After a brief discovery period looking at how other DJ/Creative sites flowed (and keeping a close eye on the player UIs of Spotify and SoundCloud), we dug in.
Julian led the minimal design in Figma, and I had recently broken ground on Aviator, my own WordPress development environment, so I could add any custom performance features that we needed.
The Big Win: Adding AJAX for speed and persistence
At the end of the day, most websites are sandwiches: a slice of header on top, a slice of footer below, and the (meaty?) content in-between.
After discovering (years back) that JavaScript could fetch and render that content without a page reload, I always wondered why more websites don’t leverage the technique by default. Why are we refreshing each time we click something?
Maybe it’s just a 'space shuttle being as wide as two horses asses' kinda thing, or an SEO constraint, or the fact that decades of WordPress development have been done on the assumption that 'pages just reload' and that we need to make sure they load as quickly as possible with optimizations and good hosting.
This project gave me the push I needed to add this 'UX holy grail' of website navigation to Aviator. The music would play in a globalized footer element (I used PLYR to fashion an audio player), and we’d simply swap out the content (and update the URL/history) whenever a link was clicked.
The impact was immediate, and it became my default for every WordPress site I built going forward (including the site you’re on now).
Performance wins
To solve the slowness problems, I helped Julian get his mixes off his old hosting and over to Bunny CDN, so playback and storage of his immense catalogue wouldn’t run up a massive bill (his monthly streaming cost is less than $20, last I checked).
Before, you could barely load a mix on a desktop. Now, I frequently queue one up on my phone before I take a long drive.