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)

MetricCount
Artists scanned7,465
Concerts parsed1,304
Matches found178
Unique shows99

How It Works

  1. Gather artists from Last.fm user library and Plex music library
  2. Scrape concerts from JRL community listings (Bay Area focus)
  3. Fuzzy match artist names against concert lineups
  4. Filter by region, minimum play count, and name length
  5. Create CalDAV events with deterministic UIDs (prevents duplicates)
  6. 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