Case study
Fete Finder Discovery
Work on the public surface of a city-wide cultural programme: search, filters, maps, event detail routes, and the small pieces of trust that make a listing worth sharing under launch traffic that reached 3,000+ registrations and 50,000+ unique visitors.
Tension
The product problem beneath the work.
Fete de la Musique is not a neat catalogue problem. It is a moving city programme: many venues, many tastes, changing details, and users who may only know that they want something nearby, free, outside, late, specific, or surprising.
Threads
Three parts of the public discovery experience.
Owned
What I was responsible for, and what it changed.
| Thread | Work | Signal |
|---|---|---|
| Discovery surface | Built the event discovery surface around search, filters, result counts, dynamic chips, and clear recovery from over-filtering. | The programme became something people could narrow without needing to understand the whole dataset first. |
| City context | Shaped map loading, venue coordinates, location fallbacks, and map/list behaviour so geography supported browsing without blocking it. | The map became an aid to discovery rather than a fragile dependency for the whole experience. |
| Shareable events | Built stable event identities, share routes, event detail hydration, OG image support, and modal routing around canonical event keys. | Links could survive row order changes and content edits while still resolving into the live event experience. |
Mechanism
The technical layers behind those responsibilities.
| Layer | Detail |
|---|---|
| Search and filters | Query matching across titles, locations, dates, arrondissements, genres, tags, type, price, nationality, venue type, age, and OOOC picks. |
| Map resilience | Lazy map loading, coordinate enrichment, provider fallbacks, map preference settings, and graceful offline/map-asset failure copy. |
| Event identity | Canonical eventKey lookup with decorative slugs, event modal URL state, detail hydration, and share metadata. |
| Offline detail | IndexedDB event snapshots and service-worker caching for safe event JSON routes after a successful online visit. |
Shape
How the work moved from intent to a usable route.
- A user arrives with a vague cultural intent.
- Search and filters turn the programme into a smaller set of decisions.
- Map and location cues make the decision feel grounded in the city.
- A stable event route turns a discovery into something shareable.
- The event key keeps that link intact as the programme changes.
Reflection
What the project clarified about cultural discovery.
The strongest version of the product was not a beautiful list of events. It was a surface that helped people form a plan from uncertainty: narrowing the city, trusting the detail, and sending someone else a link that still worked after the data moved.