Projet de stage de fin d'études — M1 Informatique
Université de Bretagne Occidentale (UBO) · Avril – Juin 2026
KouClean est une application web full-stack développée pour digitaliser et centraliser la gestion opérationnelle d'une société de nettoyage professionnel. Elle couvre l'intégralité du cycle de vie client : de la demande de devis jusqu'à la facturation, en passant par la planification des interventions et la gestion du personnel.
L'application propose :
- Un site vitrine public pour les prospects (devis, contact, services)
- Un espace administrateur complet protégé par authentification JWT
- Une API REST documentée consommée par le frontend React
| Couche | Technologie | Version |
|---|---|---|
| Frontend | React, React Router, MUI, Tailwind CSS, Framer Motion | 18 / v7 / v9 / v4 |
| Backend | Spring Boot, Java | 3.3.5 / 17 |
| Base de données | PostgreSQL | 14+ |
| ORM | Spring Data JPA / Hibernate | — |
| Sécurité | Spring Security + JWT (JJWT) | 0.11.5 |
| iTextPDF | 5.5 | |
| Spring Mail (SMTP) | — | |
| HTTP client | Axios | — |
kouclean/
├── backend/ # API REST Spring Boot — port 8080
│ └── src/main/java/.../
│ ├── controller/ # 11 endpoints REST
│ │ ├── AuthController # Authentification JWT
│ │ ├── ClientController # CRUD Clients
│ │ ├── AgentController # CRUD Agents
│ │ ├── InterventionController# Planification
│ │ ├── ContratController # Gestion contrats
│ │ ├── FactureController # Facturation + PDF
│ │ ├── DevisController # Demandes de devis
│ │ ├── SiteController # Sites clients
│ │ ├── ProduitController # Gestion stock
│ │ ├── PhotoController # Upload photos
│ │ └── ContactController # Formulaire contact
│ ├── entity/ # 9 entités JPA
│ ├── repository/ # Spring Data repositories
│ ├── service/ # Services métier (PDF, email)
│ └── security/ # JWT filter + Spring Security
│
├── frontend/ # Application React — port 3000
│ └── src/
│ ├── pages/ # Pages publiques + admin
│ │ └── admin/ # Dashboard, modules CRUD
│ ├── components/ # Composants réutilisables
│ └── api.js # Client Axios centralisé
│
└── base_donnee.sql # Schéma PostgreSQL de référence
Client ──────────< Site ──────────< Intervention >── Agent
│ │
├───< Contrat │
│ (affecté à une intervention)
└───< Facture
Devis (demandes publiques non liées à un compte)
Produit (gestion du stock de produits de nettoyage)
ContactMessage (formulaire de contact public)
- Présentation des prestations de l'entreprise
- Formulaire de demande de devis en ligne
- Formulaire de contact avec notification email
- Page À propos et équipe
| Module | Description |
|---|---|
| Dashboard | KPIs en temps réel : devis en attente, interventions planifiées / terminées |
| Clients | CRUD complet, recherche, filtres, statut VIP |
| Agents | Gestion du personnel de nettoyage, affectations |
| Sites | Sites clients rattachés à leurs propriétaires |
| Interventions | Planification, vue calendrier, gestion des statuts |
| Contrats | Création, suivi et archivage des contrats |
| Devis | Réception, validation ou refus des demandes |
| Factures | Génération PDF, suivi des paiements |
| Produits | Inventaire et gestion du stock |
| Reporting | Upload de photos avant/après intervention |
| Outil | Version minimale |
|---|---|
| Java (JDK) | 17 |
| Maven | 3.8 |
| Node.js | 18 |
| PostgreSQL | 14 |
-- Créer la base
CREATE DATABASE nettoyage_db;# Injecter le schéma
psql -U postgres -d nettoyage_db -f base_donnee.sqlÉditer backend/src/main/resources/application.properties :
spring.datasource.url=jdbc:postgresql://localhost:5432/nettoyage_db
spring.datasource.username=VOTRE_UTILISATEUR
spring.datasource.password=VOTRE_MOT_DE_PASSEcd backend
mvn spring-boot:runL'API REST démarre sur http://localhost:8080
cd frontend
npm install
npm startL'interface démarre sur http://localhost:3000
| Champ | Valeur |
|---|---|
| URL | http://localhost:3000/login |
admin@kouclean.com |
|
| Mot de passe | admin123 |
| Méthode | Route | Description | Auth |
|---|---|---|---|
POST |
/api/auth/login |
Authentification, retourne JWT | ❌ |
GET |
/api/clients |
Liste des clients | ✅ |
POST |
/api/devis |
Soumettre une demande de devis | ❌ |
GET |
/api/interventions |
Liste des interventions | ✅ |
GET |
/api/factures/{id}/pdf |
Générer une facture PDF | ✅ |
POST |
/api/contact |
Envoyer un message de contact | ❌ |
Toutes les routes protégées (✅) nécessitent un header
Authorization: Bearer <token>.
| Branche | Rôle |
|---|---|
main |
Version stable, production-ready (PostgreSQL) |
develop |
Développement en cours, intégration des nouvelles features |
Amir Roba
Étudiant M1 Informatique — Université de Bretagne Occidentale (UBO)
Stage : 13 avril – 15 juin 2026 · Entreprise : KouClean / Propre & Confort
Ce projet est distribué sous licence MIT.