After several coding sessions, I am excited to announce that the MVP (Minimum Viable Product) for Paris Plouf is now operational. As a reminder, the goal is simple: find the most accessible swimming pool in Paris based on your GPS location and real-time opening hours.
Currently, the API receives your GPS coordinates and your departure time. It then returns the top 5 establishments by applying strict filters to guarantee a real swimming session:
To keep the data accurate, a CRON job runs every night. It queries the City of Paris Open Data to refresh the schedules, as precision is paramount even if they remain relatively stable.
While developing, I noticed that the official City of Paris website sometimes displays real-time attendance and, more importantly, exceptional closures (maintenance, competitions) that don't always appear in the Open Data. Even worse: some pools are completely missing from the public API.
I have therefore implemented a scraping script to enrich my database. My next steps on this front are:
A dilemma quickly surfaced during testing: should I prioritize the closest pool or the one that stays open the longest? Finding a universal "perfect ratio" proved impossible. Consequently, I added an optional parameter to the API allowing users to choose between two modes:
Not all Parisian pools are equal when it comes to the wallet. While most follow the standard municipal rate, some (such as Suzanne Berlioux in Châtelet or those on houseboats) are more expensive due to extended hours or premium infrastructure.
The problem? A central, late-opening pool like Châtelet would systematically rank first. To fix this bias, I need to identify "special rate" pools and implement business logic to penalize or filter these establishments.
Regarding hosting, I’ve decided to run the API and the Telegram bot on my personal server. This allows me to keep costs at zero while sticking to my original constraint: building a lightweight, resource-efficient application.
1. Optimize web parsing for non-Open Data pools and closures.
2. Index pricing to identify "Premium" entries.
3. Implement penalty logic based on price.
4. Dockerize the stack and deploy the Telegram bot.
Stay tuned for the next update!