Derrière Les 8 Couronnes
Pourquoi ce monde existe — et ce qu’il a fallu construire pour qu’il tienne debout.
Lire l’idéeL’idée
Retrouver le plaisir de jouer
Les 8 Couronnes est né d’une idée assez simple : retrouver le plaisir de jouer à Age of Empires II avec une petite gang régulière, sans transformer le jeu en deuxième emploi.
Avant cela, j’avais créé le serveur Discord de la LAQ — Ligue Amateur du Québec (nouvel onglet), une communauté consacrée à Age of Empires II. Son site, laqaoe.com, a été réalisé par mon excellent ami CharleyNapalm.
J’ai toutefois rapidement compris qu’administrer une grande communauté, avec potentiellement une centaine de joueurs, représentait un projet beaucoup plus imposant que ce que je recherchais — et surtout, que ce n’était pas vraiment ce que je voulais. Je voulais simplement jouer avec les mêmes amis, apprendre à connaître leur façon de jouer et construire quelque chose ensemble au fil du temps.
Sortir de la répétition
J’adore Age of Empires II depuis longtemps, même si je suis loin d’être le meilleur joueur. Mais avec les années, je trouvais que les parties finissaient souvent par se ressembler.
Les mêmes cartes revenaient constamment : Arabia, Forteresse et quelques autres. Les mêmes civilisations étaient choisies encore et encore, pendant qu’une grande partie du jeu restait pratiquement inutilisée.
Je voulais que chaque civilisation ait son moment, découvrir les cartes rarement jouées, forcer les joueurs à s’adapter et faire en sorte qu’aucune bataille ne ressemble vraiment à la précédente. C’est de cette volonté de diversité qu’est né le système des 8 Couronnes : des civilisations qui ne peuvent pas être reprises indéfiniment, des territoires différents et une guerre qui évolue d’une bataille à l’autre.
Game of Thrones et la place de la diplomatie
L’univers des 8 Couronnes est fortement inspiré de la grande série Game of Thrones, particulièrement de ses luttes de pouvoir, de ses alliances fragiles et de sa diplomatie. Dans cet univers, la force militaire ne suffit jamais : les grandes Maisons négocient, se méfient, concluent des pactes et parfois les brisent pour survivre. Je voulais retrouver cette tension dans Age of Empires II.
La diplomatie fait partie d’Age of Empires depuis ses débuts, mais elle demeure rarement exploitée à son plein potentiel. Je trouve cette mécanique fascinante : négocier, former des alliances, les respecter ou les briser, venir en aide à un Seigneur menacé… ou profiter de sa faiblesse.
Chaque Seigneur représente donc une Maison permanente. Les alliances peuvent changer au cours d’une même bataille, les anciennes rivalités peuvent influencer les négociations et une décision prise aujourd’hui peut avoir des conséquences sur les batailles suivantes. Une attaque à deux ou trois contre un même joueur n’est donc pas une injustice extérieure aux règles : elle fait partie du monde des 8 Couronnes. On ne gagne pas seulement avec la meilleure armée, mais aussi en choisissant les bonnes alliances — et le bon moment pour les remettre en question.
Cette inspiration demeure toutefois au service d’un univers original : les Maisons, les territoires, les règles et l’histoire des 8 Couronnes possèdent leur propre identité.
Une guerre qui laisse des traces
Je ne voulais pas simplement organiser une succession de parties indépendantes où l’on gagne, puis où tout est oublié avant de recommencer presque exactement la même chose.
Je voulais donner un véritable poids à chaque victoire.
Chaque bataille a une conclusion claire : à l’expiration des deux heures de jeu, le meilleur score l’emporte. La conquête des territoires, le classement, les civilisations perdues et l’héritage du vainqueur créent ensuite une continuité entre les parties. Chaque bataille devient un chapitre d’une histoire plus grande.
Les 8 Couronnes ne sont donc ni un simple tournoi, ni un BO3 ou un BO5. C’est une guerre persistante dans laquelle les décisions, les victoires et les défaites laissent une trace.
Le jeu attend. L’histoire attend.
Je vais bientôt avoir 50 ans. Je veux qu’un jeu me divertisse et me détende, pas qu’il m’impose un horaire rigide ou qu’il devienne une obligation supplémentaire.
Si les Seigneurs veulent livrer deux batailles dans la même soirée, nous le pouvons. Si nous réussissons à jouer chaque semaine, tant mieux. Si nous ne pouvons en organiser que deux dans le mois, ce n’est pas grave.
Le jeu attend. L’histoire attend.
Ce qui compte, ce n’est pas de terminer la saison le plus rapidement possible. C’est d’avoir envie de revenir pour vivre le prochain chapitre avec la même gang.
Age of Empires II possède déjà une vie exceptionnellement longue. Les 8 Couronnes représentent ma façon de lui en offrir une nouvelle : davantage de variété, de diplomatie, de conséquences et d’histoires à raconter. Ce projet est une déclaration d’amour à un jeu que j’adore depuis longtemps.
Je ne serai peut-être jamais le meilleur Seigneur sur le champ de bataille. Mais ici, la victoire ne dépend pas uniquement de la vitesse des doigts. Elle dépend aussi de la capacité à survivre, à s’adapter, à négocier et à laisser sa marque dans l’histoire des 8 Couronnes.
De l’idée au système
Une idée de soirée entre amis est devenue un système complet en 67 jours. Voici les étapes qui comptent.
Le premier commit
Site vitrine, administration, base Supabase et logos des civilisations : la version initiale existe déjà, et la base prévoit déjà les 8 Maisons permanentes.
Le site s’installe sur Vercel
Le forfait gratuit impose ses limites — de 15 à 12 fonctions serveur — et le site s’y adapte.
Une année peut en suivre une autre
Le passage d’une saison à la suivante est écrit une fois pour toutes, sans règle propre à la première.
Le score devient de l’or
Décision éditoriale : le score Age of Empires II est présenté comme de l’or. Une présentation, jamais un calcul.
Un domaine, un direct
Le site prend son adresse officielle, et le centre de bataille en direct (chaînes Twitch, cotes Elo) voit le jour.
Les Villageois
Comptes, candidatures et Pool de pronostics : ceux qui regardent la guerre peuvent y prendre part.
Les fondations du Héraut
Mémoire, droits d’accès et contrats : le Héraut commence par ce qu’il n’a pas le droit de faire.
La Bataille I
Première bataille réellement jouée et validée, huit Seigneurs, huit civilisations.
Guérin Expert
Une bibliothèque figée, un vérificateur de sortie, des essais réels, puis un essai privé sur Discord : l’expert d’Age of Empires II est validé et mis en service.
Les Archives de Guerre
La fiche factuelle d’une bataille : chaque fait garde sa provenance, sa confiance et sa preuve.
Les règles finales
Limite de deux heures, plus haut score : le site et le Héraut sont alignés sur les mêmes décisions.
L’accueil se raconte au défilement
Les Maisons, la carte du royaume et les Archives apparaissent en scènes, au rythme du défilement natif.
Chaque date vient de l’historique du projet. Aucune n’a été reconstituée : l’idée elle-même, et la constitution du groupe des huit, n’ont pas de date que l’on puisse prouver.
Sous le capot
Un site, une base de données, un personnage qui parle. De quoi tout cela est fait, et où passent les frontières.
Le Site
- Next.js 16 · React 19 · TypeScript
- Les pages sont composées sur le serveur ; le navigateur n’exécute que ce qui doit être interactif. TypeScript est strict partout.
- Tailwind CSS 4 · CSS Modules
- L’identité visuelle : pierre, acier, or vieilli. Polices Cinzel et Spectral auto-hébergées, animations discrètes (motion), icônes à traits fins (lucide).
- Vercel
- Héberge le site, publie chaque version et lance une tâche planifiée par jour pour les données en direct.
La mémoire
- Supabase · PostgreSQL
- La vérité du royaume. Les écritures importantes sont des fonctions SQL transactionnelles : tout réussit, ou rien ne change. Chaque table est protégée par des règles d’accès.
- Supabase Auth · Storage
- Les comptes (connexion par courriel ou Discord) et deux espaces de stockage privés : les captures d’écran et les replays.
- Zod
- Chaque saisie est validée avant d’atteindre la base.
Le Héraut et Guérin
- Render · Docker · Node 24
- Un service permanent, une seule instance, qui fait vivre le personnage de Guérin sur Discord.
- Discord (discord.js)
- Le Héraut y lit les salons autorisés, annonce, rappelle, mentionne et répond.
- API OpenAI
- Le modèle de langage ne sert qu’à l’inférence : il reçoit un contexte déjà filtré et ne dispose d’aucun outil.
Les garde-fous
- Vitest · Testing Library
- Les règles du jeu, le classement, le repêchage et les composants sont testés sans base de données.
- PostgreSQL local jetable
- Les fonctions SQL sont rejouées contre un vrai moteur, avec les vraies migrations, sur une année complète simulée.
- Playwright
- Un vrai navigateur parcourt les pages, de 320 à 3 840 pixels de large, au clavier comme au toucher.
- Git · GitHub · ESLint
- Une branche isolée par chantier, aucun envoi en Production sans accord explicite.
Sources externes. Twitch (API officielle) pour les chaînes en direct, et l’API publique non documentée de World’s Edge pour les cotes Elo : toujours lues côté serveur, jamais depuis le navigateur.
Les frontières
Public
Les pages ouvertes à tous, en lecture seule.
Privé
L’Espace des Seigneurs et le compte Villageois, sur connexion.
Administration
Un seul compte. C’est lui qui valide les résultats.
Le Site
Vercel · Next.js- Lit la base par des vues publiques.
- Écrit uniquement par des actions serveur qui vérifient d’abord qui agit, jamais depuis le navigateur.
La base
Supabase · PostgreSQL- Règles d’accès sur toutes les tables, fonctions transactionnelles pour les écritures.
- Stockage privé : captures et replays, jamais accessibles directement au public.
Le Héraut · Guérin
Render · une seule instance- Se connecte à la base avec un rôle dédié, limité à ses propres tables.
- Ne détient aucune clé d’administration du site.
Discord
Salons autorisés, mentions ciblées, une seule voix : celle de Guérin.
Guérin Expert
Bibliothèque figée, vérificateur de sortie. Internet : désactivé.
Internet : désactivéAPI d’inférence
Un seul appel par réponse, sans outil, sans stockage, sans redirection.
Ce qui a été construit
Tout ce qui figure ici existe dans la version finale. Rien n’y est une promesse.
Le royaume
Ce que le visiteur voit.
- 8 Maisons permanentes, 8 Seigneurs, une fiche publique pour chacun
- Plusieurs années : l’An suivant se prépare sans toucher au code du premier
- Classement de saison, score Age of Empires II présenté en or
- Hall of Fame, trésor et prestige territorial des Maisons
- Accueil en scènes au défilement natif : les Maisons, la carte du royaume, les Archives
La guerre
Ce qui rend chaque bataille différente.
- Disponibilités saisies par les Seigneurs, jusqu’à la date confirmée
- Territoires : 29 candidats, 7 retenus, votes et départages
- Repêchage dans l’ordre : tirage unique pour la Bataille I, puis selon le score
- 56 civilisations : consommées, sauvées, héritées
- Résultats validés en une seule transaction
- Centre de bataille en direct : chaînes Twitch et cotes Elo
La mémoire
Ce qui reste quand la soirée est finie.
- Chroniques de chaque bataille
- Replays archivés, en stockage privé
- Captures d’écran de fin de partie, six par bataille
- Archives de Guerre : chaque fait garde sa source, sa confiance et sa preuve
- Statistiques techniques, tirées de ces seuls faits confirmés
Les gens
Ceux qui font vivre le royaume.
- Espace des Seigneurs : disponibilités, vote, choix de civilisation
- Pool des Villageois : pronostics, sceaux, classement
- Connexion par courriel ou par Discord, jamais d’inscription publique de Seigneur
- Administration : onze écrans, un seul compte
Le Héraut
La voix du royaume sur Discord.
- Annonces et rappels : vote, disponibilités, repêchage, bataille
- Mentions Discord ciblées, une seule par action personnelle attendue
- Accueil des nouveaux membres
- Spontanéité contrôlée, en service : son salon autorisé, des plafonds, les sujets sensibles exclus
- Guérin Expert pour Age of Empires II, en service
La qualité
Ce qui tient quand on s’en sert vraiment.
- Mises en page vérifiées dans un vrai navigateur, sur 11 largeurs d’écran de 320 à 3 840 pixels
- Navigation au clavier, focus visible ; avec mouvement réduit, l’accueil reste entièrement lisible en version statique
- Données externes lues côté serveur, jamais depuis le navigateur
Guérin
Le Héraut a un nom, un caractère — et une expertise qui sait dire qu’elle ne sait pas.
Guérin et le Héraut sont le même personnage. Le Héraut est son office, Guérin est sa voix : un seul compte Discord, un seul caractère, plusieurs capacités.
Héraut officiel
Annonces de la guerre : ouverture des votes, dates confirmées, lancement, résultats, classement.
Rappels et mentions
Il relance ceux qui doivent agir et ne mentionne que la personne dont c’est le tour.
Spontanéité contrôlée
Il peut intervenir sans être interpellé, dans son salon autorisé, sous plafonds et garde-fous. Elle est en service.
Expert Age of Empires II
Il répond aux questions de jeu à partir d’une bibliothèque figée, ou refuse. Final, en service.
Guérin Expert : comment une réponse est fabriquée
L’expert ne puise pas dans sa mémoire de modèle pour affirmer un fait. Il lit une bibliothèque figée et versionnée, ne retient que le contexte autorisé, puis rédige. Une seconde lecture, indépendante, vérifie le résultat avant qu’il soit publié. Sans preuve suffisante, il refuse. Son accès à Internet est désactivé : aucune recherche, aucun navigateur, aucune source acquise en cours de route. Un essai réel et privé sur Discord a précédé sa mise en service.
La question
Un message Discord authentifié, séparé par personne et par salon.
La bibliothèque
Une connaissance figée, versionnée, dont chaque fichier est vérifié par empreinte au démarrage.
Le filtre
Seul le contexte autorisé passe, selon le niveau d’autorité de chaque source.
Le modèle
Une seule inférence, sans outil, sans accès Web.
Le vérificateur
Format, preuves, provenance, longueur, puis relecture sémantique séparée. Une reprise au plus.
Réponse ou refus
Si la preuve est insuffisante, Guérin refuse plutôt que d’inventer.
La trace
Chaque décision est consignée, avec ses sources.
La bibliothèque figée
- Dossiers de connaissance
- 57
- Assertions
- 2 007
- Relations
- 482
- Entrées externes, à autorité distincte
- 82
Ce que Guérin ne prétend pas
- La couverture certifiée est celle de la bibliothèque figée : elle ne couvre ni toutes les civilisations ni toutes les situations d’Age of Empires II.
- Un correctif ou un mod différent du jeu ne reçoit aucune garantie de compatibilité.
- Le vérificateur contrôle la sortie ; il ne garantit pas l’absence de toute erreur de sens.
- Ce que le joueur déclare n’est jamais présenté comme une observation de sa partie.
Le projet en chiffres
Mesurés, pas estimés. Un chiffre dit l’essentiel : il y a presque autant de lignes pour vérifier le projet que pour le faire fonctionner.
Le temps
- Jours entre le premier commit et le 17 octobre
- 67
- Jours où au moins un commit a été fait
- 42
- Commits
- 309
- Dont co-signés par un agent Claude
- 189
du 11 août au 17 octobre 2026
fusions exclues, deux lignées de travail réunies sans double compte
mention Co-Authored-By dans le commit
Le code
- Lignes de code applicatif
- 54 728
- Lignes de contenu éditorial typé
- 3 072
- Lignes de scripts d’outillage et de validation
- 3 777
- Lignes SQL de migrations
- 12 662
- Composants React
- 170
- Modules de règles métier pures
- 50
Site 41 709 · Héraut 12 054 · Guérin Expert 965 · 543 fichiers
règlement, territoires, civilisations, Maisons, cette page… 15 fichiers
39 fichiers
68 migrations
regroupés en 24 familles
classement, repêchage, héritage, validation…
Le Site
- Pages et modèles de page
- 44
- Points d’entrée serveur
- 2
- Fichiers d’actions serveur
- 26
25 publiques · 8 privées · 11 d’administration
la tâche planifiée et le retour de connexion Discord
toute écriture passe par l’un d’eux
La base de données
- Tables
- 51
- Vues publiques
- 6
- Fonctions SQL
- 109
- Déclencheurs
- 25
- Règles d’accès (RLS)
- 35
- Espaces de stockage privés
- 2
toutes protégées par des règles d’accès
dont 14 de déclencheurs
captures et replays
Les tests
- Tests Vitest
- 4 786
- Scénarios Playwright
- 77
- Scripts de test contre un vrai PostgreSQL
- 17
- Largeurs d’écran vérifiées
- 11
- Lignes de tests
- 48 929
Site 3 492 · Héraut et Guérin 1 294 · 2 volontairement ignorés · 289 fichiers
11 fichiers, bureau et mobile
de 320 à 3 840 pixels
tests unitaires, navigateur et base de données, avec leurs aides
Le royaume
- Logos de civilisations
- 56
- Illustrations de territoires
- 29
- Dossiers de connaissance de Guérin
- 57
2 007 assertions · 482 relations
Comment ces chiffres ont été comptés
- Deux périmètres, séparés par chemin de fichier : le Site (commit 5d79b02, celui qui est en Production, plus cette page) et le Héraut avec Guérin Expert (commit e04b243, celui qui tourne sur Render). Aucun fichier n’est compté deux fois.
- Lignes : lignes physiques des fichiers texte suivis par Git. Sont exclus : les fichiers générés, la documentation, les preuves de validation, les images, et les données de la bibliothèque de Guérin (elles ne sont pas du code).
- Base de données : toutes les migrations du dépôt sont appliquées dans un PostgreSQL jetable, puis le catalogue est interrogé. Rien n’est lu dans la Production.
- Tests : chaque suite est exécutée, les tests sont comptés tels que le lanceur les rapporte. Les scénarios Playwright sont comptés une fois, quel que soit le nombre de formats où ils sont rejoués.
- Commits : historique Git des deux lignées jusqu’aux versions en Production, fusions exclues, comptés une fois même s’ils figurent dans les deux. Les commits de cette page ne sont pas comptés.
- Cette page est comprise dans les totaux de code et de tests : elle y ajoute 28 tests Vitest et 13 scénarios Playwright.
Mesures du 17 octobre 2026. Site : version 5d79b02, celle qui est en Production, avec cette page. Héraut et Guérin Expert : version e04b243, celle qui tourne sur Render. Les lignes de code et les tests décrivent le produit final ; l’historique s’arrête aux versions déjà en Production.
Comment je l’ai construit
Je suis camionneur. Je ne suis pas développeur, et je n’ai pas écrit ce code ligne par ligne.
Les 8 Couronnes a été conçu et dirigé par moi, avec l’aide d’agents d’intelligence artificielle : surtout Claude, et Codex pour une partie du Héraut et de Guérin. Mon rôle n’était pas de taper. C’était de savoir ce que je voulais, de le dire, de vérifier que c’était bien cela, et de refuser ce qui n’y ressemblait pas.
Ce que j’ai fait
- L’idée et la vision du monde
- Les règles et les décisions de produit — la limite de deux heures, le plus haut score, l’absence qui vaut zéro
- La direction artistique : les blasons, l’ambiance, la musique
- La validation, les tests en conditions réelles, les critiques
- Les itérations et les arbitrages quand deux bonnes idées s’opposaient
- La coordination des agents : un chantier, une branche, un compte rendu
- La décision finale : rien n’est publié sans mon accord
Ce que les agents ont fait
- L’architecture du système
- Le développement
- Les tests
- Les audits
- La recherche
- Les corrections
- Les déploiements, sur instruction
Les 309 commits portent mon nom, puisque tout passe par mon compte ; 189 portent en plus la co-signature d’un agent Claude.
Cela demande un cadre. Un fichier de consignes que chaque agent lit avant de toucher au projet, des audits en lecture seule avant toute écriture, une branche isolée par chantier, des tests avant chaque mise en ligne et jamais de Production sans mon accord. Les agents se trompent — de branche, de version, parfois de conclusion. C’est pour cela que chaque constat est vérifié sur la bonne version avant d’être accepté.
Ce que le projet est devenu
En 67 jours, entre le premier commit et le 17 octobre 2026, l’envie de quelques amis de retrouver le plaisir de jouer est devenue un site de 44 pages, une base de 51 tables, un Héraut qui parle sur Discord, un expert d’Age of Empires II capable de refuser une réponse, et une première bataille déjà inscrite dans les Archives.
8 Maisons. 8 Seigneurs. 7 territoires. 7 batailles. Une saison. Une guerre.
La construction est terminée. Le reste appartient aux Seigneurs.
— Abenord, fondateur des 8 Couronnes