Gestion des officiels de table — Basket

Projet interne

Informations

Client
Projet interne
Date
septembre 2026
Catégories
Applications Web
Technologies
Laravel 13 PHP 8.3+ Tailwind CSS 4 MariaDB Redis spatie/laravel-permission WebAuthn / Passkeys DOMPDF PhpSpreadsheet Vite

Cette application couvre l'intégralité du cycle de gestion des officiels de table (OTR) pour les matchs de basket-ball. Elle adresse deux profils distincts : les administrateurs (responsables de club ou de secteur) qui gèrent les matchs, les attributions et les pools d'OTRs, et les officiels eux-mêmes, qui n'ont besoin que d'un accès simple et sécurisé pour confirmer leurs disponibilités et leurs attributions.

L'authentification est différenciée selon le profil. Les OTRs accèdent à leur espace via un lien magique signé directement depuis les notifications — sans création de compte. Ils peuvent opter pour un accès complet (step-up) s'ils le souhaitent. Les administrateurs bénéficient d'une authentification par mot de passe renforcée, avec support complet des Passkeys (WebAuthn) pour une connexion sans mot de passe.

Les matchs sont synchronisés automatiquement depuis BasketPlan, la plateforme officielle de gestion des matchs de Swiss Basketball (import Excel .xls/.xlsx ou iCalendar .ics). L'application déduplique les matchs par hash source et génère automatiquement les postes selon la configuration de chaque équipe-saison : Chrono, Tablette, Shot Clock (14/24), Remplaçant. Les postes personnalisés et les slots déjà attribués ne sont jamais supprimés lors d'une resynchronisation.

Le workflow d'attribution couvre toutes les étapes : l'administrateur génère les attributions (batch ou unitaires), l'OTR est notifié et confirme ou refuse. Des rappels sont envoyés automatiquement si l'OTR n'a pas répondu. Chaque attribution est tracée (qui a attribué, quand, état de confirmation). En parallèle, les OTRs déclarent leur disponibilité (Oui / Si nécessaire / Non) pour chaque match, avec commentaire optionnel.

L'application prend en charge plusieurs équipes et saisons. Chaque configuration équipe-saison définit le pool d'OTRs, les rôles dans le pool, et les options home_only_otr (OTRs uniquement pour les matchs à domicile) et no_shot_clock. Un staff de contacts (non-OTRs) est géré séparément. L'export PDF génère les listes d'OTRs et les attributions par équipe ou toutes équipes confondues.

L'application est construite sur Laravel 13 / PHP 8.3+ avec une architecture type-safe (Enums PHP 8.1+ pour tous les statuts métier). La gestion des rôles et permissions s'appuie sur Spatie Laravel Permission. Les rappels automatiques et jobs asynchrones transitent par Redis. Un CAPTCHA proof-of-work maison (oliweb/laravel-cap) protège les formulaires publics.

Ce que ce projet illustre de mon expertise

  • Authentification différenciée : liens magiques signés pour les OTRs (accès stateless depuis les notifications), Passkeys WebAuthn pour les admins
  • Synchronisation BasketPlan (Excel/ICS) avec déduplication par hash source et génération automatique des postes selon la config équipe-saison
  • Workflow d'attribution complet : génération batch, confirmation/refus OTR, rappels automatiques, traçabilité totale
  • Gestion multi-équipes et multi-saisons avec pools d'OTRs par rôle, options home_only_otr et no_shot_clock
  • Architecture PHP 8.1+ type-safe : Enums (GameStatus, AssignmentStatus, SlotType, AvailabilityStatus) sur l'ensemble du domaine métier