Angelos Lemire
← Tous les projets

The Circle

Une plateforme où chaque communauté de joueurs se fabrique ses tournois, sa monnaie et ses cartes à collectionner.

Projet personnel — seul, de bout en boutDepuis 2025 · en productionConception, développement, exploitation
Next.jsReactTypeScriptSupabasePostgreSQLRow-Level SecurityThree.jsPixiJSVercel
236migrations SQL
142routes d'API
98tables
135écrans

Les communautés de jeu vivent sur Discord, où tout finit par se perdre : les résultats de tournois, les classements, qui a gagné quoi, ce qu'on s'était promis la semaine dernière. The Circle leur donne un endroit à elles. Chaque communauté arrive avec ses membres, et repart avec sa monnaie, ses tournois, sa collection de cartes, sa boutique et son classement — le tout cloisonné : ce qui se passe chez l'une n'existe pas chez l'autre.

Capture ou courte vidéo du produit

Ce que la plateforme fait

Tournois

Brackets, double élimination, matchs 1v1, formation d'équipes équilibrées par niveau historique, journal des matchs et classement par taux de victoire.

Économie

Une monnaie par communauté, une banque qui sérialise chaque opération, des quêtes, et un journal d'audit de toutes les actions du staff.

Cartes à collectionner

Un studio de création de cartes avec pinceaux et calques, des raretés, des matériaux (verre brisé, effets animés), des packs, et un marché d'échange entre joueurs.

Diffusion

Des overlays pour OBS, montés dans un éditeur de blocs, que les streamers branchent sur leur direct pour afficher scores et ouvertures de packs en temps réel.

Discord

Salons et rôles créés et synchronisés depuis la plateforme, annonces et candidatures relayées automatiquement.

Modération

Analyse des images à l'arrivée, signalements discrets, quotas, et un espace superadmin pour les cas qui remontent.

Ce qui était difficile

  • Cloisonner sans se tromper. Les points, les cartes et les tournois appartiennent à une communauté ; l'identité et les objets cosmétiques appartiennent au joueur, partout. Cette frontière traverse quatre-vingt-dix-huit tables, et elle est tenue par des règles écrites dans la base, pas par des conditions dans les écrans.
  • Faire évoluer un schéma pendant qu'on s'en sert. Deux cent trente-six migrations SQL versionnées, appliquées une par une, sur une base que des gens utilisent le soir même. Aucun fichier déjà appliqué n'est jamais modifié : un correctif est une nouvelle migration, avec sa raison écrite en commentaire.
  • Tenir la charge d'une soirée. Toutes les opérations bancaires d'une communauté passent par un seul verrou. Un soir de lancement, une boucle qui créditait les joueurs un par un a mis toute la soirée en file d'attente. La règle depuis : un ajustement de masse est une transaction, jamais une boucle d'appels.
  • Les fuseaux horaires. La saisie se fait dans le fuseau de la communauté, l'affichage dans celui du visiteur, et une journée de quête se termine à minuit chez le joueur. Trois horloges différentes pour une même ligne de base.
Une base que des gens utilisent le soir même.

Ce que j'en retiens

Construire pour d'autres que soi change tout : une règle de jeu mal expliquée coûte plus cher qu'un bug. J'ai appris à écrire la documentation en même temps que la fonctionnalité, et à considérer qu'une feature qu'on doit expliquer en message privé n'est pas finie.

C'est aussi le projet qui m'a fait prendre au sérieux la sécurité : quand la monnaie a une valeur aux yeux des joueurs, une faille n'est plus théorique. Les règles d'accès vivent dans la base, et une suite de tests vérifie que chacune des routes refuse bien ce qu'elle doit refuser.