Avant : le LLM devait simultanément grouper les notes ET les matcher
aux titres du site → résultats incohérents, séries perdues si pas de
correspondance sur le site.
Après (pipeline en 4 étapes) :
1. cluster_notes_into_series : LLM groupe les notes du PDF en séries
canoniques, SANS le catalogue du site
2. scrape_catalog : enrichissement optionnel (+ extraction des dates
de représentation depuis chaque page événement)
3. match_series_to_catalog : correspondance canonique→site pour
enrichir le titre et la description (null si pas de match)
4. Génération ICS pour TOUTES les séries PDF, même sans correspondance
site (répétitions seules incluses)
Autres changements :
- _build_description : inclut les dates du site et l'URL quand dispo
- clear_cache : inclut series_clusters.json et series_site_match.json
- _parse_json_response : helper robuste pour parser les réponses LLM
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ajout d'une clé (date, start_time, titre, note) pour éviter qu'un même
événement soit ajouté plusieurs fois (PDFs qui se chevauchent ou lignes
dupliquées par pdfplumber sur tables multi-pages).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remplace `planning2ics:latest` par `git.piaf.im/sylvain/planning2ics:latest`
pour que le déploiement Swarm puisse puller l'image depuis le registre.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Backend FastAPI avec auth par cookie (users dans config.json)
- Upload PDF drag & drop, progression en temps réel (SSE)
- Identification des séries via Ollama (config URL dans config.json)
- Téléchargement ICS par série + historique des traitements
- Bouton vider le cache (site web + mapping LLM)
- Docker Swarm ready (docker-compose.yml + Dockerfile)
- Compatible iOS/Android/PC (responsive mobile-first)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>