Application Web "ReTri" : Gamification et Suivi Client

Projet Full-Stack avec Gestion de Projet et Relation Client

Type : Projet Académique (6 mois)
Client : Viveris
Technologies : Java (Servlet/JSP), AJAX, PostgreSQL, Figma
Rôle : Développeur Full-Stack

Contexte et Objectifs

Ce projet académique de 6 mois a été mené en conditions professionnelles simulées pour un client, la société Viveris. L'objectif était de répondre à un cahier des charges précis : développer une application web pour simplifier et encourager le tri des déchets grâce à la gamification.

Structurée comme une véritable équipe de développement (cheffe de projet, lead dev, et quatre développeurs), notre groupe a dû appliquer une gestion de projet rigoureuse, tenir des réunions client régulières et utiliser des outils collaboratifs.

Démonstration Vidéo

Fonctionnalités Clés de l'Application

  • Identification des déchets : Scan de code-barres via la caméra ou recherche manuelle.
  • Mini-jeu de tri : Interface ludique pour choisir la bonne poubelle et apprendre les règles de tri.
  • Système de Gamification : Gain de points d'XP et de monnaie virtuelle pour monter de niveau et débloquer des récompenses.
  • Classement par Coupes : Un système de ligues avec promotion et relégation pour maintenir l'engagement.
  • Profil Utilisateur Complet : Suivi de la progression, historique, favoris et personnalisation.

Environnement Technique et Architecture

L'application est une Single Page Application (SPA) développée en Java (Servlet/JSP) avec une architecture MVC. Le dynamisme de l'interface est assuré par AJAX, et les données sont gérées dans une base PostgreSQL via le pattern DAO.

Le choix d'une application web, par opposition à une application native, s'est imposé pour garantir une accessibilité universelle (ordinateur et mobile) et pour répondre à la contrainte technique du certificat SSL (HTTPS), obligatoire pour autoriser l'accès à la caméra.

Ma Contribution en tant que Développeur Full-Stack

En tant que développeur full-stack, mon rôle a été polyvalent. J'ai commencé par la conception (diagrammes UML, maquettes Figma), puis je me suis concentré sur le développement de trois modules majeurs.

1. Le Profil Utilisateur : un hub personnalisable

J'ai développé l'intégralité du pop-up de profil, un véritable tableau de bord pour l'utilisateur. Il permet non seulement de visualiser sa progression (niveau, XP, points), mais aussi de :

  • Personnaliser son expérience en choisissant son titre et son thème parmi ceux débloqués.
  • Donner un feedback sur l'application via un système de notes et de commentaires.
  • Accéder aux fonctions de gestion de compte (déconnexion, suppression).
  • Passer en mode administrateur si l'utilisateur dispose des droits.

2. Le Système de Classement : une logique algorithmique complexe

J'ai conçu et implémenté toute la mécanique des classements, un des piliers de la gamification. L'enjeu principal était de créer un système juste et motivant, capable de gérer dynamiquement les joueurs en fin de saison.

Cela a nécessité le développement d'un algorithme de répartition complexe. Le défi n'était pas seulement de créer des groupes, mais de les rendre les plus équilibrés possible. Par exemple, pour 25 joueurs, l'algorithme évite de créer des groupes de 10, 10 et 5, et privilégie une répartition plus juste comme 9, 8 et 8 joueurs. Cet algorithme gère automatiquement :

  • L'attribution des récompenses (points et titres) aux trois premiers de chaque classement.
  • La promotion du premier joueur de chaque groupe vers la coupe supérieure et la relégation du dernier.
  • Le "brassage" des joueurs et la création de nouveaux classements équilibrés pour la nouvelle saison, garantissant que chaque joueur se retrouve face à de nouveaux adversaires dans un groupe de taille juste.

3. Le Mode Administratif : des outils de gestion puissants

J'ai développé le mode d'administration pour permettre une gestion efficace de l'application, incluant la modération des feedbacks et une fonctionnalité essentielle d'export de données en CSV (table par table ou en archive ZIP complète).

Extraits de Code (Java)

Algorithme de Création des Classements

// Extrait de MainServlet.java
case "createClassementsForAllCups":
    // ... (Attribution des récompenses) ...
    for (Cup cup : allCups) {
        List<User> nonPlaying = userDAO.selectNonPlayingCupUsers(cup.getCup_id());
        int N = nonPlaying.size();
        if (N == 0) continue;
        // Algorithme pour diviser N joueurs en groupes de 1 à 10
        int G_min = (int) Math.ceil((double) N / 10);
        // ... (logique de répartition pour trouver la meilleure taille) ...
        Collections.shuffle(nonPlaying);
        for (int i=0; i < bestG; i++) {
            // ... (création des places pour chaque joueur) ...
        }
    }
    break;

Export de Données en CSV

// Extrait de MainServlet.java
private String buildCsvForUsers(List<User> allUsers) {
    StringBuilder sb = new StringBuilder();
    sb.append("user_id;firstname;lastname;email;level;xp;points\n");
    for (User u : allUsers) {
        sb.append(u.getUser_id()).append(";");
        // ... (ajout des autres champs) ...
        sb.append(u.getPoints()).append("\n");
    }
    return sb.toString();
}

Bilan et Compétences Acquises

Ce projet a été une expérience très formatrice. Techniquement, j'ai consolidé mes compétences en développement web Full-Stack avec l'écosystème Java. Mais surtout, j'ai appris à travailler efficacement en équipe, à communiquer avec un client pour comprendre et traduire ses besoins, et à suivre une méthodologie de gestion de projet rigoureuse pour livrer un produit fonctionnel et conforme aux attentes.