Let's connect — find me wherever you spend your time online.

David Sanchez

David Sanchez

Full-Stack Senior Web Developer

© 2013-2026. All rights reserved.

Built with ♥ in Montreal

David Sanchez
  • Blog
  • Projects
  • Travels
  • Recipes
  • About
Get In Touch
Case study
web

EDMDb: The Electronic Dance Music Database

Discover festivals, follow artists, and explore events near you — powered by the world's electronic dance music database.

Role
Founder & Lead Engineer
Period
2024 — present
Visit liveSource
EDMDb: The Electronic Dance Music Database
Highlights

Designed a monorepo around a shared Supabase data layer with separate web + MCP surfaces.

Built an MCP integration so AI agents can query the catalog as a structured tool.

Shipped festival, artist, and event discovery flows in the first release window.

Powered ingestion with a typed workflow runtime built on `next-workflow-builder`.

Case study

Why EDMDb exists

The catalogues I cared about — IMDb for film, Discogs for vinyl — never had a serious counterpart for electronic music. There are dozens of half-attempts: ticketing sites that let listings rot, fan wikis that capture lineups but not relationships, social platforms that surface today's noise but lose last year's. Nothing modeled the music the way Discogs models it: artists, labels, releases, gigs, all linked, all queryable.

EDMDb is my attempt at that model. A real database, with a real ingestion pipeline, a real public web app on top, and — increasingly — a real machine-readable surface so AI agents can query it like a tool.

Architecture at a glance

The codebase is a Turborepo monorepo built around four deployable surfaces and a shared Supabase Postgres layer. Everything is hosted on Vercel; database migrations are managed with Kysely.

Deployable surfaces

  • app — the public web UI at edmdb.net. Built on Next.js 16+ App Router, Tailwind CSS, and shadcn/ui. Auth is handled through better-auth with Magic Link plus Spotify, Mixcloud, and SoundCloud OAuth. Search uses Algolia for instant indexing.
  • admin — the internal management console. Same UI primitives as app, but auth is restricted to Google OAuth via better-auth. Owns DB migrations (Kysely), triggers useworkflow jobs, and runs manual Algolia indexing when needed.
  • automation — the worker package. Cron jobs scheduled via vercel.json, an Algolia data-sync job that re-indexes Postgres into search, the useworkflow runtime for multi-step ingestion, and Resend triggers for transactional email.
  • mcp-server — the AI-facing backend at mcp.edmdb.net. Implements the Model Context Protocol so ChatGPT, Claude, or any MCP client can query the catalog as a structured tool. Handles OpenAI workflows and ships a small UI for development.

All four packages share a single Supabase Postgres database (PgBouncer connection pooling, separate prod and dev environments) and a single Vercel Blob store for entity images — artists, users, events, festivals, podcasts.

Shared monorepo packages

  • core — country lists and i18n utilities, date and time formatting, GeoJSON for the map views, normalizers and data-type helpers.
  • db — every database schema, the Kysely instance, query helpers used across packages.
  • ui — the shadcn/ui component layer, icon library, theming and style tokens.
  • providers — encapsulates the integrations with external data APIs: Ticketmaster, Beatport, Bandsintown, Songkick, MusicBrainz, Podcast Index, and a long tail of others. Each provider is a thin adapter so the rest of the codebase deals in EDMDb's domain types, not vendor-specific shapes.

Local tooling and external services

  • EDMDb CLI — a commander.js-powered local utility for developers. The two main verbs are import (pull external data into the local DB) and sync (push changes back out to Algolia or the providers).
  • Algolia — realtime search. Indexed by both the automation package on a schedule and the admin console on demand.
  • Sentry, Vercel Analytics, Vercel Speed Insights, Vercel Logs, Google Analytics — the observability stack. Sentry handles errors, Vercel handles performance and traffic, Google Analytics fills in the audience picture.
  • Resend & Novu — email delivery via Resend, multi-channel notifications (email, in-app, push) via Novu.

Features that shipped

The product surface area is built around what listeners actually do — discover, follow, plan, and revisit. The first release window covered fourteen distinct features; they cluster into four themes.

Personalised follow-along

  • Watchlist — track favourite artists, festivals, labels, podcasts, and venues in one place.
  • Personalised dashboard — a home view tailored to your music taste, with sections for podcasts, livestreams, and releases pulled from what you follow.
  • Personal music stats — top countries, favourite genres, most-played artists, preferred venues, visualised so the journey is legible at a glance.

Discovery

  • Event discovery — concerts and festivals near you, plus events from the artists, venues, and festivals you follow.
  • Global coverage — surfaces emerging festivals and hidden gems worldwide; ties into the user's travel history when present.
  • Latest updates feed — a continuously updated stream of trending content across electronic music with smooth scroll-to-load.
  • Advanced filtering — combine date range, location, distance, artist, festival, venue, genre, event type, and ticket availability into one query.

Catalogue depth

  • Complete artist profiles — the canonical view of an artist with every relevant link, release, and upcoming gig in one spot.
  • Aggregated data — Bandsintown, Beatport, Spotify, SoundCloud, Ticketmaster, and the long tail of providers, normalised through the providers package and surfaced as one unified catalogue.
  • Real-time updates — podcasts, events, and festival lineups refresh continuously as providers update upstream.
  • Live experiences — real-time widgets for live events, voting, and music sync (Top100DJs, Spotify, global festivals).

Listening + AI access

  • Podcast streaming — episodes appear on EDMDb the moment they hit the major platforms; play them in-app.
  • Platform integration — import favourite artists from Spotify, SoundCloud, and Mixcloud so onboarding is one click instead of an afternoon.
  • AI-powered access — through the MCP server, ChatGPT, Claude, or any MCP client can query EDMDb in natural language: "what festivals is this artist playing this summer," "which venues in Berlin host techno on Saturdays," and so on. The AI gets a typed tool, not a screen-scrape.

Where it goes next

The catalogue layer is in place; the next round is depth. Better release modelling (proper label hierarchies, distinct singles vs. EPs vs. albums, tracklists), richer venue profiles (capacity, sound systems, recurring nights), and tighter feedback loops with listeners. The MCP surface is the most interesting frontier — every assistant that adds the EDMDb tool effectively becomes a music concierge for its user, and that's a more durable path than chasing the next social platform.

Tech
Next.js
TypeScript
ShadcnUI
Vercel
MCP
Supabase
Workflow
Next step

Want something like this?

Available for freelance and contract work. The fastest way to start a conversation is email.

Email meAll projects