All projects
WEB_APPPublic repo

World Music Map

Explore the planet by sound: an interactive map where each curated place opens region-defining music, with full attribution built in.

Product

The shipped product: live link, the problem it solves, and the stack it runs on.

The problem

Music discovery is usually by algorithm or genre, rarely by place. World Music Map flips it: an interactive map where each curated locale opens a drawer of region-defining music with genre and era context and always-visible attribution, so you can explore the planet by sound. It is honest about what it is: curated YouTube embeds, not a licensed catalog.

Stack

Next.jsTypeScriptPrismaPostgreSQLMapLibre GL

Screenshots

World Music Map screenshot 1
World Music Map screenshot 2

How I built it

Product requirements

Open the PRD

The full PRD lives in the repo. Open it above.

World Music Map started as a draft PRD grilled to DEFINED with /prd-grill-me, locking a discovery-first v1: media-per-locale at the center, influence-flow links deferred to v2. It ships as a single Next.js (App Router) + Prisma app, with no separate API since curation is agent-driven rather than user-written. A MapLibre GL map renders curated locales; clicking one opens a mobile-first drawer with a blurb, genre and era chips, and an official-channel YouTube embed with always-visible attribution. It runs its own world_music_map database on the same Postgres server as this portfolio, isolating its data while sharing infrastructure. S0 (skeleton) and S1 (deploy) are live with three marquee locales; the remaining slices (MapTiler basemap, genre/era filters, dead-embed fallback, archive.org enrichment, broader coverage, and polish) are mapped out in the build plan.

Timeline

  1. milestoneJun 24, 2026

    S1: deployed live on Vercel (MapLibre GL, 3 marquee locales)

  2. milestoneJun 24, 2026

    S0: skeleton (Next 16 App Router + Prisma 7 + own world_music_map DB)

  3. milestoneJun 24, 2026

    v1 PRD grilled from draft to DEFINED (/prd-grill-me)

Metrics

Each metric carries an honesty tag. Verified numbers read solid; targets and placeholders read muted.

StageS1 deployed
REAL
Locales live3
REAL
v1 target~20 locales
TARGET

Built the same way, every time.

Every exhibit runs the same loop: spec, implement, verify, ship. If you want this kind of work on your team, full-time or freelance, let's talk.