Comité des Fêtes v2
Projet

Comité des Fêtes v2

La v2 de Comité des Fêtes est une refonte complète de l'application du comité des fêtes d'Ons-en-Bray (Oise). La v1 servait surtout à archiver les événements et les documents. La v2 couvre toute la gestion de l'association : le site public, l'organisation des événements et des bénévoles, les documents et les prêts de matériel. La trésorerie, le stock et les photos arrivent ensuite. L'application est maintenant en deux parties : une API Django Ninja d'un côté, un front Nuxt 4 de l'autre.

Projet en cours de développement. La v2 est en production sur cdf-onsenbray.fr depuis octobre 2026. La v1 (Django, Wagtail, HTMX) est archivée. Les fonctionnalités arrivent par phases, et chacune passe d'abord par une préproduction avant d'être mise en ligne.

Technologies utilisées

  • Back : Python 3.13, Django 6.1, Django Ninja 1.7 (Pydantic 2)
  • Front : Nuxt 4, Vue 3, TypeScript strict, Pinia
  • Base de données : PostgreSQL 17
  • Style : Tailwind CSS 4, avec un système visuel défini par des tokens
  • Authentification : JWT (django-ninja-jwt), avec le refresh token dans un cookie httpOnly
  • Contrat d'API : le schéma OpenAPI est généré par Django Ninja, et les types TypeScript en sont générés (openapi-typescript, openapi-fetch)
  • Tests : pytest, Vitest, Playwright
  • CI/CD : GitHub Actions, avec un déploiement continu
  • IA (à venir) : API Mistral, appelée par PydanticAI

Architecture

  • Deux dépôts publics : l'API d'un côté, le front de l'autre.
  • Rendu hybride : les pages publiques sont rendues côté serveur. Elles sont indexables et se lisent sans JavaScript. L'espace du bureau est une application qui tourne dans le navigateur.
  • Le schéma OpenAPI fait foi : le front n'a aucune interface d'API écrite à la main. La CI vérifie que ses types correspondent au schéma de l'API.
  • Vues fines, services épais : les endpoints ne gèrent que la partie HTTP. Les règles métier sont dans des services typés, testés sans HTTP.
  • Une seule origine : l'API et le site sont servis sur le même domaine, sans CORS.

Fonctionnalités principales

Pour le public

  • Accueil et agenda : le prochain rendez-vous avec son compte à rebours, et l'agenda filtrable par catégorie.
  • Fiches événements : programme, tarifs, lieu et « Bon à savoir ». La carte OpenStreetMap ne se charge que quand le visiteur clique dessus.
  • Calendrier : on peut s'abonner à l'agenda (ICS) ou ajouter un seul événement à son agenda.
  • Site sobre : il marche sans JavaScript, et les polices sont hébergées sur le site. Aucun service tiers n'est appelé tant que le visiteur ne le demande pas.

Pour les membres du bureau (en service)

  • Tableau de bord : les prochains événements, les tâches, les notes, et un panneau « À traiter » qui liste les documents à vérifier et les prêts à préparer ou en retard.
  • Organisation d'un événement : notes du bureau avec réponses, tâches assignées avec échéance, postes des bénévoles, et réservations avec capacité et export Excel.
  • Documents :
    • dépôt de PDF et de photos ; les photos sont converties en WebP et perdent leurs métadonnées, GPS compris ;
    • classement (facture, commande, compte rendu) et étape de validation ;
    • lecteur intégré à la page ;
    • e-mail au bureau à chaque dépôt ;
    • quand un ticket de caisse est perdu, une attestation sur l'honneur produite en PDF.
  • Matériel et prêts :
    • inventaire et prêts numérotés ;
    • disponibilités calculées jour par jour : un même matériel ne peut pas être prêté deux fois ;
    • sortie et retour, avec le matériel abîmé ou manquant ;
    • planning et convention de prêt imprimable.
  • Comptes : l'administrateur invite chaque membre par e-mail. Le membre choisit son mot de passe grâce à un lien à usage unique.

À venir

  • Trésorerie : journal des recettes et des dépenses, justificatifs, avances à rembourser, bilan pour l'AG.
  • Stock des marchandises : articles et seuils, liste de courses, réception des livraisons.
  • Photos et albums : des souvenirs publiés sur le site.
  • Assistant IA (Mistral) : lecture des documents déposés, formulaires pré-remplis et assistant du bureau.

Sécurité et données personnelles

  • Privé par défaut : toute l'API demande une connexion. Chaque endpoint public est déclaré un par un et ne renvoie aucune donnée personnelle.
  • Sessions : le jeton d'accès reste en mémoire. Le jeton de renouvellement est changé à chaque utilisation et révoqué ensuite. Le nombre de tentatives de connexion est limité.
  • Fichiers privés : ils passent par un endpoint qui vérifie les droits. Leur type est contrôlé sur le contenu du fichier, et non sur son extension.
  • RGPD : aucune donnée personnelle sur le site public. Une purge automatique tourne chaque nuit, selon les durées de conservation publiées sur le site.

Qualité

  • 100 % de couverture des lignes et des branches côté API, vérifiée par la CI.
  • Plus de 1 000 tests (pytest et Vitest), plus des parcours Playwright joués contre la vraie API.
  • Déploiement continu : chaque push est déployé en préproduction. Si le contrôle de santé échoue, le déploiement revient tout seul à la version précédente.
  • Outillage : ruff, ESLint, détection de secrets (gitleaks), validation du schéma OpenAPI.