← Retour au portfolio
PROJET PERSONNEL

Strike Report

Site communautaire de stats d'assauts Destiny 2

Symfony 8
PHP 8.4
Doctrine
React 18
Vite 5
Tailwind
MySQL 8
Redis
Docker
Twig
API Bungie

Le contexte

Destiny 2 (Bungie) propose des dizaines d'assauts (Strikes) — des missions coopératives à 3 joueurs. La communauté dispose déjà d'outils comme gm.report pour suivre les Nuits Noires, mais rien d'équivalent pour les assauts standards.

Strike Report (strike-report.com) comble ce manque : n'importe quel joueur D2 peut chercher un Gardien par son Pseudo#Code et obtenir un tableau de bord détaillé par assaut — wins, record perso, KD, runs récentes, et le détail complet de chaque PGCR (armes, capacités, kills précis).

Le site cible la communauté D2 francophone et est entièrement en français.

Fonctionnalités

Architecture

L'application est découpée en deux briques qui dialoguent via JSON :

Backend — Symfony 8

  • 5 contrôleurs : SearchController (API JSON), AuthController (OAuth2), HomeController, ReportController, CronController
  • BungieApiService — service central, rate-limit 30 req/min
  • ActivityFilter — source unique de vérité pour la blacklist d'IDs
  • 4 entités Doctrine : User, PlayerStat, PlayerQueue, messenger_messages
  • Commande CLI app:process-player-queue pour la collecte passive

Frontend — React 18 + Vite 5

  • 3 composants : Home.jsx, HomeSearch.jsx, PlayerProfile.jsx
  • Twig ne sert que de shell qui monte React via <react:controllers> (Symfony UX)
  • Tailwind CSS pour le style
  • Stimulus + Turbo pour le reste de l'app

Flux d'une recherche :
Browser → Twig (shell) → React (HomeSearch) → fetch /api/... → SearchController → BungieApiService → API Bungie → Doctrine → MySQL (cache leaderboard)

Spécificités notables

Stack technique

Ce que j'en retire

Premier projet perso à cette échelle : auth OAuth2 complète sur une API tierce avec rate-limit, optimisation mémoire pour les comptes vétérans, et architecture full-stack Symfony + React montée from scratch.

Le plus formateur : gérer la dette d'un manifeste opaque. L'API Bungie ne livre pas un assaut, elle livre des hashs d'activités. Comprendre que des dizaines de hashs pointent vers la même mission (selon la difficulté, le matchmaking, l'événement saisonnier) a demandé un effort de modélisation important — d'où l'existence du STRIKE_GROUPS.

Aussi, basculer du cache APCu au cache filesystem dans le dernier commit m'a appris qu'il faut tester sur le vrai environnement d'hébergement tôt — pas seulement en local Docker.

🎯 Le site est en ligne et utilisable par n'importe quel joueur Destiny 2.

[ VOIR LE SITE EN LIGNE ]
[ RETOUR AU PORTFOLIO ] [ ME CONTACTER ]