Bruno Guns - Concepteur Développeur d'Application - Projet FailDaily
Démontrer la maßtrise des 11 compétences du titre professionnel CDA
à travers des expériences concrÚtes vécues durant 9 mois de formation chez SEM Numérica
Durée totale : 40 minutes
đ Total : 21 slides (numĂ©rotĂ©es 0 Ă 15 + sous-slides 4B, 4C, 6B, 11A, 11B)
đĄ Conseil : Prenez votre temps sur les slides 9-11B (dĂ©veloppement) pour bien expliquer le code API, le systĂšme de points et badges, l'interface Angular, et le panel admin avec la modĂ©ration.
Ce que vous dites :
"Bonjour à tous. Je m'appelle Bruno Guns et je me présente aujourd'hui dans le cadre du titre professionnel de niveau 6 Concepteur Développeur d'Application, aboutissement de ma formation de 9 mois au sein de SEM Numérica."
Ce que vous dites :
"Durant cette présentation de 40 minutes, je vais vous démontrer ma maßtrise des 11 compétences requises pour l'obtention de ce titre professionnel, à travers des expériences concrÚtes que j'ai vécues durant ma formation."
"Vous remarquerez que sur chaque slide, en haut à droite, j'indique par un numéro à quelle compétence je fais référence. Voici la liste complÚte de ces compétences..."
Ce que vous dites :
"Laissez-moi vous présenter FailDaily - un réseau social mobile pour partager ses galÚres du quotidien."
Présentation rapide (pointez les 4 cartes) :
Restez bref, c'est juste pour donner le contexte. Les détails techniques viendront aprÚs.
Ce que vous dites :
"La premiÚre étape : analyser les besoins. J'ai identifié les fonctionnalités essentielles."
Parcourez rapidement la liste en insistant sur 2-3 points :
Ne lisez pas tout, pointez 3-4 fonctionnalitĂ©s clĂ©s. Le slide parle de lui-mĂȘme.
Ce que vous dites :
"Une fois les besoins identifiés, j'ai créé des maquettes de toutes les pages de l'application. C'est comme un architecte qui dessine une maison avant de la construire."
Slide 4 - Inscription et Connexion :
"Voici les deux premiÚres pages que l'utilisateur voit : l'inscription et la connexion. J'ai veillé à ce que les formulaires soient simples et clairs, avec des icÎnes pour guider l'utilisateur."
Slide 4B - Liste des fails et Création :
"Ensuite, j'ai conçu le fil d'actualitĂ© oĂč les utilisateurs voient les fails publiĂ©s, et le formulaire de crĂ©ation pour publier un nouveau fail. Vous remarquerez les rĂ©actions en bas de chaque carte, et les catĂ©gories colorĂ©es."
Slide 4C - Badges et Profil :
"Enfin, j'ai designé la page des badges qui montre la progression de l'utilisateur avec une barre de niveau, et la page profil qui affiche ses statistiques et ses fails publiés."
Passez environ 3-4 minutes sur ces 3 slides de maquettes. Montrez comment chaque écran répond à un besoin utilisateur précis.
Ce que vous dites :
"Maintenant que je savais à quoi l'application devait ressembler, j'ai dû définir son architecture technique. C'est la Compétence 6."
"J'ai choisi une architecture 3-tiers classique, qui sépare l'application en 3 grandes parties :"
"Ces 3 parties communiquent entre elles via une API REST. Quand l'utilisateur publie un fail, le frontend envoie une requĂȘte HTTP au backend, qui valide les donnĂ©es et les enregistre dans la base de donnĂ©es."
Ce que vous dites :
"Passons maintenant à la Compétence 7 : concevoir la base de données."
Slide 6 - Code SQL :
"J'ai créé des tables pour ranger toutes les informations de l'application. Voici par exemple la table 'fails' qui stocke chaque fail publié : un identifiant unique, l'auteur, le titre, la description, la catégorie, l'image, et un indicateur pour savoir si c'est anonyme ou non."
Slide 6B - Schéma relationnel :
"Voici le schéma complet de ma base de données. J'ai créé 8 tables qui sont reliées entre elles :"
"Vous voyez les lignes qui relient les tables ? Elles représentent les relations. Par exemple, un USERS peut publier plusieurs FAILS (1:*), et chaque FAIL peut recevoir plusieurs REACTIONS (1:*)."
Passez 2-3 minutes sur le schéma. Expliquez 2-3 relations clés pour montrer votre compréhension des bases de données relationnelles.
Ce que vous dites :
"Avant de commencer à coder, j'ai dû installer tous les outils nécessaires. C'est la Compétence 1."
"J'ai installé :"
"J'ai vérifié que tout fonctionnait correctement en lançant des commandes comme node --version et mysql --version."
J'ai également configuré des extensions VSCode pour améliorer ma productivité : ESLint pour la qualité du code, Prettier pour le formatage automatique, et Angular Language Service pour l'auto-complétion.
Ce que vous dites :
"Pour gérer mon code et sauvegarder mon travail, j'ai utilisé Git. C'est la Compétence 4."
"Git me permet de créer des 'points de sauvegarde' appelés commits. à chaque fois que je termine une fonctionnalité, je fais un commit avec un message clair qui explique ce que j'ai fait."
Exemples de commits que j'ai faits :
Ce que vous dites :
"Maintenant, entrons dans le code. Commençons par les composants d'accÚs aux données - la Compétence 8. J'ai développé une API REST avec Node.js et Express qui communique avec MySQL."
Stack technique :
Exemple concret : Route GET /api/fails
WHERE status = 'approved' : seuls les fails modérés sont affichés
"Le résultat est retourné en JSON avec la structure { success: true, data: [...] }. Ce format standardisé facilite la consommation par le frontend Angular."
J'utilise pool.execute() avec des requĂȘtes prĂ©parĂ©es pour prĂ©venir les injections SQL. Tous les paramĂštres utilisateurs sont Ă©chappĂ©s automatiquement.
Expliquez le choix du stack (pourquoi Node.js?), montrez le code ET le résultat JSON retourné. Insistez sur la sécurité.
Ce que vous dites :
"Passons à la logique métier - Compétence 3. J'ai implémenté un systÚme de gamification pour encourager l'engagement des utilisateurs."
SystĂšme de points :
courage=5pts, laugh=3pts, empathy=2pts, support=3ptsusers (colonne points)givePoints(failId, reactionType) : calcule les points selon le type de réactionUPDATE users SET points = points + ? WHERE id = ?SystÚme de badges :
checkBadges(userId) : vérifie aprÚs chaque action si un nouveau badge est débloqué
Code expliqué :
"Dans le code, je dĂ©finis d'abord un objet POINTS qui associe chaque type de rĂ©action Ă un nombre de points. Ensuite, j'exĂ©cute une requĂȘte SQL pour ajouter ces points au total de l'utilisateur. Enfin, j'appelle checkBadges() pour voir si un nouveau badge doit ĂȘtre dĂ©bloquĂ©."
Utilisateur reçoit rĂ©action 'courage' â +5 points â Total passe de 920 Ă 925 â Barre de progression se met Ă jour â Si seuil atteint (ex: 1000 pts), badge "Niveau 6" dĂ©bloquĂ© !
Expliquez POURQUOI la gamification (engagement, motivation), montrez le code et le visuel du mockup téléphone avec la barre de progression et les badges.
Ce que vous dites :
"Passons au frontend. J'ai développé l'interface utilisateur avec Angular 17 et Ionic 7. C'est la Compétence 2."
Choix du stack frontend :
Exemple concret : Composant fail-card
@Component decorator@Input() fail: Fail : Reçoit les données du fail depuis le composant parentasync react(type: string) : Appelle le service failService.addReaction()
"L'interface utilise le data binding d'Angular : {{ fail.username }} affiche automatiquement le pseudo. Quand les données changent, l'affichage se met à jour instantanément."
Avec Ionic, l'app est une PWA : installable sur mobile, fonctionne hors ligne (mode lecture), notifications push activables.
Expliquez le choix Angular+Ionic (pourquoi?), montrez le code TypeScript et le template HTML, expliquez le data binding et l'async/await.
Ce que vous dites :
"Pour gérer l'application en production et protéger la communauté, j'ai développé un panel d'administration avec systÚme de modération - Compétence 10."
Dashboard Admin - Statistiques en temps réel :
File de modération :
status='pending'Sécurité : Middleware requireAdmin
requireAdmin(req, res, next) vĂ©rifie le rĂŽle de l'utilisateurSELECT role FROM users WHERE id = ?role !== 'admin' â Retourne erreur 403 "AccĂšs refusĂ©"next() pour continuer vers la route protĂ©gĂ©e
Route de modération :
"La route POST /admin/moderate/:id est protégée par le middleware. Elle reçoit l'action ('approved' ou 'rejected') et met à jour le statut du fail dans la base de données."
Code expliqué :
Protection des mineurs : L'application accepte les utilisateurs dÚs 13 ans (avec accord parental). La modération est ESSENTIELLE pour :
⹠Bloquer contenus inappropriés (violence, harcÚlement, etc.)
⹠Protéger les jeunes utilisateurs
⹠Maintenir une communauté bienveillante
⹠Conformité légale (responsabilité de la plateforme)
Montrez VISUELLEMENT le dashboard (4 cartes de stats colorées), la file de modération avec les deux fails d'exemple, puis expliquez LE CODE (middleware de sécurité et route de modération). Insistez sur POURQUOI c'est critique pour protéger les mineurs.
Ce que vous dites :
"Une fois l'application développée, il faut la tester. C'est la Compétence 9. J'ai utilisé Jest pour écrire mes tests."
Exemples de tests simples :
Test 1 : Bloquer les enfants -13 ans
Test 2 : SystĂšme de points
Test 3 : Modération
J'ai écrit 127 tests au total couvrant routes API, logique métier, gestion erreurs, et sécurité. Couverture : ~85% du code backend.
Montrez les 4 tests, expliquez POURQUOI chaque test est important (sécurité, conformité légale), montrez les résultats attendus VS obtenus.
Jest pour les tests unitaires et d'intégration, Cypress pour les tests E2E. J'ai atteint 85% de couverture de code, ce qui signifie que 85% de mon code est testé.
Ce que vous dites :
"Pour que d'autres développeurs puissent déployer l'application, j'ai créé une documentation complÚte. C'est la Compétence 10."
"Ma documentation contient :"
Une bonne documentation permet à n'importe quel développeur de reprendre le projet sans avoir besoin de vous. C'est essentiel en entreprise.
Ce que vous dites :
"Enfin, j'ai mis en place une démarche DevOps pour automatiser le déploiement. C'est la Compétence 11."
"J'ai créé un pipeline CI/CD (Intégration Continue / Déploiement Continu) :"
"J'utilise GitHub Actions pour orchestrer ce pipeline. Cela me permet de déployer une nouvelle version en quelques minutes, sans intervention manuelle."
Ce que vous dites :
"Voilà , je viens de vous démontrer ma maßtrise des 11 compétences du titre professionnel CDA à travers le projet FailDaily."
Récapitulatif rapide :
"Ce projet m'a permis de mettre en pratique l'ensemble des compĂ©tences acquises durant ma formation chez SEM NumĂ©rica. Je suis maintenant prĂȘt Ă les appliquer en entreprise en tant que Concepteur DĂ©veloppeur d'Application."
"Je suis maintenant à votre disposition pour répondre à vos questions sur n'importe quelle partie du projet ou des compétences présentées."