Hamdy Tabsissi
FR

EventMap En production Projet personnel

Une bonne idée de sortie ce soir, plutôt que 200 options

Une carte gratuite de ce qui se passe à Paris ce soir, rangée par culture et par catégorie — faite pour aider à choisir, pas pour noyer sous les choix.

Le besoin

Après une semaine chargée, l'envie de sortir est là, mais faire défiler des centaines d'événements épuise. Trop de choix, et la soirée finit souvent à la maison.

L'idée

Le problème n'est pas le manque d'options, c'est leur nombre. L'application part donc d'une seule question — qu'est-ce que je peux faire ce soir, pas loin ? — au lieu de s'ouvrir sur un catalogue.

Ce que j'ai construit

  • Un site qui s'ouvre directement sur les événements du soir, sur une carte, pensé d'abord pour le téléphone.
  • Un collecteur automatique qui rassemble les événements des données ouvertes de la Ville de Paris, des instituts culturels étrangers à Paris (FICEP) et d’autres flux publics, et rafraîchit chaque source à sa propre cadence.
  • Un classement par culture d'origine et par catégorie, pour suivre ses envies.
  • Des filets de sécurité : si une source tombe, les dernières données valides restent servies et la page d'état affiche « dégradé » au lieu de planter.

Le résultat

  • 27 623événements en base (mesuré le 6/10/2026)
  • 0événement sans position sur la carte
  • 4sources ouvertes et flux de lieux, combinés automatiquement (mesuré le 6/10/2026)

En ligne sur eventmap.hamdy-tabsissi.com depuis le 23 août 2026. Chaque événement de la base est placé sur la carte, et les données se rafraîchissent toutes seules.

En images

Page d'accueil d'EventMap : événements parisiens rangés par culture d'origine, avec une carte des sorties du soir
Page d'accueil d'EventMap : événements parisiens rangés par culture d'origine, avec une carte des sorties du soir

Ce que j'ai appris

Tester les données avant de concevoir le produit : un sondage rapide de la source a donné zéro événement à Nanterre et quatorze à Montreuil, j'ai donc recentré sur Paris plutôt que d'entretenir un scraping fragile. Et une panne silencieuse coûte plus cher qu'un plantage — des dates comparées comme du texte masquaient des événements sans bruit, jusqu'à ce que les tests le révèlent.

Détails techniques Stack, architecture et choix — pour les lecteurs techniques

Stack

  • Python (FastAPI, asyncio)
  • SQLite
  • Leaflet + OpenStreetMap
  • nginx
  • systemd
  • Ubuntu 22.04

L'architecture en un coup d'œil

  1. Le téléphone ou le navigateur du visiteur
  2. nginx — proxy inverse, en-têtes de sécurité
  3. Application FastAPI (uvicorn) — service systemd limité à 127.0.0.1, avec quotas CPU et mémoire
  4. SQLite — événements, sources, dédoublonnage
  5. Collecte toutes les 6 heures ← open data de la Ville de Paris + FICEP (OpenAgenda)

Comment ça marche

  • Ingestion asynchrone (asyncio) de plusieurs flux ouverts — dont Que faire à Paris (Ville de Paris, licence ODbL), le FICEP et OpenAgenda (.ics) — vers SQLite, avec dédoublonnage. La liste des sources en service est dans /health.
  • Rafraîchissement source par source, tolérant aux pannes : une source en échec n'efface jamais les données existantes ; /health donne l'état de chaque source et passe en « degraded ».
  • Périmètre recentré de Nanterre–Paris–Montreuil sur Paris après l'audit de 13 sites de banlieue sans aucun flux exploitable (ni .ics, ni JSON-LD Event). L'architecture multi-sources reste prête.
  • Service isolé : utilisateur système dédié sans shell, quotas CPU et mémoire systemd, application limitée à 127.0.0.1 derrière nginx.
  • Bug trouvé en test : dates comparées comme des chaînes, qui excluaient silencieusement des événements en production — corrigé et documenté.

Incidents et corrections

  • Du 24 septembre au 5 octobre 2026, le flux de la Ville de Paris était injoignable depuis le serveur (erreur DNS) : EventMap a continué de servir les dernières données valides et /health indiquait « degraded » en nommant la source. Au retour du flux, une contrainte de la base (un doublon pointant vers une ligne purgée) faisait échouer chaque mise à jour en silence, et /health affichait « ok » à tort. Reproduit en local, corrigé, couvert par deux tests et redéployé le jour même : 16 160 événements à jour.

Ce qui manque encore

  • Paris seulement
  • Dépend de la qualité des flux de données publics