← Retour à OPS BOARD

Nouveautés

Ce qui change sur OPS BOARD, dans l'ordre. Pour la liste complète des chantiers en cours, voir aussi les tarifs de l'offre Premium.

Bilan de saison visuel partageable (phase 2 du roadmap)

Une fois une saison archivée (grades figés), le club peut publier un bilan de saison public — opt-in : l'admin active le lien de partage, le régénère ou le coupe à tout moment. La page affiche la saison en chiffres (sessions, points cumulés, victoires au 1er rang, MVPs décernés), le podium et le classement complet par joueur (sessions, points, K/D, victoires, MVPs), les promotions de grades figées à la clôture et les MVPs par session. RGPD : jamais d'email ni de donnée de contact, page exclue des moteurs de recherche (meta noindex + robots.txt), révocable instantanément et purgée à la suppression de la saison.

Résultats de sessions et bilans vers Discord (phase 2 du roadmap)

Quand le club a configuré et activé son webhook Discord (réglages du club), les résultats sont annoncés automatiquement sur son canal : en fin de session, un embed « Résultat de session » (vainqueur, podium, MVP, total d'éliminations, nombre de joueurs) ; à la clôture d'une saison, un embed « Bilan de saison » (ligne de la saison, podium, promotions de grades) avec le lien du partage public s'il est activé. Envoi non bloquant (un échec n'empêche jamais la save ou la clôture), chaque session/saison annoncée une seule fois (journal Discord), et les imports historiques ne déclenchent rien.

Équilibrage automatique des camps par niveau (phase 2 du roadmap)

La répartition des équipes gagne un mode « Niveau (équilibré par les stats) », à côté des modes Aléatoire, Manuelle et Mixte conservés. Chaque joueur lié à un compte porte un niveau = son score cumulé sur les sessions du locataire (stats de saison, association comme compte indépendant). Le moteur répartit alors les joueurs du plus fort au plus faible en plaçant chacun dans la camp dont le score cumulé est le plus bas, pour équilibrer le total des deux camps — puisable directement dans le concepteur de session (avec aperçu avant la partie du score cumulé des deux camps) et modifiable à tout moment sur l'écran live. Les joueurs sans compte sont affectés à niveau zéro et répartis à parts égales.

Profil joueur public et carrière (phase 2 du roadmap)

Chaque compte peut désormais publier un profil joueur public — opt-in : c'est toi qui l'actives, génères un nouveau lien ou coupes la publication à tout moment. Le lien affiche ton nom, ta photo, tes stats de carrière (sessions, points, K/D, victoires au 1er rang, meilleure session) et, si tu joues en club, ton grade de saison en cours et ton palmarès des grades par saison. RGPD : jamais d'email, zéro donnée de contact, lien exclu des moteurs de recherche, purgé automatiquement si le compte est supprimé.

Rangs militaires et grades par saison (phase 2 du roadmap)

Chaque joueur porte désormais un grade militaire qui dérive de ses stats de saison : points, victoires (1er rang unique d'une session), participations et survies (session sans décès). L'échelle de 10 grades va de Recrue à Général. En cours de saison, le grade se calcule en direct dans le classement (colonne « Grade »). À la clôture de la saison — manuelle ou automatique quand on crée la suivante — la promotion est figée : chaque joueur garde son grade, son score et le détail de ses stats, consultables dans le palmarès de la saison.

Corrections responsive sur tout le site

Le site a été passé au crible de 320 px à 1280 px. Les tableaux de classement (session partagée, écran live) défilent désormais horizontalement au lieu de faire déborder la page, avec la colonne « Joueur » fixée à gauche. En portrait, l'écran live masque le QR code et empile les équipes. Les créneaux de sondage s'empilent proprement, les tableaux « tarifs » et « confidentialité » défilent sur mobile, et la zone de signature mineur comme la carte de démo ne provoquent plus le zoom automatique des champs sur iPhone. Au passage : cibles tactiles arrondies à 44 px sur le site public, hauteurs d'écran en 100dvh sous iOS, hero de la landing resserré en mobile.

PV d'AG automatisé (phase 2 du roadmap)

Fini de rediger le procès-verbal a la main : le bureau consigne le compte rendu (decisions, points votes) directement sur l'assemblée, puis « ⚡ Générer le PV automatique » compose un procès-verbal pre-rempli — entete de l'association, titre, date, lieu, ordre du jour, quorum (membres convoques), liste des presents issue de l'emargement en ligne horodate, et les constatations consignees. Le document est archive automatiquement dans Documents (categorie « PV d'AG ») et lie au PV n° de l'assemblée ; il se consulte et s'imprime en un clic (ou se telecharge en PDF depuis le navigateur). On peut re-generer le PV apres correction du compte rendu — le lien reste stable.

Funnel Premium : essai gratuit et renouvellement

Le Premium se découvre désormais sur un essai gratuit de 14 jours, sans carte bancaire, une seule fois par espace : on le lance depuis un onglet Premium (MilSim par exemple) avec « 🎁 Essayer gratuitement ». Pendant cet essai, le compte est traité comme Premium puis, sans passage au payant, revient automatiquement en formule gratuite à l'échéance — rien n'est perdu. Un rappel de fin d'essai (email + notification) arrive trois jours avant, et une bannière de compte à rebours dans l'appli affiche les derniers jours de l'essai comme de l'abonnement (avec renouvellement en un clic). Détail transparent : le paiement reste en un clic par carte via HelloAsso — le prélèvement automatique n'est pas possible avec l'API utilisée.

Mode hors-ligne pour les saisies terrain

Fin des saisies perdues sur le terrain : à chaque synchronisation, un brouillon local (localStorage, par compte et espace) est écrit en parallèle. Si le réseau coupe, l'appli continue à fonctionner — le brouillon conserve la saisie même si l'onglet est fermé — et le badge 📴 Hors-ligne apparaît dans la barre du haut. Au retour du réseau, la resynchronisation est automatique (ou immédiate en cliquant sur le badge), le dernier état écrit étant celui du client : rien n'est écrasé.

Télémétrie produit — DAU/MAU, rétention et adoption des modules

Le tableau de bord d'administration pilote désormais l'engagement des utilisateurs avec un journal d'activité strictement anonyme : les identifiants sont hachés (empreintes sha256, jamais stockés en clair), une ligne par utilisateur/action/jour au plus, et la collecte est silencieuse (une panne n'affecte jamais les requêtes). Il en sort les indicateurs DAU (utilisateurs actifs aujourd'hui) et MAU (fenêtre glissante de 30 jours) avec leur ratio, la courbe des 14 derniers jours, la rétention hebdomadaire des utilisateurs et des clubs, la rétention des clubs, le taux d'activation des nouveaux inscrits (proxy du taux d'invitation), et l'adoption des modules (utilisateurs uniques par module sur 30 jours).

Gestion multi-saisons avec archivage

Les soldes de trésorerie et les classements se calculent désormais par saison : le bureau définit la saison en cours (nom + dates début/fin, une seule à la fois) et chaque nouvelle saison archive automatiquement la précédente. Le solde d'ouverture (bilan avant le début de la saison) est reporté en tête de période, puis recettes, dépenses et solde sont bornés sur les dates de la saison — les stats ne s'additionnent plus sans limites. Une saison archivée est immuable et reste consultable, et chaque événement peut être archivé individuellement (drapeau, sans suppression) pour sortir les anciennes sorties des listes actives tout en gardant l'historique fidèle. L'onglet Saisons présente les cartes de saison, les événements bornés avec leur classement de période (participations et points).

Export complet des données du club

Le bureau télécharge d'un clic un fichier JSON regroupant toutes les données de l'association : membres (avec annuaire et licences), événements et leurs participants pointés au check-in et covoiturages, trésorerie (écritures + budgets), documents, sondages y compris les votes des invités, assemblées générales et leurs émargements, matériel et prêts, cotisations, rôles nommés et historique du bureau. L'idée : une réversibilité totale si le club veut migrer vers un autre outil ou archiver son historique. L'archive n'embarque jamais les mots de passe, les jetons de partage ni les IP de signature.

Feuille de présence PDF par événement

Depuis la modale de check-in d'un événement, le bureau génère une feuille de présence téléchargeable en PDF : les inscrits y figurent avec nom, email, leur état Présent ✓ / absent ☐ (pointé au check-in, avec l'heure d'arrivée) ainsi qu'une colonne signature vierge, et la récap entête indique le nombre d'inscrits, de présents et le taux de présence. Le document reprend le lieu, la date et le titre de l'événement, et se destine aussi bien à un procès-verbal d'assemblée générale qu'à une demande d'assurance.

Sondages de dates pour planifier sorties et AG

Le bureau propose plusieurs créneaux datés (sortie, AG, réunion…) et publie le sondage : les membres cochent les créneaux auxquels ils peuvent participer, avec une clôture automatique optionnelle. Un lien d'invitation partageable, créé et révocable depuis le sondage, permet aux invités non membres de voter eux aussi (nom + email, anonymisés dans les résultats) — idéal pour caler des dates avec des participants externes. Les résultats consolidés (membres + invités) font ressortir le créneau le plus disponible, et un bouton ✔ permet de créer directement l'événement sur le créneau retenu.

Assemblées générales : convocation électronique, émargement en ligne pour le quorum, PV numérotés

Le bureau rédige la convocation (titre, date, lieu, ordre du jour éditable) puis la publie : chaque membre actif est notifié dans l'appli et reçoit un email de convocation. L'accusé de réception passe par l'émargement en ligne — un clic, horodaté, une fois par membre — qui alimente la jauge de quorum en direct (présents / membres éligibles photographiés à la convocation). À la clôture, le PV reçoit son numéro de série (continuité par association) et le PDF peut être associé puis archivé dans le module Documents (catégorie « PV d'AG ») pour la consultation et l'impression.

Bulletins et annonces ciblés par email

Les administrateurs peuvent rédiger un message groupé et choisir qui le reçoit — tout le club, un rôle de bureau, les membres à licence à jour ou à renouveler, ou les inscrits à un événement — avec aperçu avant envoi (nombre de destinataires et premières adresses masquées). Le calcul des destinataires est toujours refait côté serveur, contre le plafond d'envoi, et chaque campagne est tracée dans un journal des envois (objet, cible, nombre de messages) sans jamais collecter d'adresse en clair : elles restent chiffrées dans les journaux conformément au RGPD.

Trésorerie étendue : pièces justificatives, solde par caisse, budget prévisionnel vs réalisé

Chaque écriture (recette ou dépense) peut porter une pièce justificative (numéro de facture, attestation, mandat…), reprise dans le détail des écritures, l'export CSV et le bilan annuel. Nouveau solde par caisse : espèces, chèque, virement, carte et encaissements en ligne HelloAsso, calculé à partir des écritures manuelles et des cotisations encaissées. Nouveau budget prévisionnel vs réalisé par catégorie avec écart recalculé en direct à chaque chargement. Le bilan annuel imprimable (assemblée générale, demandes de subvention) intègre ces deux sections.

Sécurité : politique CSP en observation + audit XSS

Une politique de sécurité de contenu (CSP) est désormais envoyée sur toutes les pages, d'abord en mode observation : les violations éventuelles sont collectées dans un journal serveur (et jamais bloquées) pour ajuster la configuration avant le passage en dur. Dans la foulée, les scripts embarqués restants (bouton d'installation, service worker, page démo) ont été externalisés dans des fichiers dédiés, et un audit des points d'injection (échappement systématique sur tous les rendus) a été passé au crible, verrouillé par la suite de tests.

Pagination du fil de discussion et de la trésorerie + export CSV des membres

Le fil de discussion n'affiche plus uniquement les 200 premiers messages : il se charge par pages et garde l'ordre chronologique. La trésorerie passe aussi en listes paginées (bouton « Charger plus », année et type conservés) — l'export CSV et le bilan annuel reprennent automatiquement la liste complète, pas seulement la première page. Nouvel export CSV des membres (nom, email, rôle, date d'adhésion) réservé au bureau, directement depuis l'espace club.

Chargement initial allégé — bibliothèques à la demande

Les scripts de l'appli sont exécutés en mode différé (defer, sans bloquer l'affichage), et les bibliothèques lourdes (graphiques admin, cartes Leaflet, QR codes, export d'image) ne sont plus téléchargées qu'au premier besoin : la page d'accueil évite ainsi plusieurs centaines de Ko inutiles tant que ces fonctionnalités ne sont pas ouvertes.

Sauvegarde durcie et copie hors-site optionnelle

La sauvegarde quotidienne est désormais vérifiée : après écriture, le fichier gzip est relu intégralement — un dump tronqué est détecté, supprimé et signalé, jamais conservé « au cas où ». Une empreinte SHA-256 accompagne chaque sauvegarde, et une copie hors-site optionnelle (serveur FTP distant) peut être activée en renseignant simplement quelques constantes (BACKUP_FTP_*) — sans dépendance ni bibliothèque à installer.

Limitation des créations/modifications en rafale

Connexion, mot de passe et invitations étaient déjà protégés ; c'est désormais le cas de l'ensemble des écritures sensibles (événements, annonces, cotisations, documents, matériel, chat, MilSim…). Chaque compte dispose d'un budget par action sur une fenêtre glissante, à cheval sur tous les modules — un client qui spamme l'API est bloqué temporairement (429) sans gêner les autres membres du club, ni même la partie MilSim en cours (positions GPS et radio non comptées).

Relance des non-inscrits avant chaque événement

Quelques jours avant une sortie terrain, les membres de l'association pas encore inscrits reçoivent un email « C'est bientôt : … » avec un lien Je viens ! menant directement à l'événement. Complément du rappel J-1 (réservé aux inscrits) et du digest hebdo : personne ne peut plus rater une sortie par manque d'information — chaque titre est envoyé une seule fois par événement. Les comptes de démo sont toujours exclus.

Centre d'aide — guides par module

Une nouvelle page Aide (liée depuis l'appli, la démo et les tarifs) regroupe les guides express Événements, Membres & bureau, Trésorerie, MilSim et Documents, plus une FAQ : abonnement calendrier, webhook Discord, verrouillage de compte, Premium…

Traqueur de migrations SQL

Le suivi des évolutions de base s'automatise : la table schema_migrations enregistre chaque fichier appliqué, et migration_runner.php applique les manquantes (un baseline rattache l'historique). Fini la gymnastique phpMyAdmin à chaque livraison.

Corrections & robustesse (vague 2 du nouveau roadmap)

L'export calendrier iCal (bouton « 📅 Abonnement calendrier ») est réparé : il renvoie un lien webcal stable par compte, régénérable pour révoquer un lien partagé. L'adresse IP du visiteur n'est plus prise dans l'en-tête X-Forwarded-For (modifiable côté client), ce qui fiabilise les garde-fous anti-abus. Les documents uploadés (PDF/Word/images scannées) sont désormais vérifiés par leur signature binaire réelle — plus seulement par le type annoncé. Enfin, les fichiers morts ont été nettoyés et la suite de tests couvre le flux iCal plus l'hygiène du dépôt, avec un contrôle de syntaxe automatique (php tests/lint.php) à lancer avant chaque déploiement.

Digest hebdo « vos événements de la semaine »

Chaque lundi, les membres actifs de chaque club reçoivent un email récapitulant les événements publiés des 7 jours à venir (date, lieu, places), avec un lien direct vers l'application. Le rappel automatique à J-1 existe déjà pour les inscrits — le digest donne cette fois la visibilité à tout le club, avant même l'inscription.

Intégration Discord — annonce des événements

Chaque association peut connecter le salon Discord de son club : à la publication d'un événement, l'annonce (date, lieu, places) part automatiquement dans le salon. Un sous-onglet « 🔔 Discord » dans l'espace club permet de coller l'URL du webhook, de tester la connexion ou de ré-annoncer manuellement un événement depuis sa fiche. Le rappel des membres se fait ainsi là où ils traînent déjà — sans effort supplémentaire pour l'organisateur.

Benchmark inter-clubs anonymisé

Dans l'onglet Statistiques, les associations Premium peuvent comparer leur club (effectif, fréquence des sorties, présence moyenne, sessions de jeu) à la distribution des autres clubs OPS BOARD — 100 % anonyme : seuls des médianes, quartiles et centiles sont affichés, jamais l'identité d'un autre club.

Mode démo / sandbox

La nouvelle vitrine démo montre l'appli en situation, et le bouton « Essayer la démo » ouvre directement un espace rempli de données fictives (club, événements, MilSim en Premium). Idéal pour se faire une idée sans créer de compte — et sans jamais toucher à un vrai club.

Activation du Premium en libre-service

Plus besoin d'écrire à l'équipe : l'abonnement Premium (mensuel ou annuel) s'active directement depuis l'appli ou la page tarifs, par carte via HelloAsso. Un email rappelle l'échéance avant chaque renouvellement.

Lancement de l'offre Premium

OPS BOARD reste gratuit à vie pour la gestion de club de base. Le Premium (3,99 €/mois ou 39,90 €/an par club) débloque le module MilSim, le dossier mineurs avec signature électronique, la gestion documentaire avancée et la trésorerie avancée. Détails sur la page tarifs.

Export calendrier iCal / Google Calendar

Chaque événement peut être ajouté directement à un calendrier externe, et un abonnement personnel (webcal) permet de suivre automatiquement tous les événements de son ou ses clubs.

Assistant de configuration pour les nouveaux clubs

À la création d'une association, un petit assistant guide désormais la mise en place initiale (rôle, cotisation, premier événement) — quel que soit le chemin d'inscription emprunté.

Vérification de la majorité à l'inscription

La date de naissance est désormais demandée à l'inscription, avec détection automatique des membres mineurs pour la gestion des autorisations parentales.

Paiements en ligne plus fiables

Les notifications de paiement HelloAsso sont désormais journalisées et surveillées, avec alerte automatique en cas d'anomalie — pour éviter qu'une cotisation payée n'échappe au suivi.

Sécurité renforcée

Protection anti brute-force sur la connexion, la réinitialisation de mot de passe et les liens d'invitation, ainsi qu'une politique de sécurité du contenu (CSP) pour limiter les risques d'injection.

Cette page reprend les évolutions visibles pour les clubs — le détail technique complet est suivi en interne.