Session Flow
Cadastre o cliente uma vez e a agenda do mês se monta sozinha, com o valor de cada sessão. Veja quem já pagou, quanto falta receber e cobre pelo WhatsApp.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Logiciel de gestion de crèches : enfants et familles, pointage des présences sur tablette, personnel, fiche de ménage, portail des parents.
Ce README s'adresse aux développeurs qui rejoignent le projet. Pour contribuer (branches, versions, tickets, PR), lire ensuite CONTRIBUTING.md.
Nouvel arrivant ? Commencer par ONBOARDING.md : le parcours pas à pas, du premier accès à la première PR fusionnée.
TP Docker (M2, Ynov Toulouse) : tout le rendu est dans le dossier
docker/, sur cette branche par défaut (develop), figé au tagtp-docker-v2.
- Point d'entrée : docker/README.md (architecture, choix des images, ressources, SIGTERM, ordre de démarrage, CI en conteneurs, banc CPU)
- Schéma des communications
- Correspondance avec le barème, critère par critère
- Résumé et commande de lancement : section ci-dessous
Luniqo est né d'un besoin réel : la directrice d'une micro-crèche de Haute-Garonne remplissait chaque jour à la main ses fiches de ménage et devait les conserver. Le premier module les a digitalisées. Le projet s'est ensuite étendu à la cuisine (HACCP), puis à tout ce qu'une crèche gère au quotidien, pour viser les micro-crèches, les crèches et les groupes qui en possèdent plusieurs.
Une entreprise (compte commercial) gère une ou plusieurs crèches. Le parcours qui doit fonctionner de bout en bout :
| Rôle | Ce qu'il fait |
|---|---|
Direction (owner) | Gère les crèches de son entreprise, le personnel, les familles. Second facteur obligatoire |
Employé (employee) | Pointe sur la tablette avec son PIN, consulte les crèches qui lui sont accordées |
Famille (guardian) | Consulte les présences de ses enfants |
Éditeur (developer) | Administre la plateforme, sans accès aux données des crèches |
| v1 (racine du dépôt) | v2 (dossiers api/ et front/) | |
|---|---|---|
| Rôle | Application d'origine, gelée : seuls les correctifs de sécurité y entrent | Réécriture progressive avec un vrai backend |
| Technologies | Next.js 16, React 18, Supabase Cloud (accès direct à la base depuis le navigateur) | API : FastAPI (Python 3.14), PostgreSQL 18, SQLAlchemy asynchrone, Alembic. Front : React + Vite, TanStack Router et Query, client typé généré depuis le schéma OpenAPI, Storybook (ADR-002) |
| État au 2026-10-27 | En production sur Vercel, gelée jusqu'à la bascule vers la v2 | Parcours central et fiche de ménage complets côté API, second facteur, purge RGPD. Front v2 : connexion avec second facteur et premier écran (LUN-107) |
Pourquoi réécrire : ADR-001. La logique métier et les contrôles d'accès de la v1 s'exécutent dans le navigateur.
Navigateur ──HTTP :8080──▶ web (nginx) ──/──────▶ front (nginx : fichiers du front v2, React + Vite)
└─/api/──▶ api (FastAPI, v2) ──SQL──▶ db (PostgreSQL)
v1 : Vercel (Next.js) ──▶ Supabase Cloud, hors de la pile Docker
| Outil | Version | Pour |
|---|---|---|
| Git | récent | tout |
Docker avec Compose v2 (docker compose) | la pile complète, la base de test | |
| Python | 3.14 (version de l'image et de la CI) | l'API v2 |
| Node.js et pnpm | Node 22.12+, pnpm 11 pour le front v2 (corepack pnpm), pnpm 10 suffit pour la v1 | le front v2, le front v1 |
git clone https://github.com/zharrow/Luniqo.git
cd Luniqo
git switch develop # branche d'intégration : on part toujours d'elle
cd docker
docker compose up -d --build # construit les 5 images et lance les 4 services
docker compose ps # db, api, front et web doivent être "healthy"
| Adresse | Contenu |
|---|---|
| http://localhost:8080 | l'application (front v2) |
| http://localhost:8080/api/docs | documentation Swagger de l'API v2, pour l'essayer |
| http://localhost:8080/api/health | état de l'API et de sa base |
Pour avoir des comptes de démonstration (données synthétiques, adresses en
.test), créer un fichier .env à la racine du dépôt (jamais versionné) :
API_SEED_DEMO_PASSWORD=une-phrase-de-passe-d-au-moins-15-caracteres
puis lancer depuis docker/ : docker compose --env-file .env --env-file ../.env up -d --build.
Comptes créés : [email protected], [email protected]… La direction doit
enregistrer une application d'authentification (TOTP) à sa première connexion.
cd api
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements-dev.txt
pytest # tests unitaires, sans base (quelques secondes)
scripts/test-db.sh up # PostgreSQL jetable, affiche la ligne export à copier
export TEST_DB_ADDR=127.0.0.1:55432 TEST_DB_NAME=luniqo_test TEST_DB_PASSWORD=luniqo-test
pytest # unitaires + intégration sur la vraie base
scripts/test-db.sh down
ruff check . # lint, comme en CI
Lancer l'API en local, nouvelle migration, variables d'environnement : api/README.md.
cd front
corepack pnpm install
corepack pnpm dev # http://localhost:5173, l'API passe par la pile Docker (port 8080)
corepack pnpm test # tests unitaires, de composants et stories
corepack pnpm storybook # documentation des composants, http://127.0.0.1:6006
Tout le détail : front/README.md.
pnpm install
# Créer .env.local (non versionné) avec les variables listées dans CLAUDE.md
# (NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY…)
pnpm dev # http://localhost:3000
La v1 interroge directement un projet Supabase. Ne jamais lancer pnpm seed
sans savoir quelle base est visée : le script écrit avec la clé
d'administration.
| Sujet | Où |
|---|---|
| Branches, versions (SemVer), cycle de vie d'un ticket, PR, Definition of Done | CONTRIBUTING.md |
| Tickets, sprints, boards | Jira, projet LUN (lien communiqué à l'équipe) |
| Configuration de Jira et de son lien avec GitHub | docs/projet/JIRA.md |
| Versions publiées | CHANGELOG.md et les tags vX.Y.Z |
| Personas et story map (vision produit, MVP) | docs/produit/ : personas, story map |
| Choix techniques et leurs raisons | M2/decisions/, dont le registre |
| Membre | Rôle |
|---|---|
| Florent | Chef de projet |
| Thomas | Développeur fullstack |
| Pauline | Développeuse frontend |
| Julien | Développeur backend |
Luniqo est aussi le projet fil rouge du M2 de Florent (Ynov Toulouse) : le
dossier M2/ contient les preuves et la documentation de ce diplôme.
Le dossier docker/ répond au TP « Projet - Docker Cloud » du M2
(Ynov Toulouse) : concevoir ses propres images, sans Docker Hub, et les
orchestrer avec docker compose. Rendu : tag
tp-docker-v2
(2026-10-29, avec la consigne supplémentaire) ; le sujet initial avait été rendu
au tag tp-docker-v1.
cd docker && docker compose up -d --build # http://localhost:8080
./pipeline.sh --no-deploy # conteneurs lint puis test
bench/bench.sh # consommation CPU de chaque conteneur (pile démarrée)
| Image | Rôle pour le TP | Contenu |
|---|---|---|
base | socle commun | Alpine Linux construit depuis scratch, tini, utilisateur non-root |
web | serveur web | nginx, seul point d'entrée : relaie vers le front et l'API |
front | front | le front v2 (React + Vite), construit puis servi par un nginx dédié |
api | back | l'API FastAPI de la v2 (dossier api/) |
db | base de données | PostgreSQL 18, données dans un volume |
lint, test | CI (consigne supplémentaire) | lint (ruff, ShellCheck, refus de toute image Docker Hub) puis tests de l'API sur une base jetable, enchaînés par docker/pipeline.sh |
bench | banc de mesure | générateur de charge wrk pour mesurer la consommation CPU des conteneurs |
| Exigence | Réponse |
|---|---|
| Aucune image Docker Hub | Toutes les images partent de scratch (archive officielle d'Alpine) ou de notre image base ; compose ne fait jamais de pull |
| Au moins un front, un back et un serveur web | front, api et web, plus db |
| Arguments de ressources au run et dans le compose | Limites CPU, mémoire et processus réglées dans docker/.env, plus des arguments applicatifs alignés sur ces limites (workers, connexions, pool de la base...) |
| Dépendances, manipulations sur l'OS, arguments, entrypoints expliqués | Un README par image : base, db, api, front, web, lint, test, bench |
| Limitations de ressources expliquées | Justifiées par des mesures réelles (repos et charge) dans le README du dossier docker |
| SIGTERM gérés | Chaque service s'arrête proprement (signal adapté à chaque programme) ; toute la pile s'arrête en moins d'une seconde |
Tout le détail (architecture, choix, mesures, problèmes rencontrés) est dans
docker/README.md.
Au tag tp-docker-v1, l'image front était le serveur Next.js de la v1. Depuis
ADR-002, elle construit et sert le front v2
(LUN-117).
app/, components/, lib/ front v1 (Next.js), gelé
api/ API v2 (FastAPI) : code, migrations, tests
front/ front v2 (React + Vite) : écrans, Storybook, tests
docker/ conteneurisation : 5 images de la pile, 3 de CI et de mesure, composes
supabase/ migrations SQL de la v1
.github/ CI, conventions de PR, étiquettes, modèle de PR
docs/projet/ organisation du projet : Jira, import du backlog
docs/produit/ vision produit : personas, story map
docs/ documentation historique de la v1 (à vérifier)
M2/ preuves du diplôme : décisions (ADR), anomalies, cours
| Ordre de démarrage | db et front en parallèle, puis api quand la base est saine, puis web quand l'API et le front sont sains (healthchecks) |
| Schéma des communications | Dans le README du dossier docker, avec les réseaux et les ports |
| Consigne supplémentaire : 2 conteneurs de CI/CD | lint et test (docker-compose.ci.yml), enchaînés par pipeline.sh : un échec du lint ou des tests bloque le déploiement |
| Benchmark de la consommation CPU | docker/bench/, résultats bruts dans docker/bench/resultats/ |