A live-music app where an AI pipeline reads venue websites every day and decides which shows are reliable enough to publish.
221 venues · 2 cities
Atlanta and South Bend venues, pre-launch beta
- 44Postgres migrations
- 32tables, all with row-level security
- 4scheduled jobs (ingest, digests, reminders)
- 82pages across fans, musicians, venues, admin



The problem
Live music in Atlanta is spread across hundreds of venue websites, Instagram posts and calendars, each in a different format, and small rooms like bars and breweries never show up anywhere. Finding a show tonight means checking a dozen sites, so Encore pulls it all into one feed and map — and the hard part is the data.
What I built
- AI ingestion with confidence gating. A daily job scrapes each venue's events page, and an LLM extracts events into a strict Zod schema with a confidence score. Under 0.55 is dropped; 0.8+ from venue-verified sources (0.9+ for admin-added ones) publishes automatically; everything in between waits in an admin review queue.
- Messy-data cleanup. Free-text performer names are matched to artist profiles with Postgres trigram similarity (0.7+ is a match, lower creates a stub flagged for review). User-submitted venues are normalized by an LLM, geocoded and de-duplicated before an admin approves them.
- Source health monitoring. Every venue source runs in isolation, and a dashboard buckets each one as healthy, stale, failing or never-run from its success rate over the last 10 runs.
- Postgres + PostGIS backend. 44 migrations, 32 tables with row-level security on every one (112 policies), 52 SQL functions and PostGIS radius search behind the Tonight feed.
- A full product for four audiences. Fans get the Tonight feed, map, search, RSVPs, follows and groups; musicians post gigs; venues manage their own sources; admins run the console. A weekly digest email and SEO landing pages are built for launch.
How it works
- Venue sites
- Daily scrape
- LLM → typed events + confidence
- Gate: drop · review · publish
- Postgres / PostGIS
- Tonight feed + map
Stack
- TypeScript
- Next.js 14
- React
- Supabase
- Postgres
- PostGIS
- Vercel Cron
- Vercel AI SDK
- Firecrawl
- Mapbox GL
- Zod
- Resend
- Turborepo
- GitHub Actions
Proof
| Commits | 84, solo, May 29 – Aug 18 2026git history |
|---|---|
| Database | 44 migrations · 32 tables · 112 RLS policies · 52 SQL functions · 101 indexescounted from the migration files |
| AI thresholds | drop < 0.55 · auto-publish ≥ 0.8 / 0.9 · artist match ≥ 0.7ingestion and artist-matching code |
| Coverage | 221 venues seeded (148 Atlanta, 73 South Bend)seed migrations |
| CI/CD | 4 GitHub Actions workflows: checks, PR previews, production deploys, mobile build.github/workflows |
What I'd do next
Measure extraction accuracy with a labeled set of venue pages, and launch the web beta in Atlanta, then bring back the Expo mobile app.
May 2026 – present · Live product. The code is in a private repo, so this page shows the design and the numbers instead.