How Dima's Radar Works

A personal event discovery engine for Atlanta, built with Claude Code. Every event scored 0-100 against a real taste profile. No algorithms deciding what's popular — just what's worth your time.

The Idea

On Dima's Radar started as a question: "What's worth going to this month?" Existing event sites surface everything — this one filters for one specific taste. The result is a zero-backend static site where every event is scored against a personal taste profile covering genre affinity, venue quality, format rarity, lineup strength, and value.

Scored, Not Sorted

Each event gets a 0–100 Dima Score across 5 axes. No binary "interested / not interested" — everything stays in context with a clear signal of how well it matches.

Agent-Run Pipeline

A weekly Claude job sweeps venue calendars, museum listings, and Atlanta newsletters, scores what it finds, enriches images and ticket links, and deploys — unattended.

Static, No Backend

index.html, data.js, style.css, app.js. No framework, no build step, no database. State (RSVPs, invites) rides in localStorage and the URL.

145 Evergreen Activities

Beyond timed events — parks, museums, playgrounds, date nights, rainy-day escapes. Geocoded on the map with effort, cost, and separate kid and parent scores.


What Scores High

The scoring engine is calibrated to a specific set of preferences — not a generic popularity metric. Here's what moves the needle.

Genre Affinity

High Priority
Downtempo Organic House Liquid DnB Melodic Techno IDM Ambient Orchestral Electronic
Bonobo
Tycho
Lane 8
Luttrell
Cubicolor
Maribou State
Emancipator
Moon Boots
Nicolas Jaar
Netsky
High Contrast
Polo & Pan
Justice
Disclosure
Anjunadeep sound, Cercle shows, Red Bull Symphonic events
Medium Priority
Indie Rock Alternative Funk Soul Modern Jazz World Fusion
Jungle
Chromeo
Franc Moody
Hot Chip
Cut Copy
Poolside
Wax Tailor
Tinariwen
Good for date night or group outings — solid but not a must-see
Low Priority
Generic Pop Radio Country Mumble Rap Screamo
Pass unless there's a strong social hook — birthday, friend visiting, legendary act

Venue Preferences

Smaller, unique venues over massive arenas. Focus on artistic merit and sound design.

Top Tier
The Eastern, Terminal West, Variety Playhouse, Plaza Theatre
The Eastern Terminal West Variety Playhouse Plaza Theatre
Clubs & Underground
District Atlanta, Believe Music Hall, The Masquerade, Aisle 5
District Atlanta Believe Music Hall The Masquerade Aisle 5
Bucket List
Red Rocks (CO), Cercle shows abroad, Red Bull Symphonic

Format Preferences

Orchestral Electronic Crossovers Projection Mapping / Light Shows Immersive Experiences 90s/00s Throwbacks Intimate Artistic Venues Cult/Art Cinema Interactive Family Exhibits After-Dark Museum Events Adults-Only Recovery Spaces Speakeasy / Cabaret Nature Walks / Botanical

How the Dima Score Is Built

Five axes, each scored 0–100, combined into the single number on every card. The spider chart in an event's detail drawer plots exactly these five.

  1. 01
    Genre Match
    Proximity to the high-priority genres above. Electronic downtempo and orchestral crossovers top out; radio pop bottoms out.
  2. 02
    Venue Quality
    Sound system, sightlines, intimacy, production value. The Eastern and Terminal West carry a standing bonus; arenas take a penalty.
  3. 03
    Format Rarity
    Live band vs. DJ set, 360° immersive vs. standard stage, one-off vs. annual touring circuit. Rewards the thing that won't come back around.
  4. 04
    Lineup Strength
    Headliner caliber and support quality. Multi-act bills with complementary artists beat a single name with a filler opener.
  5. 05
    Value for Money
    Ticket price against the whole experience. Free and membership-included events score high; $200 arena seats score low unless the act is legendary.

Scores are a ranking aid, not a verdict — a 72 with the right people beats an 88 on a night that doesn't work.

Energy Patterns

Events fit into a personal energy cadence — balancing high-intensity catharsis with recovery and family time.

Bi-Weekly Reset

Sol Dance / ecstatic dance for a physical and social recharge.

Monthly Catharsis

One major electronic show a month. The high-energy peak.

Family Connection

Zoo, Botanical Garden, Fernbank — repeatable with small kids, twice a month.

Low-Effort Routine

Library storytime, playgrounds, neighborhood walks. Weekly.


How It Was Built

Built entirely with Claude Code, no manual data entry — every event discovered, scored, enriched, and deployed through an AI-assisted pipeline. What started as a single-session build turned into a side project that now largely runs itself: a scheduled agent keeps the data current whether or not anyone opens the repo.

1

An Agent Does the Weekly Sweep

The part that changed everything: this isn't a script I run, it's a scheduled job. A headless Claude session wakes up on a timer, reads its own venue playbook, sweeps the Tier-1 music venues plus museum and family calendars, diffs what it finds against the existing dataset, scores anything new against the taste profile, enriches images and ticket links, writes it into the data file, and deploys — unattended. A second daily job watches a personal inbox lane: newsletters, self-sent screenshots of flyers, and texted links all get parsed into event candidates the same way.

2

Score Against a Real Taste Profile

Scoring isn't a vibe check — it's calibrated against 15 years of actual listening and going-out history: Spotify streams, a reconstructed concert log, venue preferences, and the family constraints that decide what's realistically doable. Each event lands a 0–100 Dima Score built from the five axes above, with the breakdown visible as a spider chart in every event's drawer.

3

Browse, Filter, and Plan the Move

The Browse grid handles type, score tier, and venue sorting, plus a threshold slider that surfaces near-misses that didn't make the curated cut. The same panel folds in When? Who? Vibe? filtering — originally a separate 3-tap wizard, now real filter chips that narrow both the event grid and the evergreen list together, for the faster "what's actually the move" answer.

4

Evergreen: No Ticket Required

A separate library of 140+ repeatable, no-ticket activities — parks, museums, date nights, family spots — for the "we're free, no plan" moments a ticketed-events feed can't answer. Started as a plain filtered list; grew a freeform finder ("free Sat morning, indoors, or at home?") that does loose keyword matching against name, description, and notes, plus day/time/effort/availability filters tucked behind a disclosure so the default view stays uncluttered.

5

See It on a Map, See It on a Calendar

A Leaflet map layers events (tier-colored) and evergreen activities (green) with category filters and hover tooltips. A month-grid calendar mirrors the same dataset with recurring-event markers, so the same underlying data reads geographically or chronologically depending on what you're actually trying to decide.

6

Invite a Friend, No Backend Required

The share flow started as a bare checkbox list of events. It grew into one combinable invite link that mixes specific events, an evergreen activity proposed for a date, and open "just tell me when you're free" time slots — all encoded straight into the URL. No accounts, no server: a friend opens the link, taps Yes/Maybe/Pass on whatever's in it, and copies a reply back.

7

Built, Broken, Fixed, Repeat

Every feature above was built with Claude Code and iterated across dozens of rounds against real usage. Most of the actual bugs only surfaced by using the live site, not by reading the code: a "show all" button that silently never appeared, events dropping off the grid after dark (UTC-vs-local date parsing), an apostrophe in one event title breaking the whole JSON export, and a deploy path that kept "succeeding" into a dead legacy URL after the site moved to its current home. The repo now carries a regression checklist for exactly those classes.

Stack

Frontend
Vanilla HTML/CSS/JS
Maps & Charts
Leaflet + Chart.js
Automation
launchd + headless Claude
Deploy
Vercel
AI & Scraping
Claude Code + Firecrawl

By the Numbers

242
Scored Events
145
Evergreen Activities
93%
Image Coverage
82%
Ticket Coverage
17
Sources Swept Weekly
2
Scheduled Agent Jobs

More From Dima

The companion project — and the source of the taste data behind every score on this site. Fifteen years of listening history broken down by era, genre, and mood.

My Spotify, Analyzed

dima-spotify.vercel.app →


Where the Data Comes From

Every venue calendar, museum listing, and Atlanta newsletter in the sweep. Coverage below is computed from the current dataset each time this page loads.

Music Venues

Swept weekly. Only shows that clear the taste profile get added, so these counts are deliberately far below each venue's full calendar.

Museums, Gardens & Family

Where the kid-friendly and date-night inventory comes from. Several are membership venues, flagged on the event cards.

Newsletters & Listings

Parsed from a dedicated inbox and RSS. These catch the one-off stuff no venue calendar lists — festivals, markets, pop-ups, free kid events.