DEV Community

Cover image for Hands-off DJ for my child's baptism: Spotify, djay, an iPad, and an agent that ignored the brief
Christian Anderson
Christian Anderson

Posted on

Hands-off DJ for my child's baptism: Spotify, djay, an iPad, and an agent that ignored the brief

My child's baptism party was at a pub. I wanted proper music — music jukebox, not a Spotify "Chill Hits" playlist — and I did not want to spend the day standing over an iPad.

This is how that worked: Hermes (the agent that runs on my homelab) and Claude Code built the playlist between them, and the iPad just played it. It also covers the part that didn't work, because the first version the agent built was wrong in a way that would have been embarrassing at a christening.

The brief

I wrote a structure, not a list of songs:

  • warm R&B while people arrive (Jorja Smith, Tems)
  • afrobeats as the energy lifts
  • UK garage for the peak
  • afro / reggae
  • an outro to close the day

And a reference: Chuckie Online's mixes — his apartment life mix and his BBC 1Xtra R&B Slow Jamz mix. The instruction was that his selection is the base, not a flavour.

Attempt one: the agent ran the wrong job

Hermes has a Spotify skill I'd built for weekly mixes. Given the baptism brief, it didn't follow it. It ran the weekly-mix defaults instead and produced 60 tracks of 90s and modern rap, with duplicates and explicit tracks. At a baptism.

The cause was a gap, not a bad model: the Spotify tool had a "make a playlist from these genres" mode and no "build from a brief or a reference tracklist" mode. With no tool that matched the job, the agent reached for the nearest one and reported success.

Two more things the brief itself got wrong, because an LLM had helped write it:

  • Credits were wrong. "Essence" is Wizkid featuring Tems; "Location" is Dave featuring Burna Boy; "Re-Rewind" is Artful Dodger featuring Craig David. Every credit had to be checked by search.
  • The artist links were invalid IDs.

Attempt two: rebuilt from the brief, by hand

I took it off Hermes and rebuilt it with Claude Code, using Hermes's Spotify credentials and box:

  • Reference tracklists. A SoundCloud mix page has no tracklist. The YouTube upload of the same mix does, in its chapters. The BBC programme pages list every track for his 1Xtra episodes.
  • Baptism rules. Drop anything that only exists as an explicit version, and drop the bedroom slow jams. There are certain 90s R&B songs your nan shouldn't hear at a christening.
  • Blocks, not a shuffle. The final running order:
Block Opens with Length
Warm R&B Essence — Wizkid, Tems 40 min
Reggae / lovers rock I Feel Good — Beres Hammond 56 min
Afrobeats Last Last — Burna Boy 56 min
Afro house I Adore You — HUGEL, Topic 43 min
UK garage Re-Rewind — Artful Dodger 26 min
Old-school dancehall Heads High — Mr. Vegas 42 min
Modern R&B Is This Real Love? — Debbie 32 min
Slow jams When I See U — Fantasia 61 min
Outro Where Did I Go? — Jorja Smith → By Your Side — Sade 18 min

101 tracks, 6.2 hours. It peaked at 233 tracks and 14.5 hours before I cut it back to the order I actually wanted.

The Spotify API fights back

It's worth knowing about these if you're building anything on Spotify's API in 2026:

  • A removed endpoint returns 403, not 404. Spotify renamed several endpoints in February 2026 (/playlists/{id}/tracks/items, POST /users/{id}/playlistsPOST /me/playlists). The old paths answer 403 Forbidden, which looks exactly like a permissions problem. I lost hours re-consenting scopes before checking the path.
  • Search caps at 10 results for a development-mode app, and year: / genre: filters return nothing. Era and style have to come from how you phrase the search.
  • You can't read other people's playlists' tracks in dev mode, so "copy Chuckie's playlist" isn't possible. The YouTube chapters were the workaround.
  • Rate limit. About 250 searches in one evening got a 429 with a retry-after of 77,746 seconds — 21.6 hours. A second Spotify app didn't help, because the throttle is per user account, not per app. So the rest was scheduled on Hermes's box: one timer to add about 40 Chuckie tracks the next evening, and a second to reorder the playlist into the final blocks, which only ran once the first had succeeded. Both ran unattended the night before the party.

The playback: djay on an iPad, hands off

The player was djay Pro on an iPad, logged into Spotify inside djay, on the 7-day free trial. So the playlist Hermes's box built was just there in djay's library, and djay's Automix did the transitions. The iPad connected to the pub's speaker over Bluetooth, and it held up with no drop-outs.

You can also wire it: a USB-C (or Lightning) to 3.5mm/aux adapter into the pub's mixer or amp. Wired is the safer choice if the speaker is a long way away or the room is full of phones. It also has no Bluetooth delay, and with a USB audio interface you get a headphone output to hear the next track before the room does — which is what you'd need to mix by hand.

The settings that made it hands-off:

  • Shuffle off. The order is the whole point.
  • Automix on, with short transitions (about 10 seconds). Long blends make two rappers talk over each other.
  • Max song length about 2:30–2:45. Most 90s tracks carry a minute of outro nobody dances to. That turns the 6.2 hours into about 4.5.
  • Auto gain and keylock on. 90s masters are much quieter than modern ones, and keylock stops voices going chipmunk when tempos are matched.
  • Explicit content off, repeat on, iPad auto-lock off, Do Not Disturb on. Explicit off is the belt-and-braces for a christening. Repeat means the music never stops. Auto-lock and Do Not Disturb are the two ways an iPad can kill the music mid-party.
  • On Bluetooth, don't mix by hand. You can't hear the next track before the room does, and the audio lags the screen. Let Automix do it.

The only thing a human does is steer: if the room is ready early, jump to the first song of the Afrobeats block; when people start leaving, jump to the slow jams, then the outro. The blocks mean that one tap changes the mood without breaking the flow.

What Hermes actually did, and didn't do

Did: hold the Spotify skill, credentials and scheduling that everything else ran on. The two timers that finished the playlist ran on its box, unattended, the night before the party.

Didn't: build this playlist. Given the brief, it ran the wrong job and called it done; the actual build was done by hand with Claude Code. The fix wasn't a better prompt. It was noticing that the tool had no mode for the job, so the agent improvised.

That's the lesson I keep relearning with agents: when there's no tool that fits the job, they don't stop and say so — they use the nearest tool and report success. Check the output against the brief, not against the agent's summary.


🤖 Drafted with AI assistance from my own homelab notes, logs and repos, then reviewed and edited before publishing.

Top comments (0)