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.
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.
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.
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.
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.
Beyond timed events — farmers markets, parks, museums, date nights, family spots. All geocoded on the map with hours, cost, and a kid-friendliness score.
The scoring engine is calibrated to a specific set of preferences — not a generic popularity metric. Here's what moves the needle.
Smaller, unique venues over massive arenas. Focus on artistic merit and sound design.
Each event's spider chart in the detail drawer breaks down these dimensions.
Events fit into a personal energy cadence — balancing high-intensity catharsis with recovery and family time.
Sol Dance / Ecstatic Dance for spiritual recharge.
One major electronic show per month. High-energy peak.
Zoo, Botanical Garden, Fernbank — repeatable with a toddler, twice a month.
Toddler library reading, neighborhood walks. Weekly.
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.
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.
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.
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.
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.
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.
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.