# Livraisons par mois — xamxam ## Janvier 2026 (8 commits) - Site public affichant le contenu de la DB + fichiers - Formulaire de soumission séparé → écriture en base - Première version des contrôleurs TFE (création, édition) - Structure initiale du projet : routing, templates, DB SQLite - Schéma de base de données (theses, auteurs, formats, langues, etc.) ## Février 2026 (29 commits) - Formulaire admin + formulaire étudiant (partage) - Soumissions étudiant via liens de partage (share links) - Système de visibilité : Libre / Interne / Interdit - Pages statiques éditables (À propos) → début du CMS - Gestion des fichiers uploadés (stockage, affichage) - Export CSV des TFE - Import CSV des TFE - Structure admin : index, navigation, table listant les TFE - Base du système de licences (CC2r) ## Mars 2026 (74 commits) - Édition / correction / suppression des entrées TFE dans l'admin - Récapitulatif admin après soumission - Affichage public des TFE (page tfe.php) - Moteur de recherche dans le répertoire (par nom) - Filtres par orientation, AP, année, langue, finalité - Système d'authentification admin (login / mot de passe / session) - Protection par mot de passe des fichiers « Interne » - Données internes : points du jury, remarques, lien BAIU, exemplaires - Colonnes du répertoire : années, orientations, AP, mots-clés, noms - Rework CSS majeur (variables, typographie, thème clair/sombre) - Intégration HTMX pour les interactions dynamiques - Upload de fichiers avec queues JS (avant FilePond) - Structure formulaire : champs conditionnels selon les formats - PDF obligatoire / optionnel selon les formats - Jury (promoteurices, lecteurices) dans le formulaire admin ## Avril 2026 (207 commits) - Refonte complète des uploads : FilePond remplace les queues custom - Architecture d'upload asynchrone FilePond (process/revert/load/remove) - Pool unique TFE acceptant tous les formats (vidéo, audio, etc.) - Upload de masse avec barre de progression - Intégration PeerTube pour vidéos / audio (upload API, embed) - Système de brouillon automatique (autosave) pour le formulaire partage - Fragments HTMX partagés admin / partage (formats, fichiers, licence) - Extraction du JS inline en modules externes (admin-logs, clipboard, pill-search, etc.) - Composant pill-search pour mots-clés et langues (autocomplete HTMX) - Gestion des mots-clés et langues dans l'admin (rename, merge, delete) - TOC sidebar dans les pages admin (IntersectionObserver) - Tri des colonnes dans l'index admin (Auteur, Accès, etc.) - Liens de partage : nom éditable, expiration, dialogue d'édition - Obfuscation des emails en entités HTML (EmailObfuscator) - Récapitulatif exhaustif (partage + admin) - Champs conditionnels : website URL, annexes, PeerTube vs. upload direct - Promoteurices multiples (interne + ULB) avec ajout/suppression dynamique - Formulaire mobile responsive - Contact visible / contact interne découplés - CC2r renommé (ex-CC4r), restructuration des licences - Pages statiques : Charte, Licence, À propos avec TOC sticky - Checkboxes admin en auto-save HTMX avec toasts de feedback - Backups SQLite automatisés (horaire + quotidien, cron) - Déploiement : recettes justfile, vérification permissions, migrations incrémentales - Content-Security-Policy, HSTS, SameSite cookies - Script de scan passif de sécu (pentest) - Chiffrement du mot de passe SMTP (AES-256-GCM) - Rate limiting sur les endpoints sensibles ## Mai 2026 (156 commits) - FilePond : correction crash « can't access property main », tailles en bytes - Fichiers temporaires FilePond survivent au rechargement de page - Relink de fichiers orphelins (file browser + FilePond integration) - Trash policy : suppression → tmp/_trash avec traçabilité - Storage prefix : theses/ → documents/ - Recap admin : sections → fieldsets, fichiers en table - Extraction de FormBootstrap pour DRY add/edit - Système de colonnes thesis_status (two-phase commit lifecycle) - Draft autosave avec persistence session (HTMX POST/GET fragments) - Guard no-JS file uploads (filepond_mode désactivé par défaut) - Accessibilité formulaire : aria-errormessage, aria-invalid, aria-describedby - Cibles tactiles 44×44px minimum (WCAG 2.5.5) - Nettoyage périodique des brouillons orphelins (cron) - Durée TFE : colonnes DB, champs formulaire, affichage XhYm - Déploiement : split deploy-code/deploy-deps/deploy-migrate - Intégration Monolog : 4 canaux PSR-3 remplaçant 4 systèmes de log - Tests PHPUnit : 228 tests, couverture 21,27% - Remplacement Parsedown → league/commonmark - Remplacement client HTTP custom → Guzzle - Remplacement SMTP socket → PHPMailer - Composer.json et autoloader - Refactor architecture CSS : layers (reset → colors → typography → base → components) - Composants CSS dédiés par fichier (links, focus, forms, tables, dialog, etc.) - SVG icons inline via helper PHP (icon()) — plus de pour icônes - Style global : liens regular, body light, hover violet, police BBB DM Sans - Page TFE : layout auteur > titre > meta + synopsis 2-col > fichiers flex - Répertoire : colonnes triées (match first), scrollbars discrètes, pas de chip bar mobile - Accordéon mobile pour les filtres du répertoire - Détails/summary TOC pour pages statiques (responsive) - Contenus-edit : auto-save, toolbar OverType, liens sidebar dynamiques - Gestion des contacts admin (grille 3 colonnes, suppression, réindexation) - Corrections d'identifiants (year-prefix mismatch), migrations PHP - Fix contact_interne / contact_visible (découplage complet) - Author name casing (COLLATE NOCASE, idHint lookup) - Finalité master affichée sur la page publique TFE - Suppression vidéos PeerTube lors de la suppression d'un TFE - Nettoyage logs, gitignore vendor/, icône de recherche - Build pipeline : biome + rolldown + lightningcss (bundling/minification) - Dev-watch avec chokidar-cli (reconstruction live) - Gzip activé dans nginx + ~730 lignes de JS inline → 15 fichiers externes - Scroll-position memory sur les swaps HTMX du répertoire - Correctifs sécu (open redirect, CSRF partage, gate session, verifyCsrf) - Biome lint fixes (duplicate CSS, arrow functions) ## Juin 2026 (82 commits) - Migration icônes → SVG inline (26 templates, helper icon()) - Cleanup dialog : suppression doublons, hx-confirm sur delete - Refonte pages statiques (layout partagé, TOC sticky) - PHP upload limits → 8GB pour vidéos - Debug leftover crash HTMX FormData(fieldset) - Type hint adminOld corrigé (string → string|array) - Index SQLite pour requêtes langues/tags - Accordéon mobile répertoire : toggle, chevron, badge actif - Remplacement sticky nav par details/summary TOC responsive - Icône recherche corrigée - Scroll colonnes répertoire + admin TOC duplication - Filtres répertoire : tri matched-first, mot-clés en haut - Suppression chip bar mobile - Accordéon re-init après HTMX swap (bug DOM détaché) - Gzip + extraction JS inline - Build pipeline CSS/JS - Dev-watch - Transition scroll + swap fluide sur répertoire - Correctifs sécu (csrf partage, open redirect, verifyCsrf) - TODO et tasks de sécu complétés