Full-Stack Licence 3 mois

Transport UdM

Plateforme complète de gestion de flotte de transport universitaireComplete university transport fleet management platform

Solution intégrée remplaçant plusieurs systèmes disparates pour centraliser la gestion de flottes, trajets et opérations. Développée pour l'Université des Montagnes. Integrated solution replacing several disparate systems to centralize fleet, trip and operations management. Developed for the University of Mountains.

Juin 2025 — septembre 2025June 2025 — September 2025
Université des MontagnesUniversity of Mountains
Transport UdM Dashboard
En 30 secondes
ContexteContext Application interne de gestion de flotte pour l'Université des Montagnes — remplacer un suivi dispersé (Excel + papier) sur trajets, carburant, vidanges et rapports.Internal fleet-management application for the University of Mountains — replacing a scattered (Excel + paper) tracking workflow for trips, fuel, oil changes and reports.
Mon rôle & défiMy role & challenge Développeur full-stack (projet de licence) : concevoir une plateforme Flask / SQLAlchemy avec RBAC à 6 rôles, déployée en Docker et reproductible.Full-stack developer (Bachelor's project): design a Flask / SQLAlchemy platform with 6-role RBAC, deployed via Docker and reproducible.
Résultat mesurableMeasurable outcome Génération rapports passée de 3 h à ~5 min, taux de succès tests 83,3 %, et SonarQube A / A / A avec 70,2 % de couverture.Report generation cut from 3 h to ~5 min, test pass rate 83.3%, and SonarQube A / A / A with 70.2% coverage.

Problème → Solution → Impact

Le problème clientThe client problem

Le service de transport de l'Université des Montagnes gérait sa flotte (bus, trajets, carburation, vidanges) entre des fichiers Excel et des carnets papier dispersés entre 6 rôles métier.The transport department of the University of Mountains was managing its fleet (buses, trips, fuel, oil changes) across Excel files and paper notebooks scattered between 6 business roles.

Conséquences : rapports mensuels prenant 3 h, doublons et pertes d'info, aucune visibilité temps réel sur la disponibilité et la maintenance.Consequences: monthly reports taking 3 hours, duplicates and information loss, no real-time visibility on availability and maintenance.

Ma solutionMy solution

Plateforme web Flask 2.3 + SQLAlchemy + MySQL avec RBAC à 6 rôles, services métier (Trajet, Rapport), validations centralisées et déploiement Docker multi-stage reproductible.Web platform Flask 2.3 + SQLAlchemy + MySQL with 6-role RBAC, business services (Trip, Report), centralized validations and reproducible multi-stage Docker deployment.

Rejeté :Rejected: Django (trop monolithique pour le scope), SaaS de fleet management (coûts récurrents et données internes à garder on-prem).Django (too monolithic for the scope), fleet management SaaS (recurring costs and internal data to keep on-prem).

Impact concretConcrete impact

Génération des rapports passe de 3 h à ~5 min, traçabilité 100 % des actions, alertes maintenance automatiques.Report generation goes from 3 h to ~5 min, 100% action traceability, automatic maintenance alerts.

Audit SonarQube A / A / A avec 70,2 % de couverture, 0 hotspot de sécurité.SonarQube audit A / A / A with 70.2% coverage, 0 security hotspots.

35h
Économisées/moisSaved/month
-40%
Pannes surprises réduitesSurprise breakdowns reduced
100%
TraçabilitéTraceability
-97%
Temps rapportsReport time
18
Modèles BDDB models
6
Rôles utilisateursUser roles

Performance & Métriques

Tests exécutés le 18/04/2026 — Campagne complète en 15,23 sTests run on 04/18/2026 — Full campaign in 15.23 s
83,3 %83.3% Taux de succèsPass rate
24 Tests réussisTests passed
6 Suites de testsTest suites
12,47 s12.47 s Temps d'exécutionExecution time

Performances MesuréesMeasured Performance

MétriqueMetric ValeurValue ObjectifTarget StatutStatus
Temps de réponse moyenAverage response time < 150ms < 200ms ✓ Atteint✓ Met
Temps de réponse maxMax response time < 800ms < 1000ms ✓ Atteint✓ Met
Utilisateurs simultanésConcurrent users 75+ 50+ ✓ Dépassé✓ Exceeded
Temps sous chargeTime under load < 350ms < 500ms ✓ Atteint✓ Met
Taux d'erreur sous chargeError rate under load < 0.5% < 1% ✓ Atteint✓ Met
Tous les objectifs de performance atteintsAll performance targets met
18 Tests sécuritéSecurity tests
0 VulnérabilitésVulnerabilities
100% Sécurisé100% Secure

Protection XSSXSS Protection

Échappement automatiqueAutomatic escaping

✓ Active✓ Active

Protection CSRFCSRF Protection

Tokens sur tous les formulairesTokens on all forms

✓ Active✓ Active

Injection SQLSQL Injection

ORM SQLAlchemy paramétréParameterized SQLAlchemy ORM

✓ Protégé✓ Protected

Valeur Apportée

Estimations basées sur la comparaison du workflow manuel (Excel + suivi papier) vs les fonctionnalités automatisées de l'applicationEstimates based on the comparison between the manual workflow (Excel + paper tracking) and the application's automated features

Économies de TempsTime Savings

  • Planification trajetsTrip planning 45 min → 10 min/jour (-78%)45 min → 10 min/day (-78%)
  • Génération rapportsReport generation 3h → 5 min/semaine (-97%)3h → 5 min/week (-97%)
  • Gestion maintenanceMaintenance management Manuel → Automatisé (-90%)Manual → Automated (-90%)

Réduction des CoûtsCost Reduction

  • Maintenance préventivePreventive maintenance Alertes auto = -40% pannesAuto alerts = -40% breakdowns
  • Optimisation carburantFuel optimization Suivi conso = 100% optimiséConsumption tracking = 100% optimized
  • Affectation optimale des trajetsOptimal trip allocation Utilisation = +25% productivitéUtilization = +25% productivity

Conformité & TraçabilitéCompliance & Traceability

  • Audit completFull audit 100% des actions tracées100% of actions tracked
  • Alertes administrativesAdministrative alerts Assurance, CT automatiquesInsurance, inspection automatic
  • Disponibilité flotteFleet availability Visibilité temps réelReal-time visibility

Stack Technique

Backend

Python 3.11
Flask 2.3
SQLAlchemy 2.0
MySQL 8.0
Flask-Login

Frontend

Jinja2
Bootstrap 5
JavaScript

DevOps

Docker
Docker Compose
Git + GitHub

Architecture & Sécurité

Architecture MVCMVC Architecture

Templates (Jinja2) Routes (Blueprints) Services (15 modules)Services (15 modules) Modèles (18 entités)Models (18 entities) MySQL

Système RBACRBAC System

Admin Tous les droitsFull permissions
SuperviseurSupervisor Vue admin + rapportsAdmin view + reports
ResponsableManager Gestion opérationnelleOperational management
Chargé des transportsTransport officer Enregistrement trajetsTrip logging
ChauffeurDriver Consultation personnellePersonal view
MécanicienMechanic Maintenance spécialiséeSpecialized maintenance

SécuritéSecurity

  • Hachage mots de passe (Werkzeug)Password hashing (Werkzeug)
  • Sessions sécurisées (Flask-Login)Secure sessions (Flask-Login)
  • Protection CSRF sur formulairesCSRF protection on forms
  • Validation côté serveurServer-side validation
  • ORM = 0 injection SQLORM = 0 SQL injection
  • 0 faille identifiée0 vulnerabilities identified

Qualité du Code

Analyse statique réalisée avec SonarQube Community • Quality Gate PassedStatic analysis with SonarQube Community • Quality Gate Passed
A

Security

0 issue ouverte0 open issues

A

Reliability

0 bug détecté0 bugs detected

A

Maintainability

365 code smells (A grade)

70,2%

Test Coverage

Couverture mesuréeMeasured coverage

7,7%

Duplications

À réduireTo be reduced

0

Security Hotspots

Aucun point à auditerNo items to audit

50+ Endpoints
30+ Templates
15 Services métierBusiness services
10+ ValidationsValidations

Performance Système

<25s
Temps de démarrageStartup time
<180MB
Utilisation mémoireMemory usage
<8%
CPU (idle)
1200
req/min maxmax req/min

Défis Résolus

01

Gestion Complexe de TrajetsComplex Trip Management

Problème :Problem: Trajets multiples types (internes, prestataires) avec règles métier complexesMultiple trip types (internal, contractors) with complex business rules

Solution :Solution: Modèle Trajet unique avec types + Service TrajetService centralisant la logique + Validations métier en baseSingle Trip model with types + TripService centralizing the logic + Business validations in DB

Règles métier appliquées automatiquementBusiness rules applied automatically
02

Performance sur Gros VolumesHigh-Volume Performance

Problème :Problem: Nombreux trajets historiques, requêtes rapides nécessairesMany historical trips, fast queries required

Solution :Solution: Indexage stratégique BD + Eager loading + Pagination + Agrégations côté BDStrategic DB indexing + Eager loading + Pagination + DB-side aggregations

Requêtes dashboards optimisées (indexes + pagination)Dashboard queries optimized (indexes + pagination)
03

Sécurité Multi-RôlesMulti-Role Security

Problème :Problem: 6 rôles avec permissions complexes et granulaires6 roles with complex, granular permissions

Solution :Solution: Décorateurs @login_required, @require_role() + Vérifications BD + ACL granulaire@login_required, @require_role() decorators + DB checks + Granular ACL

0 fuite d'information entre rôles0 information leak between roles
04

Rapports ComplexesComplex Reports

Problème :Problem: Rapports multi-formats avec données agrégéesMulti-format reports with aggregated data

Solution :Solution: Service RapportService + Export PDF + Requêtes agrégées optimiséesReportService + PDF export + Optimized aggregated queries

Rapports générés en <5 secondesReports generated in <5 seconds
05

Déploiement CohérentConsistent Deployment

Problème :Problem: Dev ≠ Production, problèmes à la livraisonDev ≠ Production, issues at delivery

Solution :Solution: Docker multi-stage + Config par env vars + docker-compose + Volumes persistantsMulti-stage Docker + Env-var config + docker-compose + Persistent volumes

Déploiement reproductible en 30 secondesReproducible deployment in 30 seconds

Avant / Après

Avant le ProjetBefore the Project

  • Gestion dispersée (feuilles Excel, appels)Scattered management (Excel sheets, phone calls)
  • Aucune visibilité en temps réelNo real-time visibility
  • Rapports longs et fastidieuxLong, tedious reports
  • Maintenance réactive (pannes d'urgence)Reactive maintenance (emergency breakdowns)
  • Aucune traçabilitéNo traceability

Après le ProjetAfter the Project

  • Plateforme centralisée complèteFull centralized platform
  • Visibilité temps réel sur flotteReal-time fleet visibility
  • Rapports automatisés en minutesAutomated reports in minutes
  • Maintenance préventive = -40% pannesPreventive maintenance = -40% breakdowns
  • Audit complet et traçabilitéFull audit and traceability

Discutons de votre projet

Vous avez un projet similaire ? Je serais ravi d'en discuter.