Song Sync
Keeps your Slack status in step with whatever Spotify is playing.
- Next.js
- TypeScript
- Supabase
- Vercel
What it is
A small service that watches your Spotify playback and keeps your Slack status in step with it. OAuth on both sides, a token store, and a worker that reconciles the two. It’s meant to be self-hosted, so your listening history goes to a deployment you control rather than to me.
Why I built it
Same instinct as Recess: your status should know what you’re actually doing. A manually-set Slack status is out of date within the hour and everyone learns to ignore it, which makes it worse than no status at all. This one is right because nothing about it is manual.
There’s a smaller reason as well. A status with a real detail in it gets replies, and “in a meeting” never does. On a team that mostly isn’t in the same room, those replies are a decent share of the conversations you’d otherwise have standing next to a kettle.
How it works
A Next.js app handles both OAuth flows and keeps the tokens in Postgres on Supabase. A cron job runs every minute, asks Spotify what’s playing, and writes the answer to the Slack status API. Spotify’s access tokens are short-lived, so the refresh happens on the way past.
Track names on their own make a poor status, so there’s an emoji mapping between the two: the status you end up with reads like something a person set. A dashboard handles the rest of it, connecting each side, unlinking either one, and forcing an update when you want to watch the thing work.
Where it is now
Running, and being cleaned up for a public release so it can be self-hosted properly. Standing it up means two OAuth apps, a Supabase project and a deploy, which is about as light as it gets for something sitting between two APIs.