← Portfolio

Étude de cas

CWS. Piloter les guerres
de clan sur des faits

Projet personnel · Product · Design system · Développement full-stack

2026 · En production, bêta fermée sur ~50 clans

Comment transformer la mémoire approximative d'un chef de clan en décisions justes, acceptées de tous : qui aligner en guerre, qui progresse, qui décroche ?

Voir le produit Accès en bêta fermée
Projet personnel Clash of Clans Full-stack solo Design system 2026
Tableau de bord CWS, vue des statistiques de guerre

En bref

L'essentiel en cinq lignes

Problème

Dans Clash of Clans, les chefs pilotent les guerres « à l'œil » : captures d'écran, mémoire, favoritisme involontaire. Aucun moyen objectif de savoir qui mérite sa place.

Construit

Une web-app qui synchronise les guerres via l'API officielle, calcule un classement de mérite, et propose un tableau de bord de roster pour les Ligues de Clans (CWL).

Mon rôle

Seul aux commandes : cadrage, priorisation, UX, design system, full-stack et mise en production.

Résultat

Déployé en bêta fermée sur ~50 clans. Le suivi des guerres est la fonctionnalité la plus utilisée et appréciée ; le module CWL est ma prochaine itération.

Ce que ça démontre

Je tiens la chaîne produit, design et front sans rupture.

Pour les non-initiés

Le jeu, en 30 secondes

Clash of Clans est un jeu mobile de stratégie. Des joueurs se regroupent en « clans » et s'affrontent lors de « guerres ». Voici la boucle, sans laquelle rien de ce qui suit n'a de sens.

1

Deux clans s'affrontent

Deux équipes de taille égale (souvent 15 ou 30 joueurs) s'opposent sur environ deux jours.

2

Chaque joueur attaque

Il dispose d'attaques pour tenter de détruire la base (le « village ») d'un adversaire.

3

On compte les étoiles

Chaque attaque rapporte 1 à 3 étoiles selon le pourcentage de destruction. 3 étoiles = base rasée.

4

Le clan le plus étoilé gagne

Le total d'étoiles départage les deux clans. Chaque joueur aligné compte dans le score.

Le dilemme du chef : un clan compte souvent plus de membres que de places en guerre. Le chef choisit qui aligner et qui laisser sur le banc. Aujourd'hui, ce choix se fait au ressenti. C'est exactement ce que CWS outille : décider sur des faits, pas sur la mémoire.

Le vocabulaire utile

Étoiles & pourcentage

Le score d'une attaque : de 0 à 3 étoiles, fonction du pourcentage de la base détruite.

Town Hall (TH)

L'hôtel de ville, soit le niveau et donc la puissance d'un village. On compare les joueurs à niveau égal.

Oubli

Un joueur qui n'utilise pas ses attaques. Des étoiles potentielles perdues pour tout le clan.

Roster (line-up)

La liste des joueurs sélectionnés pour une guerre. Plus de membres que de places, donc des arbitrages.

CWL (Ligue de Clans)

Compétition mensuelle où huit clans s'affrontent en plusieurs manches sur une semaine.

Classement de mérite

Le classement calculé par CWS pour mesurer qui contribue vraiment. À ne pas confondre avec le rang affiché en jeu.

Contexte & problème

Un problème de confiance
autant que de données.

Clash of Clans est un jeu mobile où les clans s'affrontent en « guerres ». À chaque guerre, le chef décide qui aligner et qui mettre sur le banc, sur du ressenti. On se souvient du raté de la semaine dernière, on oublie celui qui performe en silence, et les choix créent des tensions. Aucun historique objectif, aucune mesure de mérite partagée.

La vraie question produit n'était pas « comment afficher des stats » mais « comment produire une décision juste, acceptée de tous, à partir de données brutes que personne n'a envie de lire ».

Contrainte structurante : l'API officielle est en lecture seule. On observe les guerres, jamais on n'agit dessus. Le produit se pense donc comme un outil d'aide à la décision : il conseille, le chef applique en jeu.

La problématique

L'API est en lecture seule : le produit conseille, le chef applique.

Mon rôle

Décider, designer
et coder, sans traduction.

Projet mené seul, de bout en bout : product management (cadrage, proposition de valeur, roadmap, bêta & feedback), product design (modèle mental, écrans, design system, mobile-first), développement (front maison, back Flask/PostgreSQL, intégration API) jusqu'à la mise en production.

C'est le point que ce projet illustre : une même personne décide, designe et code. Les décisions produit ne sont jamais jetées par-dessus le mur d'une équipe technique. Elles sont prises en connaissant leur coût, et livrées.

Le produit

Quatre briques, une source de vérité

01

Suivi des guerres

La brique phare. Synchro automatique de chaque guerre, détail des attaques (étoiles, %, oublis), historique. Elle remplace les captures d'écran par une source de vérité partagée.

02

Classement de mérite

Un classement cumulatif qui récompense la régularité et la réussite, sans punir l'absence.

03

Roster CWL

Tableau de bord de conseil pour la compétition mensuelle (CWL) : roster recommandé, file d'attente, rotation automatique en cas d'échecs ou d'oublis.

04

Plateforme multi-clans

Recherche de clans, profils joueurs, comptes (favoris, liaison de son village) pour la personnalisation et l'administration.

Capture à venir : classement de mérite (vue mobile)
Capture à venir : détail d'une guerre

Décisions produit clés

Quatre arbitrages qui ont défini le produit

1. Refondre le classement pour qu'il cesse de punir l'absence.

TensionLa v1 « repartait du classement précédent ». Un joueur absent une seule guerre était renvoyé en bas ; un seuil mal calibré finissait par exclure tout le monde. Produit décourageant, donc inutile.

ArbitrageL'absence n'impacte plus le classement (on valorise ce qu'on fait quand on joue). Une colonne « Réussite » = taux d'attaques à 3 étoiles, lisible sans explication. Et j'ai tranché une ambiguïté de vocabulaire qui bloquait le projet depuis des semaines (« Ranking » = position en jeu vs « Classement » = sortie de l'algo).

Ce que ça montreReconnaître qu'une mécanique logique sur le papier échoue à l'usage, remonter à la cause, reconcevoir autour de l'équité perçue. Nommer correctement a débloqué la conception.

2. Assumer un produit qui conseille plutôt qu'il impose (CWL).

TensionL'API étant en lecture seule, impossible d'imposer une composition d'équipe. La tentation : promettre une « gestion automatique du roster » intenable.

ArbitrageConcevoir explicitement un tableau de bord de conseil (roster recommandé, file d'attente, alertes en cas d'échecs ou d'oublis). Les chiffres sont calculés sur l'équipe réellement alignée, jamais sur la recommandation, pour ne pas les fausser.

Ce que ça montreTransformer une contrainte technique dure en posture produit claire, et itérer par l'usage. C'est aussi la fonctionnalité qui doit le plus progresser : sa complexité se révèle au contact des clans.

3. Un design system « néo-brutalisme arcade », mobile-first, après deux pivots.

TensionLe jeu se joue sur téléphone, dans une ambiance ludique. Une UI « dashboard SaaS » sobre aurait trahi le contexte.

ArbitrageTrois itérations (détaillées plus bas), validées sur une référence visuelle puis systématisées en tokens CSS et documentées dans une page /styleguide vivante. Navigation au pouce : onglets fixes en bas sur mobile, navbar en header au-delà d'un seuil précis.

Ce que ça montreItérer une direction artistique jusqu'à ce qu'elle serve l'usage, puis la rendre industrialisable. La jointure design et front.

4. Investir tôt dans une architecture « plateforme ».

TensionL'outil était au départ pour mon seul clan. Le rendre multi-clans coûte tout de suite pour un bénéfice futur.

ArbitrageReconstruire un schéma de données propre (clans, joueurs, guerres normalisés, URLs scopées par clan), ajouter comptes, favoris et liaison de village, avec une vraie hygiène de sécurité (argon2id, CSRF, rate-limiting). Données publiques en lecture, comptes pour la personnalisation.

Ce que ça montreDistinguer ce qui se bricole de ce qui se reconstruit, et absorber une dette maîtrisée au bon moment.

Conception & design

Une direction artistique qui sert l'usage

Le design system est maison et entièrement tokenisé (tokens.css) : composants stylés (score de guerre, ligne d'attaque, onglets, timeline, modale, pagination), avec une page /styleguide comme source de vérité. Cohérence design et code garantie : la même personne pose le token et l'utilise dans le composant.

Trois itérations de direction artistique

La DA n'est pas tombée juste du premier coup. Deux pivots ont été nécessaires avant de trouver une identité qui assume le contexte ludique sans sacrifier la lisibilité d'un tableau de guerre dense.

Rejetée

v1

Bleu corporate

Trop générique. Indistinct d'un énième dashboard SaaS, sans lien avec l'univers du jeu.

Rejetée

v2

War Room sombre & or

Trop classique, pas assez responsive. L'ambiance y gagnait, l'ergonomie mobile y perdait.

Retenue

v3

Néo-brutalisme arcade

Surfaces claires, encre épaisse, ombres dures, effet tactile « push-down », typo ultra-grasse.

L'effet tactile « push-down »

Les composants interactifs s'enfoncent au contact, comme un bouton d'arcade. Une micro-interaction qui ancre l'identité ludique tout en confirmant l'action sur mobile.

Démo : cliquez le bouton ci-dessus.

Capture à venir : page /styleguide (tokens & composants)
Capture à venir : roster CWL (tableau de bord)

Mobile-first assumé

Le jeu se vit sur téléphone, l'outil aussi.

  • Navigation au pouce : onglets fixes en bas sur mobile
  • Libellés explicites, états vides travaillés
  • Accents de couleur pour hiérarchiser un tableau de guerre dense
  • Micro-décisions d'ergonomie issues de l'usage réel
« Une même personne pose le token de design et l'utilise dans le composant. La cohérence n'est pas un process, c'est un point de vue. »

Réalisation technique

Du backend à la mise en production

Back

Python / Flask · PostgreSQL

Intégration

API officielle Clash of Clans, pipeline d'import partagé app + cron horaire.

Front

HTML / CSS / JS, design system maison, sans framework UI lourd.

Comptes & sécurité

Flask-Login, argon2id, CSRF, rate-limiting, e-mails transactionnels (confirmation, reset).

Production

VM Oracle Cloud (ARM), Nginx → Gunicorn → Flask, HTTPS via Cloudflare, domaine dédié, versioning et minification des assets.

Aller jusqu'au bout. Après un déploiement, le cache Cloudflare servait des fichiers obsolètes. Je l'ai réglé par un versioning automatique des assets : chaque déploiement génère une nouvelle URL, donc un cache invalidé. Ce genre de problème ne se voit qu'en opérant son produit en prod.

Résultats & apprentissages

Validé par l'usage réel

Résultats

~50

Clans en bêta fermée, en production réelle

N°1

Le suivi des guerres, fonctionnalité la plus utilisée et appréciée (cœur de valeur validé)

Boucle de feedback riche : retours d'expérience, bugs, suggestions

Ce que j'ai appris

  • Le module CWL doit progresser : sa complexité ne se révèle qu'au terrain, c'est ma prochaine grande itération.
  • Nommer, c'est concevoir.
  • L'équité perçue prime sur la pureté de l'algorithme.
  • Opérer son produit change le design : cache, déploiements et sécurité façonnent l'expérience réelle.

Ce que ce projet dit de ma façon de travailler

Une même vision, de la stratégie au front, sans étape de traduction.

J'ai cadré le problème, arbitré la roadmap, conçu le design system, écrit le code et opéré le produit en prod. À chaque décision produit, je connaissais le coût technique ; à chaque écran, le design était livré, pas seulement dessiné.