TournoiPro - Roadmap MVP

Application de gestion de tournois de Padel en double

🎯 Vision du MVP

Application Rails 8 permettant aux juges-arbitres, gestionnaires de clubs et joueurs de gérer des tournois de padel en double de maniÚre collaborative avec un systÚme d'ACL (Access Control List) au niveau objet.

📋 Table des matiùres

  1. Gestion des utilisateurs
  2. Gestion des tournois
  3. Gestion des terrains
  4. Gestion des clubs
  5. Gestion des matchs
  6. Architecture technique

1. Gestion des utilisateurs

1.1 RĂŽles et permissions

RĂŽles principaux

  • Admin : Gestion complĂšte de la plateforme
  • Juge-Arbitre (JAP) : Organisateur et responsable des tournois
  • Gestionnaire de club : Gestion des infrastructures et terrains
  • Joueur : Participant aux tournois

Niveaux de Juge-Arbitre Padel (FFT)

  • JAP1 : CompĂ©tent pour P25 et P100 au niveau dĂ©partemental
  • JAP2 : CompĂ©tent pour P25 Ă  P1000 au niveau ligue
  • JAP3 : CompĂ©tent pour tous les tournois au niveau national
  • JAPI : CompĂ©tence JAP3 Ă©tendue aux compĂ©titions internationales

1.2 SystĂšme de classement des joueurs

Classement FFT national

Les joueurs sont classés selon leur rang national et leur moyenne de points sur les 12 meilleurs résultats des 12 derniers mois.

Niveaux de jeu (FFT 2024)

  • Niveau 1-3 : DĂ©butant Ă  intermĂ©diaire
  • Niveau 4 : IntermĂ©diaire (P25/P100 fin de tableau, moyenne 5-25 pts)
  • Niveau 5 : IntermĂ©diaire confirmĂ© (P100 top 4, P250 milieu tableau, moyenne 25-50 pts)
  • Niveau 6 : AvancĂ© (P250 tĂȘte de sĂ©rie, moyenne 50+ pts)
  • Niveau 7 : Expert (P500+, top 500 hommes / top 100 femmes)

Restrictions de participation aux tournois (FFT 2023)

P25 (tournois loisirs)
- Dames : Top 1000 interdit
- Hommes : Top 10.000 interdit
- Niveau minimum : 4/4.5/5 selon régions

P100
- Dames : Classement > 300Ăšme
- Hommes : Classement > 2000Ăšme
- Poids de paire minimum : 1000
- Niveau : 4 et 5 principalement

P250
- Dames : Classement > 100Ăšme
- Hommes : Classement > 500Ăšme
- Niveau : 6 et 7 principalement
- 12 paires minimum

P500 et supérieurs
- Pas de limitation mais gestion FFT stricte
- Date limite inscription : J-14 Ă  23h59
- Validation des tableaux par la FFT

1.3 SystĂšme d'ACL (Access Control List)

Le systÚme d'ACL permet une granularité fine au niveau objet (tournoi).

Permissions disponibles

  • Lecture : Consultation des informations du tournoi
  • Écriture : Modification des donnĂ©es du tournoi
  • Administration : Gestion complĂšte incluant permissions

Matrice de permissions par rĂŽle

RĂŽle CrĂ©er tournoi Lire Écrire GĂ©rer ACL Valider scores
Juge-Arbitre (crĂ©ateur) ✓ ✓ ✓ ✓ ✓
Juge-Arbitre (invitĂ©) - ✓ selon ACL ✓ selon ACL - ✓
Gestionnaire club - ✓ selon ACL ✓ selon ACL - -
Joueur - ✓ (leur tournoi) - - ✓ (leurs matchs)

Cas d'usage

  1. JAP crée un tournoi : Il obtient tous les droits
  2. JAP ajoute un co-organisateur : Autre JAP en lecture/écriture
  3. JAP ajoute gestionnaire club : Lecture seule ou lecture/écriture selon besoin
  4. Joueurs inscrits : Lecture automatique + saisie scores avec validation adversaire

1.4 Données utilisateur

ruby
# ModĂšle User
- email (unique, required)
- nom, prénom
- role (enum: admin, juge_arbitre, gestionnaire_club, joueur)
- niveau_jap (enum: JAP1, JAP2, JAP3, JAPI) # Si juge_arbitre
- classement_fft (integer) # Rang national pour joueurs
- niveau_jeu (integer, 1-7) # Niveau FFT pour joueurs
- moyenne_points (decimal) # Moyenne points/tournoi sur 12 mois
- licence_fft (string) # Numéro licence obligatoire pour compétition
- date_naissance
- encrypted_password
- timestamps

2. Gestion des tournois

2.1 Types de tournois (FFT)

Catégories selon le nombre de points

  • P25 : 25 points (joueurs intermĂ©diaires, loisir)
  • P100 : 100 points (intermĂ©diaire confirmĂ©)
  • P250 : 250 points (avancĂ©s)
  • P500 : 500 points (avancĂ©s+)
  • P1000 : 1000 points (experts)
  • P1500 : 1500 points (experts)
  • P2000 : 2000 points (top niveau)

Particularités par catégorie

P25 - Tournoi loisir
- Phase de poules possible : 5-6 paires en super tie-breaks de 10 points
- Puis 3 tableaux selon classement poule
- Format court : 3 matchs de 4 jeux chacun
- Gestion locale par comité de tournoi
- Inscription jusqu'Ă  J-1

P100
- 8 paires minimum
- Format standard avec tableaux éliminatoires
- Gestion locale
- Historiquement le 1er tournoi homologué

P250
- 12 paires minimum
- Catégorie "reine" des clubs
- TĂȘtes de sĂ©rie importantes
- Gestion locale

P500 et supérieurs
- Gestion FFT nationale
- Tableaux 100% sur classement officiel
- Inscription J-14 Ă  23h59
- Validation FFT des tableaux en amont
- Qualifications possibles

2.2 Structure d'un tournoi

TĂȘtes de sĂ©rie (Seeds)

Les tĂȘtes de sĂ©rie sont dĂ©terminĂ©es selon le classement FFT des paires.

RĂšgles importantes :
- Les tĂȘtes de sĂ©rie peuvent ĂȘtre exemptĂ©es de premier tour (BYE)
- Elles doivent jouer minimum 3 matchs mĂȘme si exemptĂ©es au 1er tour
- Placement dans le tableau pour éviter de se rencontrer trop tÎt
- Le nombre de tĂȘtes de sĂ©rie dĂ©pend du nombre de participants

SystĂšme de BYE

  • AccordĂ© aux meilleures tĂȘtes de sĂ©rie quand nombre de paires non puissance de 2
  • Permet d'Ă©quilibrer le tableau
  • Exemple : 12 paires = 4 BYE pour 1er tour

Phases du tournoi

  1. Qualifications (si nécessaire pour P500+)
  2. Tableau principal
    • Premier tour
    • HuitiĂšmes de finale
    • Quarts de finale
    • Demi-finales
    • Finale
  3. Tableau de consolante (optionnel pour P25)
    • Perdants du 1er tour s'affrontent entre eux
    • MĂȘme nombre de matchs pour tous

2.3 Formats de matchs

Les formats varient selon la catégorie et la durée souhaitée.

Format A (long - finales)

  • A1 : 3 sets Ă  6 jeux
  • A2 : 3 sets Ă  6 jeux, point dĂ©cisif

Format B (standard)

  • B1 : 2 sets Ă  6 jeux ; 3Ăšme set = super tie-break Ă  10 points
  • B2 : 2 sets Ă  6 jeux, point dĂ©cisif ; 3Ăšme set = super tie-break Ă  10 points

Format C (court)

  • C1 : 2 sets Ă  4 jeux, jeu dĂ©cisif Ă  4/4 ; 3Ăšme set = super tie-break Ă  10 points
  • C2 : 2 sets Ă  4 jeux, point dĂ©cisif, jeu dĂ©cisif Ă  4/4 ; 3Ăšme set = super tie-break

Format D (trĂšs court)

  • D1 : 1 set Ă  9 jeux, jeu dĂ©cisif Ă  7 points Ă  8/8
  • D2 : 1 set Ă  9 jeux, point dĂ©cisif, jeu dĂ©cisif Ă  7 points Ă  8/8

Format E (express - P25 uniquement)

  • 1 set Ă  10 points (super tie-break)

Restrictions par jour (FFT)

Pour protéger les joueurs :
- 2 matchs/jour : Tous formats possibles
- 3 matchs/jour : Maximum 2 matchs en format A1/A2
- 5 matchs/jour : Aucun format A1/A2, max 3 matchs C1/C2/D1/D2
- 7+ matchs/jour : Uniquement P25 sur soirée/demi-journée, format E principalement

2.4 Horaires et convocations

Gestion des créneaux

  • Heure de convocation pour chaque match
  • Attribution d'un terrain disponible
  • Temps de repos rĂ©glementaire entre matchs
  • PossibilitĂ© de dĂ©rogation avec accord Ă©crit des 4 joueurs

Planning automatisé

  • Calcul durĂ©e estimĂ©e selon format
  • Éviter conflits de terrains
  • Respecter repos minimum rĂ©glementaire
  • Notification aux joueurs

2.5 Attribution des points

Le nombre de points attribués dépend de la place finale et du nombre de participants.

Points vainqueurs (fixes)

  • P25 : 25 points
  • P100 : 100 points
  • P250 : 250 points
  • P500 : 500 points
  • etc.

Points dégressifs

La répartition des points pour les autres places suit un barÚme FFT qui varie selon :
- Le nombre total de paires inscrites
- La place obtenue dans le tournoi
- Le type de tableau (principal, consolante)

2.6 Données tournoi

ruby
# ModĂšle Tournament
- nom (string, required)
- type_tournoi (enum: P25, P100, P250, P500, P1000, P1500, P2000)
- club_id (foreign key)
- date_debut, date_fin
- date_limite_inscription
- statut (enum: brouillon, ouvert_inscriptions, cloture_inscriptions, en_cours, termine, annule)
- nombre_paires_min, nombre_paires_max
- format_match_principal (enum: A1, A2, B1, B2, C1, C2, D1, D2, E)
- format_finale (enum)
- avec_qualifications (boolean)
- avec_consolante (boolean)
- nombre_tetes_serie (integer)
- homologue_fft (boolean)
- numero_homologation (string)
- juge_arbitre_principal_id (foreign key -> User)
- description (text)
- reglement (text)
- prize_money (decimal) # P500+ uniquement
- timestamps

# ModĂšle TournamentPermission (ACL)
- tournament_id
- user_id
- permission_type (enum: read, write, admin)
- granted_by_id (qui a donné la permission)
- timestamps

3. Gestion des terrains

3.1 Normes FIP/FFT

Dimensions réglementaires

  • Surface de jeu : 20m x 10m (200 mÂČ)
  • Surface totale recommandĂ©e : minimum 240 mÂČ (avec zones de sĂ©curitĂ©)
  • Filet :
    • Longueur : 10m
    • Hauteur centre : 88 cm
    • Hauteur extrĂ©mitĂ©s : 92 cm

Murs et parois

  • Murs arriĂšre : 10m large x 4m haut (3m verre + 1m grillage)
  • Murs latĂ©raux :
    • Configuration "escalier" europĂ©enne
    • 2 premiers mĂštres : 4m haut (3m verre + 1m grillage)
    • Reste : 3m haut
  • Portes d'accĂšs : Au centre des parois latĂ©rales

Hauteur libre (CRITIQUE pour homologation)

Minimum réglementaire FIP/FFT :
- 6 mĂštres minimum absolu sur toute la surface
- SANS AUCUN ÉLÉMENT D'OBSTRUCTION dans cette zone
- Pas de lampadaire, poutre, tuyau qui dépasse

Recommandations :
- 8 mÚtres fortement conseillé pour nouvelles installations
- 10 mĂštres optimal pour clubs haut niveau
- Tolérance FFT tacite à 7m mais risque pour l'expérience joueur

⚠ Note importante : De nombreux clubs avec moins de 8m perdent des clients au profit de concurrents avec plafonds plus hauts.

3.2 Types de terrains

Par localisation

  • IntĂ©rieur (Indoor) : Sous structure couverte
  • ExtĂ©rieur (Outdoor) : À l'air libre

Caractéristiques pour homologation

  • Hauteur sous plafond (si intĂ©rieur) : ≄ 6m rĂ©glementaire, 8m recommandĂ©
  • Éclairage : Conforme pour jeu nocturne (lux minimum)
  • Surface : Gazon synthĂ©tique homologuĂ©, qualitĂ© suffisante
  • Verre : 10-12mm Ă©paisseur minimum
  • PossibilitĂ© de sorties : Zone libre 2m x 1.4m x 3m haut
  • Cadre acier : Épaisseur profil suffisante

3.3 Statut d'homologation

Un terrain peut ĂȘtre homologuĂ© pour accueillir des compĂ©titions officielles FFT.

CritĂšres d'homologation FFT

  • Dimensions conformes aux normes
  • Hauteur rĂ©glementaire respectĂ©e
  • MatĂ©riaux conformes (verre, gazon)
  • Éclairage suffisant
  • Zones de sĂ©curitĂ© prĂ©sentes
  • ContrĂŽle par expert agréé FFT

Types d'homologation

  • HomologuĂ© compĂ©tition : Peut accueillir tous types de tournois
  • Usage loisir : Non homologuĂ© mais peut accueillir jeu libre
  • En cours d'homologation : Demande dĂ©posĂ©e, en attente validation

3.4 Données terrain

ruby
# ModĂšle Court
- club_id (foreign key)
- nom (string, required) # Ex: "Court Central", "Court 1"
- numero (integer)
- type_localisation (enum: interieur, exterieur)
- hauteur_sous_plafond (decimal) # En mÚtres, pour intérieur uniquement
- possibilite_sorties (boolean)
- homologue (boolean)
- niveau_homologation (enum: P25, P100, P250, P500, P1000+) # Si homologué
- date_homologation
- certificat_homologation (string) # Référence document FFT
- surface_type (string) # Ex: "Gazon synthétique Mondo"
- eclairage_conforme (boolean)
- statut (enum: disponible, maintenance, hors_service)
- notes (text)
- timestamps

# ModĂšle CourtAvailability (pour planning tournoi)
- court_id
- tournament_id
- date
- heure_debut, heure_fin
- disponible (boolean)

4. Gestion des clubs

4.1 Informations club

Données principales

  • Nom et raison sociale
  • Adresse complĂšte
  • CoordonnĂ©es GPS (pour applications mobiles futures)
  • TĂ©lĂ©phone, email, site web
  • Affiliation FFT (numĂ©ro)

4.2 Données club

ruby
# ModĂšle Club
- nom (string, required)
- adresse (string)
- code_postal (string)
- ville (string)
- pays (string, default: 'France')
- latitude, longitude (decimal)
- telephone (string)
- email (string)
- site_web (string)
- numero_affiliation_fft (string)
- date_affiliation_fft
- nombre_terrains_total (integer)
- nombre_terrains_interieurs (integer)
- nombre_terrains_exterieurs (integer)
- gestionnaire_principal_id (foreign key -> User)
- description (text)
- photo_url (string)
- timestamps

# Association
Club has_many :courts
Club has_many :tournaments
Club has_many :club_managers (User avec role gestionnaire_club)

5. Gestion des matchs

5.1 Structure d'un match

Composition

  • 2 Ă©quipes (paires) de 2 joueurs chacune
  • Terrain assignĂ©
  • Horaire de convocation
  • Format de jeu
  • Tour du tournoi (1er tour, 1/8, 1/4, 1/2, finale)

5.2 Saisie et validation des scores

Workflow de validation

  1. Joueurs saisissent le score : Une équipe propose le score
  2. Contre-validation adversaire : L'équipe adverse doit confirmer
  3. Validation JAP : Le juge-arbitre valide définitivement
  4. Calcul automatique : Points attribués, classement mis à jour

Cas de désaccord

  • Si adversaires ne valident pas : Alerte au JAP
  • JAP arbitre et valide le score correct
  • Historique des modifications conservĂ©

5.3 Données match

ruby
# ModĂšle Match
- tournament_id (foreign key)
- court_id (foreign key)
- round (enum: qualifications, premier_tour, huitiemes, quarts, demis, finale, consolante)
- match_number (integer) # Numéro dans le tour
- date_match
- heure_convocation
- heure_debut_reelle
- heure_fin_reelle
- format_match (enum: A1, A2, B1, B2, C1, C2, D1, D2, E)
- statut (enum: planifie, en_cours, termine, forfait, reporte)
- timestamps

# ModĂšle Team (paire)
- tournament_id
- joueur1_id (foreign key -> User)
- joueur2_id (foreign key -> User)
- seed_number (integer) # NumĂ©ro tĂȘte de sĂ©rie si applicable
- poids_paire (integer) # Somme classements pour vérif contraintes
- points_tournoi (integer)
- statut (enum: inscrit, valide, elimine, vainqueur)

# ModÚle MatchTeam (participation équipe au match)
- match_id
- team_id
- position (enum: team1, team2)
- score_set1, score_set2, score_set3 (integer)
- vainqueur (boolean)

# ModĂšle ScoreProposal (pour validation)
- match_id
- proposed_by_team_id
- score_team1_set1, score_team1_set2, score_team1_set3
- score_team2_set1, score_team2_set2, score_team2_set3
- validated_by_opponent (boolean, default: false)
- validated_by_jap (boolean, default: false)
- validated_at
- notes (text) # En cas de contestation
- timestamps

6. Architecture technique

6.1 Stack technique

Backend

  • Ruby 3.3+
  • Rails 8.0 (dernier stable)
  • PostgreSQL 16+ (base de donnĂ©es)
  • Devise (authentification)
  • Pundit (autorisation + ACL personnalisĂ©)
  • Active Storage (upload documents/photos)

Frontend

  • Hotwire (Turbo + Stimulus) - Rails 8 natif
  • Tailwind CSS (styling)
  • ViewComponent (composants rĂ©utilisables)

Tests

  • RSpec (tests)
  • FactoryBot (fixtures)
  • Capybara (tests systĂšme)

6.2 ModĂšles principaux

text
User (Devise)
  ├── has_many :created_tournaments (as juge_arbitre)
  ├── has_many :tournament_permissions
  ├── has_many :accessible_tournaments, through: :tournament_permissions
  ├── has_many :teams (as joueur1 or joueur2)
  └── belongs_to :managed_club (optional, if gestionnaire_club)

Club
  ├── has_many :courts
  ├── has_many :tournaments
  └── belongs_to :gestionnaire_principal (User)

Court
  ├── belongs_to :club
  └── has_many :matches

Tournament
  ├── belongs_to :club
  ├── belongs_to :juge_arbitre_principal (User)
  ├── has_many :tournament_permissions
  ├── has_many :authorized_users, through: :tournament_permissions
  ├── has_many :teams
  └── has_many :matches

Team
  ├── belongs_to :tournament
  ├── belongs_to :joueur1 (User)
  ├── belongs_to :joueur2 (User)
  └── has_many :match_teams

Match
  ├── belongs_to :tournament
  ├── belongs_to :court
  ├── has_many :match_teams
  ├── has_many :teams, through: :match_teams
  └── has_many :score_proposals

TournamentPermission (ACL)
  ├── belongs_to :tournament
  ├── belongs_to :user
  └── belongs_to :granted_by (User)

MatchTeam
  ├── belongs_to :match
  └── belongs_to :team

ScoreProposal
  ├── belongs_to :match
  └── belongs_to :proposed_by_team (Team)

6.3 Fonctionnalités MVP (Phase 1)

Authentification et autorisations

  • ☐ Sign up / Sign in avec Devise
  • ☐ Profil utilisateur avec rĂŽle et niveau
  • ☐ SystĂšme ACL au niveau tournoi avec Pundit
  • ☐ Gestion des permissions lecture/Ă©criture/admin

Gestion des clubs

  • ☐ CRUD clubs
  • ☐ Association gestionnaire ↔ club
  • ☐ Liste et carte des clubs

Gestion des terrains

  • ☐ CRUD terrains rattachĂ©s Ă  un club
  • ☐ CaractĂ©ristiques : intĂ©rieur/extĂ©rieur, homologation, hauteur
  • ☐ Statut disponibilitĂ©

Gestion des tournois

  • ☐ CrĂ©ation tournoi par JAP avec type (P25-P2000)
  • ☐ Configuration : dates, format match, tĂȘtes de sĂ©rie
  • ☐ Gestion permissions : ajout co-JAP, gestionnaire club
  • ☐ Contraintes de participation selon classement
  • ☐ Calcul automatique nombre BYE
  • ☐ Inscription des Ă©quipes (paires)
  • ☐ Validation contraintes poids paire

Gestion des matchs

  • ☐ GĂ©nĂ©ration automatique du tableau
  • ☐ Placement des tĂȘtes de sĂ©rie
  • ☐ Attribution BYE
  • ☐ Planning automatique : terrain + horaire
  • ☐ Respect contraintes : repos entre matchs, disponibilitĂ© terrains

Saisie et validation scores

  • ☐ Interface saisie score pour joueurs
  • ☐ SystĂšme de contre-validation adversaire
  • ☐ Validation finale par JAP
  • ☐ Historique modifications
  • ☐ Calcul automatique vainqueur
  • ☐ Progression dans le tableau

Tableau et classement

  • ☐ Affichage tableau temps rĂ©el
  • ☐ Classement provisoire du tournoi
  • ☐ Attribution automatique des points selon barĂšme FFT
  • ☐ Suivi historique joueur

Dashboard et notifications

  • ☐ Dashboard JAP : mes tournois, prochains matchs
  • ☐ Dashboard joueur : mes inscriptions, prochains matchs
  • ☐ Notifications par email : convocation, changement horaire

6.4 Fonctionnalités futures (Phase 2+)

Avancées

  • ☐ Application mobile (React Native ou Flutter)
  • ☐ IntĂ©gration API FFT (classements officiels)
  • ☐ Gestion paiements inscriptions (Stripe)
  • ☐ Live scoring temps rĂ©el
  • ☐ Statistiques avancĂ©es joueurs
  • ☐ GĂ©nĂ©ration documents officiels (feuilles de match)
  • ☐ Export PDF rĂ©capitulatif tournoi
  • ☐ Gestion multi-clubs et circuits
  • ☐ SystĂšme de communication intĂ©grĂ© (chat)
  • ☐ Mode hors-ligne pour JAP (PWA)

📚 RĂ©fĂ©rences

Documentation FFT

  • Guide de la compĂ©tition Padel (Chapitre I - RĂšgles gĂ©nĂ©rales)
  • Cahier des charges des tournois
  • BarĂšmes de points P25, P100, P250, P500+
  • Niveaux de padel 2024

Normes techniques

  • FĂ©dĂ©ration Internationale de Padel (FIP) - SpĂ©cifications terrains
  • FFT - Normes d'homologation des terrains
  • Guide construction terrain padel

Contraintes réglementaires

  • Licence FFT obligatoire pour participer aux tournois homologuĂ©s
  • JAP obligatoire pour homologation tournoi
  • Saisie rĂ©sultats : 24h maximum aprĂšs fin tournoi
  • Limitation simultanĂ©itĂ© : Maximum 3 P1000 simultanĂ©s en France (si Ă©loignĂ©s)
  • DĂ©lais inscription :
    • P25-P250 : Jusqu'Ă  J-1 (gestion locale)
    • P500+ : J-14 Ă  23h59 (validation FFT)

🎯 MĂ©triques de succĂšs MVP

Utilisateurs

  • 10+ clubs enregistrĂ©s
  • 50+ joueurs inscrits
  • 5+ juges-arbitres actifs

Tournois

  • 5+ tournois créés
  • 2+ tournois complĂ©tĂ©s de bout en bout
  • 100+ matchs saisis et validĂ©s

Qualité

  • Temps de crĂ©ation tournoi < 15 min
  • 95%+ scores validĂ©s sans litige
  • 0 conflit de planning terrain/joueur

🚀 Plan de dĂ©veloppement

Sprint 1 (2 semaines) - Fondations

  • Setup projet Rails 8 + PostgreSQL
  • ModĂšles User, Club, Court
  • Authentification Devise
  • CRUD clubs et terrains

Sprint 2 (2 semaines) - Tournois base

  • ModĂšle Tournament
  • SystĂšme ACL avec Pundit
  • CrĂ©ation tournoi par JAP
  • Gestion permissions

Sprint 3 (2 semaines) - Équipes et inscriptions

  • ModĂšle Team
  • Inscription paires
  • Validation contraintes (classement, poids paire)
  • Interface gestion Ă©quipes

Sprint 4 (2 semaines) - Matchs et planning

  • ModĂšle Match
  • GĂ©nĂ©ration tableau automatique
  • Placement tĂȘtes de sĂ©rie + BYE
  • Planning terrains et horaires

Sprint 5 (2 semaines) - Scoring

  • ModĂšle ScoreProposal
  • Interface saisie score joueurs
  • SystĂšme contre-validation
  • Validation JAP
  • Calcul vainqueur et progression

Sprint 6 (2 semaines) - Dashboard et finitions

  • Dashboard JAP et joueurs
  • Notifications email
  • Affichage tableau temps rĂ©el
  • Tests end-to-end
  • Documentation utilisateur

Sprint 7 (1 semaine) - Tests et déploiement

  • Tests de charge
  • Corrections bugs
  • Setup production (Heroku/Render/Fly.io)
  • Formation utilisateurs pilotes

🔐 SĂ©curitĂ© et conformitĂ©

RGPD

  • Consentement explicite collecte donnĂ©es
  • Droit accĂšs, rectification, suppression
  • Encryption donnĂ©es sensibles (BCrypt pour passwords)
  • Logs d'accĂšs et modifications

Sécurité applicative

  • Protection CSRF (Rails natif)
  • Strong parameters
  • SQL injection prevention (ActiveRecord)
  • XSS protection (ERB escaping)
  • Rate limiting (Rack::Attack)
  • 2FA pour comptes JAP (optionnel phase 2)

📝 Notes complĂ©mentaires

Particularités padel à ne pas oublier

Le "poids de paire"

Contrainte spĂ©cifique au padel : la somme des classements des 2 joueurs ne doit pas ĂȘtre infĂ©rieure Ă  un seuil.
Exemple P100 : poids ≄ 1000 (joueur 150e + joueur 250e = 400, Ă©ligible si seuil 400)

Tous les joueurs jouent le mĂȘme nombre de matchs

Important pour l'équité : tableaux consolante pour perdants du 1er tour.

Les tĂȘtes de sĂ©rie doivent jouer 3 matchs minimum

MĂȘme si exemptĂ©es de 1er tour, elles doivent avoir disputĂ© au minimum 3 matchs dans le tournoi.

Hauteur sous plafond = critĂšre #1 pour clubs indoor

La hauteur minimale de 6m est réglementaire, mais 8m est le vrai standard attendu.
Certains clubs avec 7m perdent des clients. Investisseurs refusent < 10m.

Format court = plus de matchs par jour

Le format E (super tie-break) permet jusqu'à 7+ matchs/jour en P25 soirée.

đŸ€ Contribuer

Ce document est évolutif. Pour toute suggestion :
- Ouvrir une issue sur GitHub
- Proposer une Pull Request avec modifications
- Contacter l'équipe produit

📅 Historique des versions

Version Date Auteur Modifications
1.0.0 2025-10-02 Équipe TournoiPro Version initiale MVP

TournoiPro - GĂ©rez vos tournois de padel comme un pro đŸŽŸ

Annexe : Exemples de scénarios utilisateur

Scénario 1 : JAP crée un tournoi P250

  1. Connexion : Jean (JAP2) se connecte Ă  TournoiPro
  2. Création : Crée un nouveau tournoi P250 "Open d'été" au club Padel Paradise
  3. Configuration :
    • Dates : 15-16 juillet 2025
    • Format : B1 (2 sets de 6 jeux + super TB)
    • 12 paires minimum, 16 maximum
    • 4 tĂȘtes de sĂ©rie
  4. Permissions :
    • Ajoute Marie (autre JAP2) en lecture/Ă©criture
    • Ajoute Paul (gestionnaire du club) en lecture seule
  5. Publication : Ouvre les inscriptions
  6. Inscriptions : 14 paires s'inscrivent
    • SystĂšme vĂ©rifie automatiquement : classement > 500e hommes
    • Calcule poids de paire correct
  7. ClĂŽture inscriptions : J-3, Jean clĂŽture
  8. Génération tableau :
    • 4 tĂȘtes de sĂ©rie placĂ©es
    • 2 BYE calculĂ©s automatiquement (14 paires = besoin 16)
    • Tableau gĂ©nĂ©rĂ© avec placement optimal
  9. Planning :
    • 4 terrains disponibles
    • SystĂšme gĂ©nĂšre horaires automatiquement
    • Respect temps de repos
  10. Notifications : Joueurs reçoivent convocations par email

Scénario 2 : Joueurs saisissent un score

  1. Match terminé : Thomas/Lucas vs Pierre/Marc (6-4, 3-6, 10-7)
  2. Saisie : Thomas (Team 1) saisit le score sur son mobile
  3. Notification : Pierre (Team 2) reçoit notification pour valider
  4. Validation : Pierre confirme le score
  5. Alerte JAP : Jean reçoit notification pour validation finale
  6. Validation JAP : Jean valide définitivement
  7. Mise Ă  jour :
    • Team 1 avance en quart de finale
    • Points provisoires calculĂ©s
    • Prochain match programmĂ© automatiquement

Scénario 3 : Désaccord sur score

  1. Match disputé : Score litigieux
  2. Saisie Team 1 : Propose 6-4, 7-5
  3. Refus Team 2 : Conteste, prétend 6-4, 6-7, 10-8
  4. Alerte JAP : Jean reçoit alerte immédiate
  5. Investigation : Jean consulte les deux équipes
  6. Décision : Jean valide le score correct : 6-4, 6-7, 10-8
  7. Historique : Toutes les propositions conservées pour traçabilité

Fin du document MVP Roadmap - TournoiPro v1.0.0

Articles connexes

Suggestions basées sur cet article (à venir)