Les Santes
Mataró’s biggest festival, in your pocket - built end-to-end by one person
Every summer, Mataró (Barcelona) celebrates Les Santes - six days of concerts, fire runs, giant-figure parades, and open-air events drawing tens of thousands of attendees across the whole city.
The only official tool? A printed PDF and a static website with no real-time data. People were left guessing event times, where moving parades were, and whether anything had been cancelled.
So I built the full stack myself - mobile app, marketing site, and admin CMS - solo, from scratch, in public.
Why this project exists
I’ve been attending Les Santes for over 20 years. Every edition, I watched the same scene repeat: people holding crumpled printed programmes, asking each other “where are the giants now?” or “what time does the correfoc start?”
The problem is genuinely hard in the moment: parades move, events start late, signal is poor in crowded streets, and the official website isn’t built for real-time use.
Mataró deserves better tooling. So I built it - a solo, public-good project with no client, no budget, and no team. Just a problem worth solving and a stack worth learning.
Engineering highlights
The app
The mobile app (React Native + Expo) is organised around one question: what’s happening right now?
Ara (Now)
Open the app and immediately see what’s live: a hero card with the current event and a horizontal strip of upcoming ones. No login prompt, no onboarding, no setup - just the festival.
Mapa (Interactive map)
Fixed events appear as pins. Moving parades show their real-time estimated position as an animated route polyline, recalculated every second by interpolating elapsed time along the pre-planned GeoJSON path. It looks live because the math runs live.
Agenda (Full programme)
The complete schedule, filterable by day, category, event type, or distance from the user’s location. A favourites system lets users pin events and get notified before they start.


Recursos (Archive)
A scrollable archive of every official festival poster since 1892, plus a swipeable lightbox of the Gegants postcards - each encoded in AVIF for near-instant loading.



Key design choices
The landing page
A Next.js 15 App Router site that converts visitors into app downloads and doubles as a full content management system for the festival organiser. Optimised for Core Web Vitals, fully typed, and SEO-structured to compete with the official city domain for high-intent queries.



The admin panel
A password-protected back-office embedded in the landing site. The festival organiser can create, edit, and cancel events without touching code. Cancellations require a reason, which is broadcast instantly to all connected app instances via Supabase Realtime and delivered as a push notification via Expo Notifications.
Event creation handles both fixed-location events and moving parades. Parade routes are drawn in geojson.io and uploaded as GeoJSON - the app then uses them for client-side live position interpolation during the festival.
Tech at a glance
| Layer | Stack |
|---|---|
| Mobile app | React Native, Expo SDK 54, Expo Router |
| State & cache | Zustand, AsyncStorage |
| Map | MapLibre GL JS in a WebView, MapTiler tiles |
| Push notifications | Expo Notifications, Supabase Realtime |
| Landing & CMS | Next.js 15, Tailwind CSS v4, shadcn/ui |
| Backend | Supabase (PostgreSQL, Auth, Realtime) |
| SEO | JSON-LD @graph, FAQPage, Festival subEvent[], AI-crawler allowlist |
| Images | AVIF throughout (97% size reduction) |
| i18n | Catalan primary, English fallback |
Status
The festival runs 24-29 July 2026.
The app is in active development targeting a public release on both the App Store and Google Play before the festival. Currently working towards official recognition from the Ajuntament de Mataró.
The full codebase is open source under MIT.
Links