Réalisation d'un projet complet
Projet d'évaluation en équipe : reproduire un réseau social, socle attendu et bonus par niveau.
Pour ce dernier atelier du module, vous allez réaliser un projet complet en utilisant les compétences acquises tout au long du cours.
L'objectif est de consolider vos connaissances en PHP et de vous familiariser avec le processus de développement d'une application web en équipe.
Comment ça va se passer ?
Vous allez travailler en équipe pour concevoir, développer et livrer une application web fonctionnelle.
Vous allez devoir réaliser le socle de l'application en respectant les spécifications fournies dans le sujet initial. La réalisation des fonctionnalités initiales, si correctement implémentés et fonctionnels, vous permettra d'obtenir une note de base de 10/20.
Ensuite, chaque équipe pourra choisir parmi une liste de fonctionnalités additionnelles à implémenter pour enrichir l'application. Ces fonctionnalités additionnelles seront classées par niveau de difficulté (facile, intermédiaire, avancé) et vous rapporteront des points bonus en fonction de leur complexité.
Les fonctionnalités additionnelles vous permettront de démontrer votre capacité à aller au-delà des exigences de base et à explorer des aspects plus avancés du développement web en PHP.
Astuce
Vous êtes tous capable d'implémenter les fonctionnalités initiales, car elles reprennent strictement ce que nous avons vu en cours.
Pour aller plus loin
Si une fonctionnalité additionnelle n'est pas terminée mais que vous avez fait des progrès significatifs, vous pourrez tout de même obtenir une partie des points associés.
Pour commencer le projet, vous allez pouvoir accéder aux dépôts GitHub pré-configurés pour chaque équipe (TBD, sur Discord).
Vous aurez jusqu'au Vendredi 30 Janvier 2026 à 18h00 pour finaliser et pousser votre projet sur GitHub.
Attention
Tout commit après cette date ne sera pas pris en compte pour l'évaluation finale.
Vous êtes cependant encouragés à continuer à travailler sur votre projet après cette date pour votre propre apprentissage.
Pour aller plus loin
Vous pourrez me contacter sur Discord par message privé pour toute question ou demande d'aide pendant la durée du projet.
Je vous répondrai dans les plus brefs délais possibles.
Les livrables
Vous devrez fournir les éléments suivants :
- Un dépôt GitHub contenant le code source de l'application.
- Dans ce dépôt, un fichier README détaillant :
- le manuel de lancement de l'application (commandes à passer, configuration nécessaire, etc.),
- une description du projet,
- le détail des fonctionnalités additionnelles implémentées (terminées ou non).
Pour aller plus loin
Vous pouvez avoir jusqu'à 2 points bonus en ajoutant un fichier FEEDBACK.md dans lequel vous ferez une rétrospective de votre expérience de travail en équipe sur ce projet (ce qui a bien fonctionné, ce qui pourrait être amélioré, etc.).
Vous pouvez vous aider des questions suivantes pour le rédiger :
- Quelles ont été les forces et les faiblesses de votre équipe ?
- Quelles ont été les principales difficultés rencontrées lors du projet et comment les avez-vous surmontées ?
- Comment avez-vous géré la répartition des tâches et la communication au sein de l'équipe ?
- Quelles leçons avez-vous tirées de cette expérience de travail en équipe ?
- Quelles améliorations apporteriez-vous à votre processus de travail en équipe pour de futurs projets ?
- Quels conseils donneriez-vous à d'autres équipes travaillant sur des projets similaires ?
- Avez-vous eut du fun ? Si oui, comment ?
Le projet
Voici le brief du client :
Consigne
Bonjour,
Nous souhaitons développer une alternative à Twitter/X qui est devenu trop problématique à notre goût.
L'application devra permettre aux utilisateurs de créer un compte, de publier des messages courts (tweets), de suivre d'autres utilisateurs, et d'interagir avec les tweets (likes, commentaires, etc.).
Nous aimerions également intégrer des fonctionnalités supplémentaires telles que la messagerie privée entre utilisateurs, la possibilité de créer des listes d'utilisateurs, et un système de notifications pour les interactions.
Nous avons actuellement peu de budget, donc nous cherchons une solution économique mais robuste.
Cordialement,
Le client
Une équipe projet a déjà conduit les réunions de cadrage et a défini les besoins initiaux, ainsi que la liste des fonctionnalités additionnelles possibles.
Vous allez devoir vous baser sur ces éléments pour réaliser le projet.
Fonctionnalités initiales
Ces fonctionnalités constituent le socle de l'application et doivent être implémentées pour obtenir la note de base.
- Gestion des utilisateurs
- Inscription et connexion sans validation par email
- Gestion du profil utilisateur (affichage et modification des informations de base comme le pseudo, la bio, etc.)
- Publication de tweets
- Création d'un message court (tweet) avec un maximum de 280 caractères
- Modification et suppression des tweets par leur auteur
- Système de suivi entre utilisateurs
- Permettre aux utilisateurs de suivre et de ne plus suivre d'autres utilisateurs
- Page de profil affichant les tweets de l'utilisateur et le nombre de followers/following
- Fil d'actualité
- Affichage des tweets des utilisateurs suivis dans un fil d'actualité
- Tri des tweets par date de publication (du plus récent au plus ancien)
- Insertion de tweets dans le fil d'utilisateurs autres que ceux suivis pour de la suggestion de contenu
- Pagination du fil d'actualité
Fonctionnalités additionnelles
Les fonctionnalités suivantes sont optionnelles et vous permettront de gagner des points bonus en fonction de leur niveau de difficulté.
| Niveau de difficulté | Points bonus |
|---|---|
| Facile | 1-2 points par fonctionnalité |
| Intermédiaire | 2-4 points par fonctionnalité |
| Avancé | 4-6 points par fonctionnalité |
Niveau facile
| Titre | Description | Conseil |
|---|---|---|
| Affichage de la date relative | Afficher la date de publication des tweets en format relatif (ex: "il y a 2 heures"). | Une extension TWIG, ou une fonction PHP devraient faire l'affaire |
| Système de partage de posts | Permettre aux utilisateurs de partager les tweets d'autres utilisateurs sur internet via un lien unique. | Générer une URL unique pour chaque tweet et créer une page dédiée pour l'afficher. |
| Thème sombre/clair | Ajouter un bouton pour basculer entre un thème sombre et clair (via CSS et une préférence utilisateur stockée en cookie ou en base de données). | Utiliser des classes CSS conditionnelles basées sur la préférence utilisateur. |
| Thème responsive | Assurer que l'application est entièrement responsive et fonctionne bien sur les appareils mobiles. | Utiliser des media queries CSS et tester sur différents appareils ; ou utilisez un framework CSS responsive comme Bootstrap ou Tailwind CSS. |
| Tweets populaires | Afficher une section "Tendances" avec les tweets les plus likés/commentés de la semaine. | Ajouter une requête pour récupérer les tweets les plus populaires et les afficher dans une section dédiée. |
Niveau intermédiaire
| Titre | Description | Conseil |
|---|---|---|
| Statistiques des vues | Suivre et afficher le nombre de vues pour chaque tweet (incrémenter à chaque affichage dans le fil d'actualité). | Ajouter un champ "vues" dans la table des tweets et incrémenter ce champ à chaque affichage. |
| Recherche de tweets | Implémenter une fonctionnalité de recherche permettant aux utilisateurs de rechercher des tweets par mots-clés. | Créer un formulaire avec un champ de recherche et une requête SQL utilisant LIKE pour filtrer les tweets. |
| Système de commentaires | Permettre aux utilisateurs de commenter les tweets. | Créer une table "commentaires" liée aux tweets et afficher les commentaires sous chaque tweet. |
| Système de likes | Permettre aux utilisateurs de "liker" les tweets, afficher le nombre de likes, et indiquer si l'utilisateur connecté a liké le tweet. | Créer une table "likes" pour enregistrer les likes des utilisateurs et afficher le nombre total de likes pour chaque tweet. Vous devrez aussi gérer l'état "liké" pour chaque utilisateur connecté. |
| Ajout d'images aux tweets | Permettre aux utilisateurs d'ajouter une image à leurs tweets (limité à 1 image par tweet). | Utiliser l'upload de fichier Symfony pour permettre l'upload d'images et stocker le chemin dans la base de données. |
| Système de blocage | Permettre aux utilisateurs de bloquer d'autres utilisateurs, empêchant toute interaction entre eux. | Créer une table "blocs" pour enregistrer les relations de blocage entre utilisateurs et vérifier cette relation avant toute interaction ou affichage. |
| Système de signalement | Permettre aux utilisateurs de signaler un tweet ou un commentaire inapproprié (avec un motif : spam, harcèlement, etc.). | Créer une table "signalements" pour enregistrer les signalements et une interface d'administration pour les gérer par des utilisateurs administrateurs. |
Niveau avancé
| Titre | Description | Conseil |
|---|---|---|
| Messagerie privée | Permettre aux utilisateurs d'envoyer des messages privés à d'autres utilisateurs. | Créer une table "messages" pour stocker les messages privés entre utilisateurs et une interface pour envoyer et lire ces messages. |
| Notifications par email | Envoyer des notifications par email pour les interactions importantes (nouveau follower, nouveau commentaire, etc.). | Utiliser Symfony Mailer pour envoyer des emails lors de certains événements (nouveau follower, commentaire, etc.). |
| Statistiques avancées | Fournir des statistiques détaillées aux utilisateurs sur leurs tweets (nombre de vues, likes, commentaires, etc.) via un tableau de bord. | Créer une page de tableau de bord pour les utilisateurs affichant des statistiques agrégées sur leurs tweets. |
| Modération communautaire | Permettre aux utilisateurs de voter pour ou contre la suppression d'un tweet signalé. | Ajouter un système de vote sur les tweets signalés et supprimer automatiquement les tweets qui atteignent un certain seuil de votes négatifs. |
Les critères d'évaluation
- Vos développements doivent être fonctionnels (aucun bug) et respecter les spécifications fournies (tout du moins pour les fonctionnalités initiales).
- Votre code doit être organisé selon les bonnes pratiques vues en cours. (structure MVC, séparation des responsabilités, chaîne
twig <-> controller <-> service <-> repository <-> entityetc.) - La qualité du code sera prise en compte (lisibilité, organisation, bonnes pratiques).
- L'utilisation appropriée des concepts PHP appris durant le cours.
- La gestion des erreurs et des cas limites sera évaluée.
- La sécurité de l'application sera également prise en compte.
- La documentation dans le README devra être claire.
- L'éco-conception de votre application sera prise en compte (optimisation des requêtes, minimisation des ressources utilisées, etc.)
Attention
L'utilisation de l'IA est acceptée pour les parties suivantes :
- Recherche de documentation
- Suggestions de code "boilerplate" (ex : structure d'une classe, syntaxe d'une fonction, etc.)
- Aide à la structuration et a la stylistique d'une page HTML
Cependant, le code final doit être écrit par vous-même. Toute utilisation de l'IA pour générer du code doit être clairement indiquée dans le README, avec une explication de la manière dont vous avez intégré et adapté ce code dans votre projet.
Toute utilisation non déclarée et détectée de l'IA sera considérée comme de la triche et entraînera des points négatifs sur votre évaluation finale.
Quelques conseils
Ne rushez pas !
- Si vous commencez à coder dès le premier jour, vous risquez de passer à côté d'aspects importants du projet.
- Prenez le temps de bien comprendre les besoins, de planifier votre travail, et de discuter avec votre équipe avant de vous lancer dans le développement.
Réfléchissez, concevez, développez
- 80% des efforts fourniront 20% des résultats. Concentrez-vous sur les fonctionnalités essentielles avant de vous attaquer aux détails.
- Votre meilleur ami sera une feuille, un tableau, Miro/Canva ou tout autre outil de mind-mapping pour organiser vos idées et planifier votre travail.
- Avant d'écrire une seule ligne de code, assurez-vous d'avoir une vision claire de ce que vous voulez accomplir, la liste des choses à faire, et comment et qui va s'en occuper.
Raccontez vous l'histoire
- Mettez-vous à la place de l'utilisateur final. Comment va-t-il interagir avec votre application ? Quelles sont ses attentes ?
- Dessinez vos pages, vos formulaires, vos boutons, vos flux utilisateurs avant de les coder. (un simple dessin sur papier fait très bien l'affaire, pas besoin d'être un artiste ni de faire des maquettes ultra détaillées)
- Pensez à l'expérience utilisateur (UX) et à l'interface utilisateur (UI), même si ce n'est pas votre spécialité. Une application bien conçue est plus agréable à utiliser.
Testez régulièrement
- Ne laissez pas les tests pour la fin. Testez chaque fonctionnalité au fur et à mesure de son développement.
- Impliquez toute l'équipe dans les tests pour obtenir des retours variés et identifier les problèmes potentiels.
- Partagez votre code (push régulier sur GitHub) pour éviter les pertes de données et faciliter la collaboration.
- Utilisez des
Fixturespour pré-remplir votre base de données avec des données de test réalistes.
Communiquez efficacement au sein de votre équipe
- Vous êtes à plusieurs dans l'équipe, profitez-en pour brainstormer ensemble !
- Utilisez des outils de gestion de projet (Trello fait l'affaire) pour suivre l'avancement des tâches et assurer une bonne coordination.
- Faites des points réguliers pour discuter des progrès, des défis rencontrés, et ajuster le plan si nécessaire.
Gérez bien votre temps
- Établissez un calendrier réaliste avec des jalons intermédiaires pour suivre votre progression.
- Ne sous-estimez pas le temps nécessaire pour les tests et la correction des bugs.
- Prévoyez du temps pour la documentation et la préparation de la présentation finale.
Documentez votre code et vos choix
- Commentez votre code pour expliquer les parties complexes ou les décisions importantes.
- Tenez à jour le README avec les instructions d'installation, d'utilisation, et les fonctionnalités implémentées.
- Documentez également les choix techniques et les compromis faits durant le développement.
Demandez de l'aide si nécessaire
- N'hésitez pas à poser des questions sur Discord ou à solliciter mon aide où celle de Yoan si vous êtes bloqués.
- Parfois, une perspective extérieure peut aider à résoudre un problème ou à clarifier une idée ; tentez d'expliquer votre problème à un collègue, cela peut souvent aider à trouver une solution.
- Utilisez les ressources en ligne (documentation Symfony, stacks overflow, tutoriels, etc.) pour approfondir vos connaissances et résoudre les problèmes.
Amusez-vous et soyez créatifs !
- Profitez de cette opportunité pour explorer de nouvelles idées et expérimenter avec des technologies ou des concepts que vous n'avez pas encore abordés.
- Laissez libre cours à votre créativité pour concevoir une application qui vous passionne et qui répond aux besoins du client.
- Rappelez-vous que le développement web est autant un jeu qu'un métier.
Bonne chance à tous, et que la force soit avec vous ! 🚀