Behind the Scenes

How On 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 — we wanted a tool that filters for our 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 score across 5 axes. No binary "interested / not interested" — everything stays in context with a clear signal of how much it matches our vibe.

🤖

AI-Powered Pipeline

Event data enriched with Claude + Firecrawl. Ticket URLs, images, and metadata scraped from 30+ venues and ticket platforms. Stdlib-only Python — no pip install needed.

📁

4-File Architecture

index.html, data.js, style.css, app.js. No framework, no build step, no backend. Deploys to Vercel in seconds. The entire site is under 200KB gzipped.

🗺️

140+ Evergreen Activities

Beyond timed events — farmers markets, parks, museums, date nights, family spots. All geocoded on the map with hours, cost, and a kid-friendliness score.


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, Nora En Pure, RUFUS DU SOL, Four Tet, Floating Points, Fred again.., Jamie xx, Polo & Pan, Justice, Kaytranada
Anjunadeep sound, Cercle shows, Red Bull Symphonic events
Medium Priority
Indie Rock Alternative Funk Soul Modern Jazz World Fusion
Khruangbin, Glass Animals, Tame Impala, Jungle, Vulfpeck, Atmosphere, Tinariwen, Bombino
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
Clubs & Underground
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

📐 The 5 Scoring Axes

Each event's spider chart in the detail drawer breaks down these dimensions.

Genre Match
How close to the high-priority genres above. Electronic downtempo and orchestral crossovers score highest.
Venue Quality
Sound system, intimacy, production value. The Eastern adds 10+ points automatically.
Format Rarity
Live band vs. DJ set, 360 immersive vs. standard stage, once-in-a-city vs. touring circuit.
Lineup Strength
Headliner caliber and support quality. Multi-act bills with complementary artists score higher.
Value for Money
Ticket price vs. total experience. Free events score high. $200 arena seats score low unless the act is legendary.

⚡ 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 spiritual recharge.

🎆

Monthly Catharsis

One major electronic show per month. High-energy peak.

👨‍👧

Family Connection

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

📚

Low-Effort Routine

Toddler library reading, 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 an actual side project: rebuilt and re-shipped across dozens of rounds as real usage turned up what actually needed fixing.

1

Discover & Score

Events sourced from Obsidian, Calendar, Gmail, venue calendars, and prior event archives — filtered to future dates, quality venues, and genres worth the trip. Every event is then scored by Claude against the taste profile on 5 axes (genre, venue, format, lineup, value), with a spider chart breakdown in every drawer. Ticket URLs and images filled in via an enrichment pipeline + Firecrawl agents.

2

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.

3

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.

4

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.

5

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.

6

Built, Broken, Fixed, Repeat

The whole site — data pipeline, scoring engine, and every feature above — was built with Claude Code, iterated through dozens of rounds against real usage. Most of the actual bugs (a "show all" button that silently never appeared, events dropping off the grid after dark) only showed up by using the live site, not by reading the code.

🛠️ Stack

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

📈 By the Numbers

180+
Curated Events
140+
Evergreen Activities
88%
Ticket Coverage
98%
Image Coverage
7+
Build Rounds
0
npm Packages