Château Trésor - Organisation de Chasses au Trésor dans des Châteaux Français

Simon Zeru Image

Simon Zeru

Dernière modification : 10 juin 2025 (il y a 2 mois)

📅 Période : Octobre 2024 – Janvier 2025

🛠️ Technologies : Next.js 15, PostgreSQL, Supabase, Stripe, TailwindCSS

👩‍💻 Expertise : Développement web, Conception de bases de données, Gestion de bases de données, Gestion de projet

🎓 Compétences acquises : Développer une application, Optimiser des applications informatiques, Travailler en équipe, Concevoir et implémenter une base de données, Mener un projet

🔗 GitHub : Voir le dépôt

📄 Rapport : Voir le PDF

🌐 Site web : Voir le site

Cet article traite de la mise en œuvre de mon projet de deuxième année de BUT, Château Trésor, une application web permettant d'organiser des chasses au trésor dans des châteaux français. J'ai occupé le rôle de chef de projet et de développeur back-end.

Cover du projet

Contexte du projet

Le patrimoine culturel français recèle de trésors historiques souvent méconnus. Malgré leur richesse, ces lieux peinent parfois à attirer l’attention du public. Notre équipe de 6 étudiants a été missionné de réaliser une application web utilisant les données issues de l’open data pour valoriser le patrimoine Français. C’est pourquoi notre projet, ChateauTresor a été lancé pour remplir cette mission.

Notre application permet de créer et de participer à des chasses au trésor dans les domaines de nos châteaux partenaires. Elle s’adresse à trois types d’utilisateurs, les participants, les équipes organisatrices (entreprises ou des particuliers) et les propriétaires de châteaux, qui loue leurs châteaux aux équipes organisatrices.

Objectifs du projet

L’objectif principal de ChateauTresor est de valoriser les châteaux de la Loire en renforçant le tourisme et en préservant ce patrimoine historique. L’application répond aux besoins spécifiques de trois types d’utilisateurs :

  1. Pour les participants de chasses au trésor, nous offrons une expérience ludique et immersive en les transformant en détectives. En résolvant des énigmes et en recherchant des QR codes cachés, ils découvrent des anecdotes et des secrets historiques, rendant leur visite enrichissante et mémorable.

  2. Pour les organisateurs, qu’ils soient entreprises ou associations, nous fournissons un outil leur permettant de créer et gérer des chasses au trésor. Cela leur permet de diversifier leurs activités, de générer des revenus et de proposer des expériences captivantes aux participants.

  3. Pour les propriétaires de châteaux, nous offrons une solution pour valoriser leur domaine en accueillant des chasses au trésor. Cela leur permet de générer des revenus pour l’entretien et la préservation de leur patrimoine, tout en leur offrant un contrôle total sur leur emploi du temps et les événements organisés.

Mesures organisationnelles

Gestion du temps

Nous avons adopté une approche simple, mais efficace pour gérer notre temps. Au lieu de créer un planning complexe, nous nous sommes fixés des dates précises pour chaque étape du projet. Chaque semaine, nous nous répartissions les tâches à faire en fonction des envies et des compétences de chacun. Par exemple, si quelqu’un était plus à l’aise avec le développement front-end, il prenait en charge les interfaces utilisateur, tandis qu’un autre se concentrait sur le back-end ou la gestion des données. Cette méthode nous a permis de rester motivés et de travailler sur des sujets qui nous intéressaient.

En tant que chef de projet, j’ai conçu un diagramme de Gantt pour visualiser l’avancement du projet et les tâches à réaliser.

Diagramme de Gantt

Suivi des livrables

Pour le suivi des livrables, nous avons adopté une approche inspirée des méthodes agiles. Le projet a été découpé en petites étapes, avec des objectifs clairs à chaque fois. Par exemple, une semaine pouvait être consacrée à la création de l’API et du modèle, une autre à la création des interfaces utilisateurs. Cette méthode nous a permis de réaliser des versions fonctionnelles régulièrement et de valider rapidement les fonctionnalités. Pour gérer les versions du code, nous avons utilisé GitLab.

Synthèse technique

Modélisation

La modélisation initiale de l'application s’est appuyée sur plusieurs outils et schémas pour organiser les données et les processus. Un diagramme de cas d’utilisation a été élaboré pour illustrer les différentes interactions possibles avec le système en fonction des rôles attribués aux utilisateurs.

Cas d'utilisation

Le système repose sur une hiérarchie de rôles dérivés d’un rôle générique, Utilisateur, centralisant les fonctionnalités communes tout en définissant des droits spécifiques pour chaque rôle :

Cette structure modulaire facilite l’ajout de nouveaux rôles et garantit une gestion claire des droits et responsabilités.

Le Schéma Entité-Association (SEA) a permis d’identifier les entités principales (Utilisateur, Château, Chasse, Énigme, etc.) et leurs relations.

Schéma Entité-Association

Il a ensuite été traduit en Schéma Logique-Relationnel (SLR), guidant la conception technique de la base de données.

Choix Techniques

Les choix technologiques ont été motivés par la volonté de développer une application moderne et performante tout en répondant aux besoins spécifiques du projet. TypeScript a été retenu pour son typage statique, censé réduire les erreurs et améliorer la robustesse du code. Ce langage a été couplé avec React pour créer des interfaces utilisateur dynamiques et modulaires. Next.js a été privilégié en raison de ses capacités de rendu côté serveur (SSR) et de génération statique (SSG), optimisant ainsi les performances et le SEO. Pour la gestion des données, PostgreSQL a été choisi pour sa robustesse, tandis que Supabase a simplifié son intégration grâce à ses outils. Pour la carte interactive, nous utilisons la bibliothèque react Leaflet qui utilise l’API cartographique OpenStreetMap. L’application est hébergée sur Vercel, optimisé pour Next.js, facilitant le déploiement.

Bilan général

Points forts

Le projet ChateauTresor a été une réussite sur plusieurs aspects. Tout d’abord, nous avons quasiment atteint tous nos objectifs en termes de fonctionnalités dans les délais impartis. Malgré le fait que l’application ne soit pas finie à 100 %, toutes les fonctionnalités principales ont été implémentées et sont fonctionnelles. Cela démontre une bonne gestion du temps et une répartition efficace des tâches au sein de l’équipe. De plus, la communication fluide et la collaboration entre les membres ont grandement contribué à cette réussite. Enfin, l’utilisation d’outils comme Discord pour la communication et GitLab pour la gestion du code a permis de maintenir une organisation solide tout au long du projet.

Points faibles

Malgré ces succès, nous avons rencontré quelques difficultés, notamment sur la gestion des types, des classes et des Data Access Object (DAO). Au début du projet, nous avons eu des doutes sur la manière de transformer les données de la base en modèle, ce que font les Object Relational Mapping (ORM). Nous avons développé l'API et les transformations à la main, ce qui nous a coûté beaucoup de temps, en plus d'être source d'erreur et de faille de sécurité. De plus, nous n’avions pas suffisamment préparé le modèle lors de la phase de modélisation. En conséquence, lors de l’implémentation des fonctionnalités, nous devions souvent modifier les types et les classes, ce qui a ralenti notre progression.

Améliorations possibles

Si nous devions refaire ce projet, nous ferions quelques ajustements pour gagner en efficacité. Tout d’abord, nous n’utiliserions pas TypeScript. Bien que ce langage offre des avantages en termes de typage fort, il nous a fréquemment fait perdre du temps en raison de sa complexité. À la place, nous opterions pour JavaScript, qui répond parfaitement à nos besoins et simplifierait le développement. Pour la phase de modélisation, nous créerions un diagramme de classe en amont pour éviter les modifications répétitives pendant l’implémentation. Enfin, pour la phase de développement, nous utiliserions une solution d'ORM existante pour sécuriser nos données et accélerer le processus de développement.

Conclusion

Le ressenti global sur ce projet est très positif. Malgré les défis techniques et les ajustements nécessaires, nous sommes fiers du résultat obtenu. L’application répond à nos objectifs initiaux, et nous avons tous apprécié travailler sur ce projet. La collaboration au sein de l’équipe a été excellente, et chacun a pu contribuer selon ses compétences et ses envies. Ce projet nous a permis d’apprendre beaucoup, tant sur le plan technique que organisationnel, et nous en retirons une expérience très enrichissante.