Plateforme de réservation de créneaux sportifs moderne et intuitive.
- 📅 Calendrier interactif de réservation par semaine
- 🎾 Filtrage par sport avec icônes personnalisées
- 📱 Responsive - Mobile, tablette et desktop
- 👆 Swipe navigation - Naviguez entre jours/semaines en glissant
- 👆 Swipe to close - Fermez les popups en glissant (mobile)
- 💾 Formulaire persistant - Vos infos sont gardées si fermeture accidentelle
- 🌍 7 langues - FR, EN, DE, ES, IT, PT, NL
- 📧 Confirmation par email (client + équipe)
- ⏰ Temps réel - Mise à jour instantanée des disponibilités
- 🔒 Protection anti-surréservation - Transactions atomiques
- 🎨 Popups stylées - Modals modernes au lieu des alertes navigateur
- 🕐 Format horaire - 24h ou 12h AM/PM selon vos préférences
- 📊 Vue / Édition - Consultez (= vue client) ou modifiez l'agenda
- 👁️ Mode Vue - Prévisualisez exactement ce que vos clients voient
- 📱 Vue mobile adaptée - Vue jour unique avec swipe sur mobile
- 🗓️ Glisser-déposer - Créez, déplacez, redimensionnez les créneaux
- ✏️ Création par sélection - Glissez pour définir la durée
- 🗑️ Mode Gomme - Sélectionnez plusieurs créneaux à supprimer
- 🏃 Gestion des sports - Icônes emoji ou images personnalisées
- 🚫 Gestion des fermetures - Jours fériés, vacances, maintenance
- ⏰ Horaires d'ouverture - Par jour de la semaine
- 🎨 Personnalisation - Logo, couleurs, nom du site, devise
- 📧 Configuration SMTP - Emails automatiques (textes traduits)
- 🔐 Authentification sécurisée - Hashage des mots de passe
- 📋 Gestion des réservations - Visualisation et annulation
- 🔔 Notifications - Alertes pour nouvelles réservations
- 📤 Publication - Messages clairs sur ce qui est publié
- 🎨 Popups stylées - Confirmations et alertes modernes
- 📊 Statistiques complètes - KPIs, graphiques, tableaux détaillés
- 📄 Export PDF - Rapports résumés ou détaillés avec branding
- 🕐 Format horaire configurable - 24h ou 12h AM/PM
- Node.js 18+
- pnpm (recommandé) ou npm
# Cloner le projet
git clone https://github.com/Aprilox/SportSlot
cd SportSlot
# Installer les dépendances
pnpm install
# Copier la configuration
cp env.example .env
# Lancer en mode développement
pnpm devOuvrez http://localhost:3000 🎉
SportSlot supporte 3 modes configurables via .env :
| Mode | Affichage | Persistance | Usage | Identifiants |
|---|---|---|---|---|
🌐 browser |
Navigateur - DEMO | ❌ LocalStorage | Démonstration | admin / DEMO |
💾 local |
DB Locale | ✅ Fichier SQLite | Développement | admin / admin |
☁️ external |
DB Externe | ✅ PostgreSQL/MySQL | Production | admin / admin |
STORAGE_MODE=browser- Données dans le localStorage du navigateur
⚠️ Perdues si cache vidé ou changement de navigateur- ✅ Aucune configuration requise
- 🎮 Identifiants :
admin/DEMO
STORAGE_MODE=local
DATABASE_URL="file:./dev.db"npx prisma generate
npx prisma db push
pnpm dev- Fichier SQLite local (
prisma/dev.db) - ✅ Persistant après redémarrage
- ✅ Partagé entre navigateurs
- 🔐 Identifiants par défaut :
admin/admin
STORAGE_MODE=external
DATABASE_URL="postgresql://user:password@host:5432/database"prisma/schema.prisma :
datasource db {
provider = "postgresql" // ou "mysql"
url = env("DATABASE_URL")
}npx prisma generate
npx prisma db push
pnpm build && pnpm startServices gratuits recommandés :
- Supabase - PostgreSQL
- Neon - PostgreSQL
- PlanetScale - MySQL
- Railway - PostgreSQL
| Mode | Icône | Description |
|---|---|---|
| Vue | 👁️ | Voir exactement ce que les clients voient (créneaux publiés uniquement) |
| Édition | ✏️ | Créer, modifier, supprimer des créneaux (tout visible) |
💡 Astuce : Utilisez le mode Vue pour prévisualiser votre agenda avant de publier !
- Passez en mode Édition
- Sélectionnez le mode Créneau (📅)
- Clic simple → Créneau avec durée par défaut
- Clic + glisser → Définir la durée manuellement
- Choisissez les sports, la durée, le prix et la capacité
| Action | Comment |
|---|---|
| Déplacer | Glissez le créneau vers un autre horaire |
| Redimensionner | Tirez le bord haut ou bas du créneau |
| Modifier | Cliquez sur le créneau (mode Édition) |
| Supprimer | Mode Gomme (🗑️) + clic sur le créneau |
Les modifications ne sont pas visibles par les clients tant qu'elles ne sont pas publiées :
| Couleur | Signification | Visible client |
|---|---|---|
| 🟠 Orange | Non publié (nouveau ou modifié) | ❌ Non |
| 🟢 Couleur normale | Publié | ✅ Oui |
| 🔴 Rouge | Hors horaires ou en attente de suppression | ❌ Non |
Cliquez sur 🚀 Publier pour appliquer les changements. Un message clair indique :
- Combien de créneaux publiés
- Combien de fermetures publiées
- Si tout était déjà publié
L'onglet Statistiques offre une vue complète de votre activité :
- 💰 Chiffre d'affaires
- 📈 Nombre de réservations
- 👥 Clients uniques
- 📊 Taux d'occupation
- 📈 Évolution du chiffre d'affaires
- 🏆 Répartition par sport
- ⏰ Heures les plus populaires
- 📅 Jours de la semaine
- Par sport
- Par période (semaine, mois, année, personnalisé)
- Résumé : KPIs et répartition (pour comptabilité)
- Détaillé : Avec liste complète des réservations
- Inclut le logo et les informations de votre entreprise
Dans Admin > Paramètres :
| Option | Description |
|---|---|
| Nom du site | Affiché partout + onglet navigateur |
| Logo | URL ou upload avec recadrage |
| Couleur principale | Thème de l'interface |
| Devise | CHF, EUR, USD... |
| Langue par défaut | Langue initiale pour les nouveaux visiteurs |
| Format horaire | 24h (14:00) ou 12h (2:00 PM) |
| Horaires | Par jour de la semaine |
| Délai minimum | Temps avant réservation |
- Admin > Paramètres > Configuration SMTP
- Remplissez :
- Serveur SMTP (ex:
smtp.gmail.com) - Port (587 TLS ou 465 SSL)
- Email expéditeur
- Mot de passe (ou App Password pour Gmail)
- Serveur SMTP (ex:
- Testez avec le bouton d'envoi de test
- ✉️ Client : Confirmation de réservation (dans sa langue)
- ✉️ Équipe : Notification de nouvelle réservation (traduit)
# Développement
pnpm dev # Serveur de développement
# Base de données
pnpm db:generate # Générer le client Prisma
pnpm db:push # Synchroniser le schéma
pnpm db:studio # Interface graphique DB
pnpm db:reset # Réinitialiser la DB
# Production
pnpm build # Compiler
pnpm start # Lancersportslot/
├── app/ # Pages Next.js
│ ├── page.tsx # Page client (réservations)
│ ├── admin/ # Panel admin
│ │ ├── page.tsx # Dashboard + Stats
│ │ └── login/ # Connexion
│ └── api/ # API Routes
├── components/ # Composants React
│ └── ui/ # UI (shadcn/ui + custom-dialog)
├── lib/ # Utilitaires
│ ├── config.ts # Configuration
│ ├── db.ts # Base de données
│ ├── storage.ts # LocalStorage
│ └── i18n.ts # Traductions (7 langues)
├── locales/ # Fichiers de langue
│ ├── fr.json # 🇫🇷 Français
│ ├── en.json # 🇬🇧 English
│ ├── de.json # 🇩🇪 Deutsch
│ ├── es.json # 🇪🇸 Español
│ ├── it.json # 🇮🇹 Italiano
│ ├── pt.json # 🇵🇹 Português
│ └── nl.json # 🇳🇱 Nederlands
├── prisma/ # Schéma DB
│ └── schema.prisma
└── public/ # Assets statiques
- ✅ Hashage des mots de passe (bcrypt-like)
- ✅ Transactions atomiques pour les réservations
- ✅ Protection anti-concurrence (pas de surréservation)
- ✅ Validation côté serveur de toutes les données
- ✅ Nodemailer sécurisé - v7.0.11+ (vulnérabilités corrigées)
- ✅ Formulaires accessibles - Conformes aux standards W3C
- ✅ Contraintes de déplacement - Les créneaux ne sortent pas des horaires
⚠️ ChangezHASH_SECRETen production !
| Langue | Code | Drapeau |
|---|---|---|
| Français | fr |
🇫🇷 |
| English | en |
🇬🇧 |
| Deutsch | de |
🇩🇪 |
| Español | es |
🇪🇸 |
| Italiano | it |
🇮🇹 |
| Português | pt |
🇵🇹 |
| Nederlands | nl |
🇳🇱 |
- La langue par défaut est configurable dans les paramètres admin
- Les clients peuvent changer la langue via le sélecteur en haut à droite
- Toutes les traductions incluent : interface, emails, erreurs
- Connectez votre repo à Vercel
- Variables d'environnement :
STORAGE_MODE=external DATABASE_URL=postgresql://... HASH_SECRET=votre-cle-secrete-32-caracteres NEXT_PUBLIC_APP_URL=https://votre-domaine.com - Modifiez
prisma/schema.prismapour PostgreSQL - Déployez !
- 🌍 7 langues - Ajout Español, Italiano, Português, Nederlands
- 📊 Statistiques complètes - KPIs, graphiques, tableaux
- 📄 Export PDF - Rapports résumés et détaillés avec branding
- 🕐 Format horaire - Choix 24h ou 12h AM/PM
- 📱 Admin mobile - Vue jour unique avec swipe
- 📅 Vue mois améliorée - Stats détaillées desktop, badges compacts mobile
- 👆 Swipe semaines - Navigation fluide sur mobile
- 🎯 Contraintes créneaux - Impossible de déplacer hors horaires
- 🔄 Redirection mois→semaine - Clic sur jour en vue mois
- 🐛 Fix double drapeau - Correction affichage langue par défaut
- ✅ Popups personnalisées - Remplace les alert/confirm natifs par des modals stylés
- ✅ Swipe to close - Fermez les popups en glissant vers le bas (mobile)
- ✅ Animation fluide - Le modal suit le doigt avec retour élastique
- ✅ Conservation du formulaire - Les infos client sont gardées si fermeture accidentelle
- ✅ Mode Vue amélioré - Affiche exactement ce que le client voit (créneaux publiés uniquement)
- ✅ Messages de publication - Messages clairs sans infos techniques
- ✅ Traductions erreurs - Toutes les erreurs de réservation traduites
- ✅ Blocage scroll - Le contenu derrière les popups ne scroll plus
- ✅ Fix créneaux non publiés - Les créneaux en attente ne sont plus visibles côté client
- ✅ Fix gomme - Le mode gomme se désactive en passant en mode Vue
- 🔒 Sécurité nodemailer - Mise à jour v7.0.11 (fix vulnérabilités DoS + domain)
- ♿ Accessibilité formulaires - Champs password conformes aux standards
- ✅ Création de créneaux par glisser-déposer
- ✅ Mode Vue / Édition séparé
- ✅ Suppression de réservations par l'admin
- ✅ Synchronisation temps réel multi-appareils
- ✅ Protection anti-surréservation atomique
- ✅ Popup d'erreur personnalisée
- ✅ Logs de debug retirés (console propre)
- ✅ Système de réservation complet
- ✅ Panel d'administration
- ✅ Multi-langue (FR, EN, DE)
- ✅ 3 modes de stockage
- ✅ Emails automatiques
- ✅ Personnalisation complète
Licence Propriétaire - Tous droits réservés
© 2024 Aprilox - SportSlot
Ce logiciel est protégé par le droit d'auteur. Toute utilisation, reproduction, modification, distribution ou commercialisation de ce code, en tout ou en partie, est strictement interdite sans l'autorisation écrite préalable de l'auteur.
Interdictions :
- ❌ Copier ou redistribuer le code source
- ❌ Modifier ou créer des œuvres dérivées
- ❌ Utiliser à des fins commerciales sans licence
- ❌ Vendre ou sous-licencier le logiciel
Pour obtenir une licence : 📧 contact@aprilox.fr
Fait avec ❤️ par Aprilox

