studio41

étude de cas · · 15 min de lecture

FutComp : un compagnon gratuit pour EA FC 27, construit à partir des données

Un site gratuit, sans compte, qui répond aux questions que se posent les joueurs de FC 27 Ultimate Team chaque fois qu’ils ouvrent le marché des transferts ou construisent une équipe. Ce qu’il fait, comment il est construit et les parties qui se sont révélées difficiles.

PythonFlaskMySQLJavaScriptAPI Canvasextension ChromePWAPlaywright

FutComp (futcomp.site) est un site gratuit pour les joueurs d’EA SPORTS FC 27 Ultimate Team. Il répond aux questions qui reviennent chaque fois qu’on ouvre le marché des transferts ou qu’on construit une équipe : Laquelle de ces deux cartes est vraiment meilleure ? Existe-t-il une carte moins chère avec les mêmes stats ? Quelle est la meilleure formation pour les joueurs que je possède déjà ? Quel est le moyen le moins cher de terminer cet ensemble de la Galerie ?

C’est gratuit, sans compte ni inscription, et ça fonctionne sur n’importe quel téléphone. Cet article présente ce que fait le site, comment il est construit, les parties difficiles et les outils derrière lui.

Les principes

Quelques règles ont guidé chaque décision :

  • Gratuit et sans compte. Les équipes enregistrées, les cartes personnalisées et les ensembles de Galerie terminés restent dans votre propre navigateur. Pas d’inscription, pas de mot de passe.
  • Suggérer, ne jamais agir. FutComp vous dit quoi acheter ou quelles cartes utiliser. Il n’achète, ne vend, ne liste et ne soumet jamais rien sur votre compte EA, et l’extension Chrome se contente de lire ce que la Web App d’EA a déjà chargé.
  • Le téléphone d’abord. Environ deux tiers des visiteurs sont sur téléphone : chaque page est donc conçue et testée d’abord en largeur mobile.
  • La simplicité plutôt que l’astuce. Chaque outil commence par la réponse (la meilleure note atteignable, les cartes nécessaires, ce que ça coûte) et range les détails en dessous.

Ce qu’il fait

Toutes les cartes, consultables

La page d’accueil est la liste de toutes les cartes FC 27, un peu plus de 20 000. Chaque ligne affiche les stats principales, les gestes techniques, le mauvais pied, le pied fort, l’AcceleRATE, la taille et les prix en crédits en direct pour console et PC.

  • Triez n’importe quelle colonne en touchant son en-tête.
  • Filtrez par poste, championnat, nation, club et genre.
  • Ouvrez Filtres pour fixer un minimum et un maximum sur n’importe quelle stat principale ou l’une des 29 stats détaillées. Par exemple : « attaquants avec 90+ d’agilité à moins de 20K, triés par vitesse ».
  • Ajoutez jusqu’à huit stats détaillées comme colonnes supplémentaires.
  • Chaque recherche est contenue dans l’adresse de la page : on peut l’enregistrer ou la partager.

Si vous préférez les images, la vue en cartes est à un toucher, et le site se souvient de votre vue préférée.

La liste de cartes de FutComp : toutes les cartes EA FC 27 avec stats principales, gestes techniques, mauvais pied, AcceleRATE, taille et prix en direct
La liste de cartes — un peu plus de 20 000 cartes, triables et filtrables sur chaque stat, avec les prix en direct console et PC.

Comparer

Choisissez deux cartes et FutComp les place côte à côte sur un graphique radar, avec chaque stat principale et détaillée, l’écart de prix et un mode EVO où vous pouvez modifier les stats pour prévisualiser une Évolution. Vous pouvez enregistrer cette Évo et l’utiliser partout sur le site.

Chaque comparaison demande aussi « Lequel choisiriez-vous ? » Après votre vote, vous voyez comment les autres joueurs de FutComp ont voté.

Trouver des similaires

Choisissez une carte et FutComp trouve des cartes aux stats proches, la moins chère d’abord. Vous fixez les règles : n’importe quelle stat principale ou détaillée, l’écart toléré (à ±N près, ou « au moins aussi bon »), la plage de notes et le poste. Une trouvaille typique : une carte à 650 crédits avec presque les mêmes stats principales qu’une carte à 20K.

Constructeur d’équipe et Chemarize

Le constructeur d’équipe est un terrain sur lequel on construit :

  • Choisissez une formation et touchez un poste pour ajouter un joueur.
  • Faites glisser les joueurs d’un poste à l’autre pour les déplacer ou les échanger.
  • Le collectif, la note d’équipe et le prix se mettent à jour au fur et à mesure.

Chaque poste propose des suggestions de trois façons : Meilleur collectif (les joueurs qui se lient à votre équipe actuelle, avec ce qu’ils ajoutent au total), Mieux notés et Moins chers. Une case de prix maximum et une recherche complètent le tout.

Chemarize fait l’inverse. Avec 11 joueurs placés, il teste les 29 formations et toutes les façons d’y répartir vos joueurs, puis affiche la formation au meilleur collectif. Il suggère aussi un entraîneur si cela peut encore l’améliorer.

Les équipes peuvent être enregistrées, partagées par lien ou sous forme d’image prête à publier sur X, WhatsApp ou Instagram.

Le constructeur d’équipe Chemarize de FutComp : un terrain avec formation, collectif, note et prix, ainsi que l’entraîneur et les remplaçants
Chemarize — construisez sur le terrain, ou placez vos 11 joueurs et laissez-le trouver la formation au meilleur collectif.

Cartes personnalisées

Les Évolutions changent la note, les stats et les postes d’un joueur : son ancienne carte ne correspond plus. Le créateur de cartes la reconstruit à partir d’un catalogue de designs vierges (Or, TOTW, Future Stars, Icône et plus), du visage du joueur et de vos informations : note, postes, stats, gestes techniques et mauvais pied. Votre carte apparaît ensuite dans votre équipe et dans l’image que vous partagez.

Planificateur de Galerie

La Galerie de FC 27 récompense la collection d’ensembles de cartes. Chacun des 128 ensembles a des notes de D à S, chacune avec un objectif de points. Les joueurs posaient sans cesse les mêmes questions, alors chaque page d’ensemble commence par trois réponses :

  • La meilleure note atteignable et son coût sur console ou PC.
  • Les cartes exactes nécessaires. Si vous ajoutez des cartes obtenues vous-même (« First Owner »), la liste se divise en Vous avez et À acheter.
  • Le coût réel. Les cartes restent dans votre Galerie après leur vente : si vous achetez, placez puis revendez chaque carte, une note coûte à peu près la taxe de vente de 5 % d’EA plutôt que le prix complet. La page affiche ce montant et le nombre de crédits nécessaires à un instant donné.

L’accueil de la Galerie classe les ensembles par crédits par Jeton de Galerie, permet de les rechercher et de masquer ceux qui sont terminés.

Le planificateur de Galerie de FutComp classe les ensembles de la Galerie FC 27 par crédits par Jeton de Galerie
Le planificateur de Galerie — chaque ensemble classé par crédits par Jeton de Galerie, recalculé toutes les 30 minutes.
Une page d’ensemble de la Galerie sur FutComp, avec la meilleure note atteignable, son coût et les cartes exactes nécessaires
Une page d’ensemble commence par les réponses : la meilleure note atteignable, ce qu’elle coûte vraiment et les cartes exactes pour y arriver.

Guides, pages joueurs et communauté

  • Guides : des listes « les meilleurs » — joueurs les plus rapides, meilleurs finisseurs, techniciens 5 étoiles — mises à jour chaque jour.
  • Pages joueurs : chaque carte en a une, avec toutes les stats, des cartes similaires et une note de la communauté sur 10 avec des tags comme Semble rapide ou Vaut ses crédits.

L’application et l’extension Chrome

  • L’application : FutComp s’installe sur téléphone comme une app (une Progressive Web App), sans passer par un store.
  • L’extension Chrome : elle ajoute une comparaison rapide à la barre du navigateur et fonctionne avec la Web App d’EA :
    • elle lit votre équipe actuelle et la « Chemarize » dans la fenêtre contextuelle
    • elle planifie chaque ensemble de la Galerie autour des cartes de votre club
    • elle ne fait que lire ; elle n’envoie jamais rien à EA

L’architecture

FutComp est volontairement sobre : une application web en Python, une base MySQL, des tâches planifiées qui maintiennent les données à jour et du JavaScript écrit à la main dans le navigateur, sans framework front-end.

Garder les données à jour

FutComp construit sa base à partir de données publiques sur les cartes et le marché de FC 27. Des tâches planifiées la tiennent à jour :

Quand Tâche Ce qu’elle fait
Chaque jour 18:30 Synchro joueurs Nouvelles cartes et stats mises à jour
Chaque jour 19:45 Synchro collectif et visuels Postes, clubs, championnats, nations, indicateurs de collectif, visages et catalogue de designs vierges
Chaque jour 20:05 Synchro Galerie Chaque ensemble de la Galerie, ses règles, notes et récompenses
Toutes les 30 min Synchro prix Prix console et PC de chaque carte, plus une ligne d’historique à chaque changement de prix
Toutes les 30 min Plans de Galerie Recalcule le chemin le moins cher vers chaque note de chaque ensemble, sur les deux plateformes
Chaque nuit Entretien Allège l’ancien historique des prix, supprime les données expirées

Chaque tâche s’exécute sous verrou, pour qu’une exécution lente ne chevauche jamais la suivante.

Le serveur

  • L’application : une application Flask en Python derrière Apache, exécutée avec mod_wsgi dans ses propres processus de longue durée.
  • Pages rendues côté serveur : les pages importantes sont rendues sur le serveur avec des templates Jinja, pour que les moteurs de recherche voient un vrai contenu. Le navigateur prend ensuite le relais pour trier, filtrer et construire.
  • La base de données : MySQL contient cartes, stats, données de collectif, prix et historique, éléments de la Galerie, visuels, votes de la communauté et messages de contact.
  • Images : les images de cartes et les éléments graphiques sont récupérés une fois, mis en cache sur disque et servis depuis le domaine de FutComp.

Le cache, plus important que prévu

Les données les plus sollicitées sont gardées en mémoire par l’application elle-même :

  • les stats de chaque carte
  • les données de collectif utilisées pour les suggestions d’équipe
  • les stats parcourues par Trouver des similaires
  • les plans de Galerie précalculés

Trouver des similaires, par exemple, compacte les stats de toutes les cartes dans un bloc d’octets (environ 1,3 Mo pour toutes les cartes), si bien qu’une recherche personnalisée sur 20 000 cartes prend quelques millisecondes.

Le front-end

Du JavaScript et du CSS purs, avec un thème commun. Le graphique radar, le terrain, l’image d’équipe à partager et les cartes personnalisées sont tous dessinés sur un canvas HTML. Chaque élément interactif est conçu et testé pour le tactile comme pour la souris.

L’extension Chrome

L’extension utilise Manifest V3. Un content script sur la Web App d’EA observe les réponses que la Web App reçoit déjà (votre équipe, les cartes de votre club) et ne garde que ce dont FutComp a besoin : identifiants de cartes, notes, postes et un compteur de propriétaires pour repérer les cartes First Owner. Elle ignore le marché des transferts et la liste de suivi, car ces cartes ne vous appartiennent pas. Elle n’envoie jamais de requête à EA.

Les parties difficiles

Le collectif est un problème de recherche

Le collectif de FC 27 semble simple : des liens de club, de championnat et de nation, plus un bonus d’entraîneur. Ce qui le rend difficile, c’est qu’un joueur ne gagne du collectif — et ne compte pour les liens des autres — que s’il joue à l’un de ses propres postes. La meilleure formation dépend donc des joueurs à leur poste, ce qui dépend de la formation.

Chemarize traite cela formation par formation :

  1. Il représente par des masques de bits lesquels de vos 11 joueurs sont à leur poste.
  2. Pour chaque groupe, il vérifie par couplage biparti que le groupe peut réellement occuper des places différentes que tous savent jouer.
  3. Il ne garde que les groupes auxquels on ne peut ajouter aucun joueur, puis note chacun selon les règles du collectif.
  4. Sur les 29 formations, il classe les résultats en privilégiant les placements où les joueurs sont à leur poste principal.

Tout cela tourne dans votre navigateur en une fraction de seconde. Les suggestions du constructeur réutilisent le même moteur : pour chaque candidat, il calcule le collectif de toute l’équipe avec ce joueur à la place.

La Galerie est un problème d’optimisation

Trouver la combinaison de cartes la moins chère pour une note ressemble à « acheter les cartes au meilleur rapport ». Les tags bonus cassent cette logique, car beaucoup ne s’activent qu’à partir d’un certain nombre de cartes :

  • « 5+ cartes Argent : +15 % »
  • « deux versions du même joueur : +10 % »
  • « First Owner : +150 % à 5, +300 % à 10, +500 % à 20 »

Une composition moins chère qui déclenche un tag peut battre une plus chère qui ne le fait pas.

Le planificateur procède par étapes :

  1. Sélection crédits par point : il part de la meilleure composition en crédits par point, en ajustant un seul paramètre d’arbitrage jusqu’à atteindre l’objectif.
  2. Passe de rétrogradation : il remplace les cartes chères par des moins chères tant que l’ensemble atteint encore la note, tags compris.
  3. Hill-climbing : quand seule une combinaison de tags permet d’atteindre une note, une recherche la trouve.
  4. Variantes First Owner : avec des cartes First Owner, il essaie aussi d’en fixer 5, 10 ou 20 et garde le plan le moins cher.

Un problème de deux secondes qui était en fait un problème de serveur

Au lancement de la vue liste, les recherches prenaient près de deux secondes, alors que la recherche elle-même prenait 25 à 65 millisecondes. L’application tournait dans chacun des processus worker d’Apache, chacun avec son propre cache vide : la plupart des requêtes devaient le reconstruire. Le passage de FutComp à un petit ensemble de processus dédiés et durables a ramené les réponses à environ 70 millisecondes. Trouver des similaires, le planificateur de Galerie et l’extension en ont tous profité.

Les cartes personnalisées exigent votre propre domaine

Un canvas ne peut exporter une image que si toutes les images dessinées dessus proviennent du même domaine. Les visuels du créateur de cartes (designs vierges, visages, écussons) passent donc par une petite route d’images de FutComp, qui n’accepte que des chemins de visuels de cartes et met chaque image en cache sur disque. La couleur du texte est choisie en mesurant la luminosité du design derrière le nom et les stats.

Mobile et moteurs de recherche

La plupart des visiteurs arrivent sur téléphone, souvent via un lien d’un moteur de recherche ou la réponse d’un assistant IA. Cela impliquait :

  • Pas de défilement horizontal, sauf sur des tableaux volontairement larges.
  • Des mises en page mobiles pour les données larges : les tableaux deviennent des cartes sur téléphone et les filtres passent dans un panneau plein écran.
  • Des barres fixes : la barre de comparaison est fixée en bas de l’écran et n’apparaît qu’une fois une carte choisie.
  • Une adresse par page, avec des redirections pour les variantes, un sitemap propre d’environ 20 000 pages et un llms.txt en texte brut qui décrit le site aux robots d’IA.
  • L’outil d’abord : le texte descriptif que veulent les moteurs de recherche se trouve sous chaque outil ; la page se lit comme un outil, pas comme un article de blog.

La confidentialité sans comptes

Il n’y a pas de comptes, donc les données personnelles restent dans le navigateur. Les votes de la communauté doivent tout de même être protégés contre le bourrage :

  • chaque navigateur reçoit un cookie anonyme aléatoire, stocké uniquement sous forme de code brouillé
  • les votes ne sont acceptés que depuis le site lui-même
  • une limite horaire par connexion s’appuie sur un code brouillé issu de l’adresse IP, supprimé après 30 jours

Comment les joueurs l’utilisent

  • « Cette carte vaut-elle le coup ? » Cherchez la carte dans la liste, touchez + sur elle et sur l’alternative, puis comparez stats et prix côte à côte.
  • « Mêmes stats, moins de crédits. » Ouvrez une carte dans la vue en cartes, choisissez Trouver des similaires, assouplissez les règles si besoin et triez par prix.
  • « La meilleure formation pour mon équipe. » Ouvrez Chemarize, ajoutez vos 11 joueurs (ou laissez l’extension Chrome les charger depuis la Web App) et touchez Chemarize.
  • « Construire autour d’un joueur. » Placez-le sur le terrain, puis touchez chaque poste vide et choisissez dans Meilleur collectif.
  • « Montrer mon Évo. » Enregistrez l’Évo, touchez Personnaliser la carte, choisissez un design et partagez l’image de l’équipe.
  • « Quel ensemble de la Galerie ensuite ? » Ouvrez la Galerie, consultez Meilleur rapport du moment, ouvrez un ensemble et suivez sa liste de cartes. Marquez-le comme terminé une fois fini.

Outils et stack

  • Langage et serveur : Python 3, Flask, Jinja2, Apache 2.4 avec mod_wsgi
  • Données : MySQL, mysql-connector-python, requests pour les synchronisations, Pillow pour mesurer les designs de cartes
  • Planification : cron, avec flock pour que les tâches ne se chevauchent jamais
  • Front-end : JavaScript pur, propriétés personnalisées CSS pour le thème, API Canvas pour les graphiques, terrains, images de partage et cartes personnalisées
  • Application : une Progressive Web App (manifeste web et service worker)
  • Extension de navigateur : Chrome Manifest V3, content scripts en lecture seule
  • Tests : Playwright, pilotant un vrai Chromium en tailles mobile et bureau, tactile et glisser-déposer compris
  • Hébergement et sécurité : certificats Let’s Encrypt, SSH par clé uniquement, un pare-feu et fail2ban
  • Statistiques : Google Analytics, pour voir quelles fonctions sont utilisées
  • Développement : construit avec Claude Code comme partenaire de programmation

La suite

  • Trading : FutComp enregistre chaque variation de prix depuis la mi-octobre. Dès que quelques semaines d’historique seront disponibles, cela deviendra des graphiques de prix sur chaque page joueur et une section Trading avec les hausses et les baisses.
  • Solutions DCE, dans le même esprit que la Galerie : le moyen le moins cher de terminer chaque Défi de Création d’Équipe, en utilisant d’abord vos propres cartes. Des suggestions uniquement, jamais de soumission.

Ce que cela dit de notre façon de travailler

FutComp ressemble à un site de fans et est en réalité un produit de données : des pipelines planifiés, des caches en mémoire, un moteur combinatoire de collectif, un optimiseur de coûts et une extension de navigateur, le tout pensé pour le téléphone. C’est la même approche que nous appliquons aux projets clients : trouver la partie difficile, la résoudre correctement et garder tout le reste simple.

Si votre projet a une partie difficile de ce genre, nous aimerions en entendre parler.

FutComp est un projet de fan indépendant, sans lien avec Electronic Arts ni approuvé par Electronic Arts. EA SPORTS FC, FC 27 et Ultimate Team sont des marques d’Electronic Arts Inc.

← Tous les articles