Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Réservez votre rendez-vous au salon, sans application à installer.
Translation pending
LifestyleDart · PLpgSQLGitHub @MSKETUDIANTOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Application de prise de rendez-vous pour salon de coiffure — Next.js, Flutter, Supabase;
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Gestionnaire de rendez-vous pour un salon de coiffure.
Un seul salon en v1 ; la base est prête pour plusieurs salons.
| Quoi | Adresse |
|---|---|
| Site client (production) | https://salon-rdv-one.vercel.app |
| App pro (Android, APK) | https://github.com/MSKETUDIANT/salon-rdv/releases/tag/app-pro-v0.2.0 |
| Dépôt | https://github.com/MSKETUDIANT/salon-rdv |
Les données en ligne sont des données de démonstration (deux coiffeurs
fictifs, quatre prestations) : docs/donnees-demo.md.
Clients (navigateur) Équipe (Android, navigateur)
│ │
▼ ▼
Site Next.js (web/) App Flutter (pro/)
hébergé sur Vercel APK ou build web
│ │
└──────────────┬─────────────────────┘
▼
Supabase : PostgreSQL, Auth, RLS (supabase/)
creneaux_disponibles,
reserver, planning, historique…), et zéro double réservation
garanti par une contrainte d'exclusion. Les apps ne font qu'afficher.web/) : Next.js, TypeScript, Tailwind. Connexion par code
à 6 chiffres reçu par e-mail, au moment de réserver.pro/) : Flutter. Connexion par e-mail et mot de passe ;
espace coiffeur (planning, clôture des rendez-vous) et espace gérant
(configuration du salon, planning de l'équipe, encaissements, historique).| Dossier | Contenu |
|---|---|
supabase/migrations/ | schéma, RLS et fonctions, une migration par fonctionnalité |
supabase/tests/ | tests SQL (pgTAP) |
supabase/seed.sql | données de développement local |
supabase/demo/ | données de démonstration pour la base distante |
web/ | site client (Next.js) |
pro/ | app pro (Flutter), détails dans pro/README.md |
docs/ | cahier des charges, charte graphique, procédures, résultats |
| Outil | Version utilisée | Pour |
|---|---|---|
| Git | — | cloner le dépôt |
| Docker Desktop | 29 | base locale |
| Supabase CLI | 2.105 | base locale, migrations, déploiement de la base |
| Node.js et npm | 24 et 11 | site client |
| Flutter | 3.41 (Dart 3.11) | app pro |
| Google Chrome | récent | tests de bout en bout, app pro dans le navigateur |
| Android SDK (facultatif) | 36 | app pro sur Android (émulateur ou téléphone) |
Toutes les commandes partent de la racine du dépôt, sauf mention contraire.
git clone https://github.com/MSKETUDIANT/salon-rdv.git
cd salon-rdv
supabase start # Docker Desktop doit tourner
supabase db reset # applique les migrations et les données de supabase/seed.sql
supabase status -o env
Garder la sortie de supabase status -o env : API_URL et ANON_KEY
servent aux deux apps. Studio (interface de la base) :
http://127.0.0.1:54323 ; e-mails envoyés en local (codes de connexion) :
Mailpit, http://127.0.0.1:54324.
cd web
cp .env.example .env.local
Dans web/.env.local :
NEXT_PUBLIC_SUPABASE_URL=<API_URL>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<ANON_KEY>
NEXT_PUBLIC_SALON_ID=11111111-1111-1111-1111-111111111111
npm ci
npm run dev # http://localhost:3000
Pour réserver, saisir n'importe quelle adresse : le code arrive dans Mailpit.
cd pro
cp config/exemple.json config/local.json # puis y mettre API_URL et ANON_KEY
flutter pub get
flutter run -d chrome --dart-define-from-file=config/local.json
Pour l'émulateur Android, une copie config/android-local.json avec
"SUPABASE_URL": "http://10.0.2.2:54321", puis
flutter run -d emulator-5554 --dart-define-from-file=config/android-local.json
(détails : pro/README.md).
Mot de passe : motdepasse.
| Compte | Rôle | Où |
|---|---|---|
[email protected] | gérant | app pro, espace gérant |
[email protected], [email protected] | coiffeurs | app pro, espace coiffeur |
[email protected] | gérant et coiffeur | app pro, choix de l'espace |
[email protected] | client | site (connexion par code, dans Mailpit) |
Le seed local contient des rendez-vous d'hier (à clôturer, à encaisser), de mardi prochain et du mercredi suivant, une absence et un rendez-vous annulé.
Toute modification du schéma passe par une migration de la CLI, jamais par du SQL appliqué à la main.
supabase migration new <nom> # crée supabase/migrations/<horodatage>_<nom>.sql
supabase db reset # rejoue toutes les migrations et le seed en local
supabase test db # tests SQL
supabase gen types typescript --local > web/lib/database.types.ts # après chaque migration
supabase migration list # migrations en local et en distant
supabase db push # envoie les migrations à la base distante
supabase db push et migration list en distant demandent un projet lié
(supabase link --project-ref <ref>, une fois). Ordre de mise en ligne :
merge de la PR sur main, puis db push depuis main, puis
supabase migration list (mêmes versions dans les colonnes Local et Remote).
| Commande | Dossier | Contenu |
|---|---|---|
supabase test db | racine | tests SQL : règles métier, RLS, fonctions |
npm test | web/ | tests unitaires (Vitest) |
npm run test:e2e | web/ | bout en bout (Playwright, Chrome) sur la base locale |
npm run lint et npm run build | web/ | lint, charte graphique, build |
flutter analyze et flutter test | pro/ | analyse et tests de l'app pro |
npm run verifier:bnf | web/ | tout ce qui précède, avec couverture, en une commande |
Résultats des besoins non fonctionnels : docs/resultats-bnf.md.
supabase link --project-ref <ref>.supabase db push, puis supabase migration list.docs/premier-gerant.md.docs/donnees-demo.md.docs/connexion-code-email.md (serveur
d'envoi SMTP et modèles d'e-mail).web comme dossier racine
(Root Directory) ; Next.js est détecté.NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY (clé anon du
projet distant, jamais la clé service) et NEXT_PUBLIC_SALON_ID.main déploie la production ; chaque PR a sa preview.
Le build lit la base distante : une PR dont le site dépend d'une migration
pas encore poussée a une preview en échec jusqu'au db push.Configuration de production : copier pro/config/exemple.json en
pro/config/production.json (ignoré par Git) avec l'URL et la clé anon du
projet distant et l'id du salon. Puis, dans pro/ :
flutter build web --release --dart-define-from-file=config/production.json # build/web : site statique
flutter build apk --release --dart-define-from-file=config/production.json # build/app/outputs/flutter-apk/app-release.apk
build/web, à publier sur n'importe quel
hébergement de fichiers statiques.Publication retenue : l'APK, joint à une release GitHub (projet de
formation, pas de build web en ligne). Pour une nouvelle version : augmenter
version dans pro/pubspec.yaml, construire l'APK depuis main, puis
gh release create app-pro-v<version> <apk> --target <commit> avec
l'empreinte SHA-256 de l'APK dans les notes.
| Document | Contenu |
|---|---|
docs/cahier-des-charges.md | besoins fonctionnels (BF) et non fonctionnels (BNF) |
docs/demonstration-bf.md | les 15 besoins fonctionnels, démontrés un par un |
docs/resultats-bnf.md | mesures et résultats des besoins non fonctionnels |
docs/charte-graphique.md | couleurs, typographie, composants |
docs/premier-gerant.md | créer le salon et le premier gérant en distant |
docs/donnees-demo.md | données de démonstration en distant |
docs/connexion-code-email.md | connexion des clients par code e-mail |
docs/dette-technique.md | points connus laissés pour plus tard |
pro/README.md | app pro : configuration, commandes, structure |