Skip to content

FM Consulting

Ade Map

Every Amsterdam Dance Event 2026 party on one phone-first map — 1,200+ events across 300+ venues, with day filters, artist search, a lasso to list what's on in any area, a "Plan B" for what's on within walking distance right now, and an installable offline-ready app.

Gallery

Case study

The problem

Amsterdam Dance Event runs more than 1,200 parties across 300+ venues over five days, but the official programme is published as a long, paginated list. There's no way to see where parties actually are, what's on near you right now, or how to string a night together across venues — and in practice that's exactly what people try to work out on their phones, outdoors, late at night, often with a weak connection. About a third of parties don't even carry a ticket link, and sold-out events give you nowhere to go next.

The solution

Ade Map shows every party as a venue pin on a map of Amsterdam, with day chips for Wed–Sun, search across parties, venues and artists (an artist view lists every set they play across the week), and filters for genre, time of day, venue type, area, free events and sold-out status. A party opens into a detail sheet with time, line-up, tickets, the ADE page, calendar export, directions and a shareable link. Drawing a lasso on the map lists what's on inside that area; "Plan B" lists parties on now or starting within the hour within a 15-minute walk; Pulse replays the whole festival as a time-lapse of venues lighting up hour by hour. Starred parties form a personal list with a night planner (walking and cycling legs, clashes, ferry crossings over the IJ), calendar export and reminders. It installs as a PWA and keeps working offline.

How it was built

The programme comes from the ADE site's own undocumented JSON endpoint plus each event page, and every venue address is geocoded through PDOK, the Dutch government's open location service, with each hit validated against the queried street and Amsterdam's bounds and a hand-checked fix list for the venues it can't place; duplicate venue records are merged by name and distance. A scheduled GitHub Actions job rebuilds the data on a policy driven by how old the published programme is — daily before the festival, every two hours during ADE week — re-fetching event pages only when their cached copy is stale, at low concurrency with an identifying User-Agent. A safety check refuses to publish if the event count suddenly drops more than 20% (a site change or a failed fetch), so a bad scrape can never replace a good programme, and data-only refreshes redeploy without re-running the full code pipeline. Ticket gaps are filled from hand-verified venue and Resident Advisor pages, and sold-out parties deep-link to TicketSwap — never scraped, since neither site allows it. The app is Svelte 5 on Vite with MapLibre GL and OpenFreeMap tiles, loads a slim core dataset first and descriptions in the background, falls back to a bundled basemap if the tile style fails, and is covered by Vitest unit tests and Playwright end-to-end tests including accessibility and offline checks.

More projects