A system that cross-references a personal music library against upcoming local concerts, then creates calendar events and sends notifications. Built as one of the first Agent Projects.
Pipeline
graph LR subgraph Sources A["Last.fm API<br/>5,452 artists"] B["Plex Library<br/>2,036 artists"] C["JRL Scraper<br/>1,300 events"] end subgraph Processing D[Fuzzy Match] E["Filter<br/>Bay Area · min plays · name length"] end subgraph Output F["CalDAV Events<br/>99 shows"] G["Discord Alerts<br/>178 matches"] end A --> D B --> D C --> D D --> E E --> F E --> G
First Run Results (2026-02-01)
| Metric | Count |
|---|---|
| Artists scanned | 7,465 |
| Concerts parsed | 1,304 |
| Matches found | 178 |
| Unique shows | 99 |
How It Works
- Gather artists from Last.fm user library and Plex music library
- Scrape concerts from JRL community listings (Bay Area focus)
- Fuzzy match artist names against concert lineups
- Filter by region, minimum play count, and name length
- Create CalDAV events with deterministic UIDs (prevents duplicates)
- Send notifications as consolidated Discord messages
Scheduling
Runs daily at 7am PT via cron. Only notifies on new matches — seen concerts are tracked in SQLite.
Credentials
All accessed via rbw at runtime:
- CalDAV (Baikal):
rbw get --raw Calendar - Last.fm:
rbw get --field API_KEY "LastFM API Key"
See Also
- Last.fm API — primary data source for artist library
- Morning Briefing — includes top music artists in daily email
- Credential Management — how secrets are handled
- The Practice — this project is used as an example of “built in a day, documented thoroughly”