L'outil des éducateurs du club : planifier les entraînements dans un calendrier, préparer les séances avec l'éditeur d'exercices visuel, puis les animer au bord du terrain. Les convocations et la messagerie restent dans SportEasy.
- Accueil = calendrier du mois, façon SportEasy : une grille du lundi au dimanche avec, dans chaque case, l'heure et le titre des entraînements, matchs, plateaux, tournois et réunions de toutes les équipes encadrées (filtre par équipe, mémorisé sur l'appareil). Sur téléphone, des pastilles de couleur, et la journée choisie s'affiche dessous.
- Un clic sur un jour montre sa journée ; le + de la case (ou un double-clic) ajoute un événement à cette date. Flèches ← → du clavier pour changer de mois, « T » pour revenir à aujourd'hui.
- Un clic sur un événement : ses horaires, son lieu, sa répétition, puis Préparer la séance (crée la séance et ouvre le choix des exercices), Voir la séance ou Lancer, Modifier (cette date ou toute la série) et Supprimer.
- Joueurs devient une petite page discrète (menu de l'équipe › Joueurs) : prénom, nom, année de naissance, catégorie et aisance, de quoi faire l'appel et équilibrer les groupes en séance.
- Retirés : messagerie et annonces, album souvenir, page Club (statistiques, import), convocations, mode match, cartes et entrée sur le terrain, covoiturage, temps de jeu, fiches joueurs détaillées, espace parents et inscription libre, notifications push. Les anciens comptes « parent » ne peuvent plus se connecter. Les données déjà enregistrées restent dans la base, simplement plus utilisées.
- Éditeur d'exercices visuel : terrains prédéfinis (foot à 5, à 8, à 11, demi-terrain, carré d'atelier, zone libre), 13 types d'éléments (joueurs par couleur de chasuble, ballons, coupelles, plots, piquets, cerceaux, haies, échelles, mini-buts, buts, mannequins, zones, éducateur), glisser-déposer, aimantation à la grille, sélection multiple, duplication, annuler/rétablir.
- Flèches reconnues automatiquement : un trait droit devient une passe, un trait sinueux une conduite. On peut aussi choisir course (pointillés) ou tir.
- Outils rapides : « Ligne » (répartit N coupelles, plots ou piquets entre deux points) et « Carré » (4 coupelles d'un geste).
- Animation
- Étapes : on déplace les joueurs, et les transitions sont calculées automatiquement.
- Enregistrement au doigt : on appuie sur ●, on déplace les joueurs en temps réel, à plusieurs doigts.
- Ballon intelligent : il suit son porteur. Pour faire une passe, on glisse le ballon sur un joueur.
- Lecture ×0,5, pas à pas et en boucle, avec les positions fantômes de l'étape précédente.
- Fiche exercice : objectif, consignes, variantes plus facile / plus difficile, thèmes, et matériel calculé automatiquement (dont le nombre de chasubles par couleur).
- Séances : échauffement, ateliers tournants, jeu, pause, retour au calme. La durée totale est calculée, et le matériel de la séance aussi (les ateliers simultanés s'additionnent).
- Séance live
- Appel en 10 secondes, puis groupes équilibrés (par aisance, par année ou au hasard) qu'on peut ajuster au doigt.
- Chrono en anneau, rotation automatique des ateliers avec sifflet (« Bleus → Atelier 2 »), +1 min, écran maintenu allumé.
- L'état est conservé si on recharge la page.
- Mode tableau : l'exercice s'affiche en plein écran pour le montrer aux enfants, et le terrain pivote automatiquement sur un téléphone tenu verticalement.
- Hors ligne : l'app est installable (PWA), les données déjà consultées restent disponibles, et les modifications sont mises en file puis envoyées au retour du réseau.
- Administrateur unique et rôles Dirigeant et Éducateur, avec une matrice de permissions modifiable.
- Équipes : la catégorie (U6 à Seniors, Féminines, Futsal…) sert de nom à l'équipe. Chaque équipe a aussi sa saison, sa couleur et ses éducateurs.
- Paramètres : le profil et, selon les droits, l'administration (membres, équipes, permissions, club).
- Invitations par lien à envoyer par SMS, WhatsApp ou e-mail.
- Mot de passe oublié : depuis la connexion ou Paramètres › Profil (lien par e-mail si configuré), et lien de réinitialisation à créer depuis Paramètres › Membres.
- Calendrier : chaque événement a des horaires, un lieu, un adversaire et domicile/extérieur pour les matchs, une couleur et des notes. Répétitions : chaque jour, chaque semaine (jours au choix), toutes les 2 semaines, chaque mois ou un rythme personnalisé, avec une fin à une date ou après N fois. On peut modifier ou annuler une seule date d'une série.
- Lien public de séance, sans compte, à partager (SportEasy, WhatsApp…).
- Export vidéo (MP4/WebM) d'un exercice animé, avec partage natif sur mobile.
- Impression de la fiche de séance, mode sombre.
Deux cases flottantes, en icônes seules : Équipe | Calendrier · Exercices. Sur téléphone, elles passent en bas de l'écran. Le bouton Équipe permet de changer d'équipe et donne accès aux Joueurs et aux Paramètres.
Il faut Node.js 22.13 ou plus récent. La base SQLite est intégrée à Node, il n'y a rien d'autre à installer.
npm installnpm run devOuvrez http://localhost:5173. Au premier lancement, vous créez le club et votre compte administrateur. La case « équipe d'exemple » ajoute un groupe U8/U9 de 18 joueurs, un entraînement chaque mercredi avec sa séance prête à lancer, et un match.
npm run buildPORT=3000 npm startUn seul processus sert l'application et l'API. Les données sont dans data/atelier.db (modifiable avec DATABASE_FILE).
-
HTTPS obligatoire en production : les cookies de session sont marqués
Secure. Pour un test sur le réseau local en HTTP, lancez avecINSECURE_COOKIES=1. -
Hébergement gratuit ou presque :
- une VM « Always Free » (Oracle Cloud) ;
- un Raspberry Pi au club avec Cloudflare Tunnel pour le HTTPS ;
- un petit VPS.
Évitez les offres sans disque persistant : la base serait effacée à chaque redémarrage.
-
E-mails (facultatif) : avec
RESEND_API_KEYetMAIL_FROM(ex.LevelUp <noreply@mondomaine.fr>, domaine vérifié sur resend.com), le lien « mot de passe oublié » part par e-mail.APP_URLfixe l'adresse utilisée dans les liens. Sans configuration, l'administrateur crée le lien depuis Paramètres › Membres. -
Fuseau horaire : le serveur fonctionne à l'heure de Paris. Utilisez
TZpour un autre fuseau. -
Sauvegarde : copiez
data/atelier.db*serveur arrêté, ou utilisezsqlite3 data/atelier.db ".backup sauvegarde.db". -
Sur téléphone : dans Safari ou Chrome, faites « Ajouter à l'écran d'accueil » pour obtenir l'app plein écran.
server/ API Express + SQLite (node:sqlite)
auth.js sessions (cookie httpOnly), mots de passe scrypt, rôles et permissions
api.js routes REST, contrôle d'accès par équipe et par rôle
players.js effectif des équipes
password.js mot de passe oublié
demo.js bibliothèque de démarrage et équipe d'exemple
src/
pitch/ moteur terrain : géométrie, rendu canvas, animation, édition, export vidéo
pages/ écrans (calendrier, éditeur, séances, live, joueurs, paramètres…)
lib/ API (file d'attente hors-ligne), contexte, types
Les identifiants sont générés côté client et les écritures sont des PUT idempotents : une modification faite hors ligne peut être rejouée sans risque de doublon.
- Seuls les éducateurs et dirigeants du club ont un compte ; chacun ne voit que les équipes qu'il encadre (sauf permission « toutes les équipes »).
- L'effectif ne contient que le prénom, le nom, l'année de naissance et le niveau d'aisance.
- Le lien public d'une séance ne contient ni présences, ni groupes, ni notes des éducateurs.