Infrastructure/Case study 02
Dispo: availability platform
Availability platform for Swiss film technicians, hosted on Cloudflare and Supabase.
- Browser
- Cloudflare Worker (static site)
- Supabase (database, accounts, functions)
- Resend (email)
Goal
Technical crews are still put together mostly by word of mouth. Dispo lets a production search, by role and dates, for a technician who is actually available, anywhere in Switzerland. Departments covered include camera, lighting, grip and sound.
Product principles
No page shows a person's calendar: a search only reveals the free days within the requested period. Sign-up is by invitation from a member. Rates are indicative and are never used to sort results. A technician's track record can be confirmed by the people who worked on the same project.
Architecture
The site is static, written as JavaScript modules, with no framework and no build step. A Cloudflare Worker serves it and handles the redirect from the former subdomain, the iCal feed and short sharing links. Data and accounts are on Supabase (PostgreSQL, authentication, server functions), in the Zurich region. Access rules are defined in the database. The site loads no external script, which allows a strict content security policy.
Deployment and database
Every push to the main branch deploys the Worker. The database structure is never changed by hand: each change is a versioned migration file in the repository, applied by a GitHub Action. Every night, another check compares the database with the repository and fails on any difference. Server functions are deployed the same way.
Email and scheduled jobs
Emails (confirmation, invitation, reminders) are sent through Resend, with a verified domain and a strict DMARC policy. Scheduled jobs in the database handle the nightly purge of old data, email reminders and iCal calendar sync, only for members who have connected one.
Personal data
A record of processing activities under the Swiss data protection act (nLPD) is kept up to date with every change. The application offers a privacy page, data export and retention periods applied automatically. Usage statistics are anonymous counters with no identifier, and no third-party analytics tool is used.
Hosting choice
I first considered hosting it on my TrueNAS server. That was not my best idea: more complicated than expected. So I chose free tiers of online services. They have limits (emails per day, pausing on inactivity): moving to a paid plan is planned once productions actually use it.