Personal · In production
Subreddit Sounds
github.com/matt-taylor-tech/subreddit-sounds ↗
Skills exercised
Point Subreddit Sounds at a music subreddit and it keeps a Spotify playlist stocked with the tracks that community is sharing, refreshed automatically every day. It runs unattended as a single Docker container on any Docker host, and the output playlist is the one I actually listen to every day, currently my number-one playlist on Spotify.
What it does each day
- Pulls the top posts from the chosen subreddit(s), via Reddit's public RSS feed or the OAuth API if credentials are added.
- Resolves each post to a Spotify track. Direct Spotify links are taken as-is; YouTube links get their title and artist parsed (using the channel as an artist hint) and searched on Spotify. Results are filtered by genre and minimum duration, and full-album links are skipped.
- Optionally pulls Bandcamp new releases by tag.
- Reconciles the playlist to the latest N tracks (default 25), adding new finds and trimming the oldest, so it's a rolling, always-current playlist rather than an ever-growing dump.
Architecture
- Backend: Python + FastAPI
- Database: SQLite via SQLAlchemy 2.0 for run history and configuration
- Admin UI: Server-rendered Jinja2 templates with login, a manual Run now trigger, and run-history pages with full per-run logs
- Setup: Browser-based first-run wizard: credentials are entered in the UI, so no API keys live on disk
- Auth: Single local admin login with
passlib[bcrypt]anditsdangerous-signed sessions - Scheduler: APScheduler running an in-app daily job at a configurable time
- HTTP:
httpxfor the Reddit, YouTube, Bandcamp, and Spotify calls - Deployment: Single-container Docker, runs on any Docker host
- Testing: pytest
Why this is here
Most "personal project" cards die in active development. This one earned its slot by getting used: the synced playlist is what plays in the shop, the truck, and the office. The interesting engineering is the resolution layer, turning a messy feed of Spotify, YouTube, and Bandcamp links into clean Spotify tracks with genre and duration filtering, and the rolling reconcile that keeps the playlist fresh. The integration patterns (OAuth flows, scheduled jobs, server-rendered admin consoles, single-container deploys) are the same ones I reach for in day-job work, kept fresh by running my own production for an audience of one. It's now public, so the code is readable evidence, not just a description.