// 01 · le-contexte
Le contexte
xGangsters était un projet Web3 que j'ai co-fondé et porté en tant que CTO de septembre 2022 à mars 2024. L'idée : créer une collection NFT vivante, avec de vraies mécaniques de jeu et un système d'engagement communautaire qui aille au-delà du "mint and hold".
Trois piliers fonctionnels étaient prévus :
- →Un système d'élection NFT où les détenteurs votent pour les contributeurs actifs du projet
- →Un jeu de chasse au NFT caché avec des tentatives quotidiennes basées sur le nombre de NFT détenus
- →Un jeu mobile de combat automatisé sur Unreal Engine 5, où les statistiques des NFT déterminent les combats
Déploiement sur MultiversX (anciennement Elrond).
// 02 · ce-qui-a-t-livr
Ce qui a été livré
Soyons clair sur ce qui a été réellement mis en production vs ce qui est resté en cours :
Livrés en production ✅
- →Le système d'élection NFT
- →Le jeu de chasse au NFT caché
- →Le site marketing
- →La dApp Web3 (connexion wallet, visualisation NFT/tokens)
Beta avancé non finalisé ⚠️
- →Le jeu mobile de combat (Unreal Engine 5) — fonctionnel mais pas en état de release publique au moment de l'arrêt
Le projet s'est arrêté en mars 2024 pour des raisons internes à l'équipe (problèmes de santé d'un co-fondateur), pas par choix technique ou par échec de marché.
// 03 · la-solution
La solution
J'ai conçu et développé l'ensemble de la couche web (dApp + site marketing) ainsi que l'intégration blockchain côté front/back, en autonomie complète et sans assistance IA — c'était une époque où je codais tout à la main.
La dApp Web3
La dApp est construite en Next.js + React + ChakraUI, avec intégration WalletConnect + MultiversX SDK pour permettre aux utilisateurs de connecter leur wallet, visualiser leurs NFT, voir leur solde de tokens du projet, et interagir avec les smart contracts.
// Pattern d'intégration WalletConnect + MultiversX (simplifié)
async function connectWallet() {
const provider = await WalletConnectProvider.init({
chainId: "1", // MultiversX mainnet
relayUrl: WALLET_CONNECT_RELAY,
});
const { address } = await provider.login();
// Récupération des NFT de l'utilisateur sur MultiversX
const userNfts = await multiversXSdk.getNftsForAddress(address, {
collection: "XGANGSTERS-xxx",
});
return { address, nfts: userNfts };
}
Le système d'élection NFT
Les détenteurs de NFT peuvent voter pour des candidats pendant une période donnée. Les votes sont pondérés par le nombre de NFT détenus. À la fin de la période, les élus participent au développement du projet (gouvernance partielle).
J'ai conçu l'interface de vote complète et le backend de monitoring (NestJS). Les smart contracts associés ont été écrits par un autre développeur de l'équipe spécialisé blockchain ; j'ai géré l'intégration côté dApp.
Le jeu de chasse au NFT
Un NFT est caché dans une grille visuelle. Chaque utilisateur a un nombre limité de tentatives quotidiennes basé sur ses NFT détenus. Le premier à trouver le NFT caché gagne une récompense.
J'ai développé toute la logique de jeu côté frontend, le système de tentatives, le state synchronisé via Firebase Realtime Database, et l'intégration avec les NFT du wallet.
Le jeu mobile de combat (non finalisé)
Le jeu Unreal Engine 5 a été développé par un freelance externe spécialisé UE5. De mon côté, j'ai développé l'API d'interface entre le jeu et la blockchain : exposition des stats NFT, contrats d'API, soumission des résultats on-chain.
Le jeu est resté en beta avancé non finalisé au moment de l'arrêt du projet.
// 04 · les-dfis-techniques
Les défis techniques
L'intégration MultiversX en 2023. À l'époque, MultiversX était jeune (rebranding Elrond → MultiversX en cours), les SDKs JavaScript en évolution rapide, la doc parfois lacunaire. J'ai souvent dû lire les sources des SDK officiels pour comprendre certains comportements.
Le state Web3 distribué. Une dApp combine plusieurs sources de vérité : le wallet local de l'utilisateur, le state on-chain (lent à confirmer), une couche off-chain de cache, et l'UI. Garder tout ça cohérent sans afficher d'états incohérents demande une vraie réflexion sur les transitions optimistes et le rollback en cas d'erreur.
Coordonner une équipe pluridisciplinaire. L'équipe était composée de 5 personnes : moi (web + intégration blockchain), un co-fondateur (stratégie + community), un dev blockchain (smart contracts Rust), un freelance UE5, un designer. Mon rôle CTO impliquait d'aligner trois codebases (dApp web, smart contracts, jeu mobile) avec trois cycles de déploiement différents — sans ralentir personne.
// 05 · ce-que-je-retiens
Ce que je retiens
xGangsters m'a appris deux choses essentielles sur le rôle de CTO :
D'abord, un CTO n'est pas seulement celui qui code le mieux. C'est celui qui décide quoi coder, quand, et qui s'assure que toute l'équipe converge. Les meilleures décisions techniques que j'ai prises sur xGangsters étaient souvent des décisions de ne pas faire : ne pas développer en interne ce qu'on pouvait déléguer, ne pas chercher la perfection technique sur des features non validées par la communauté.
Ensuite, un projet, ça s'arrête parfois pour des raisons humaines, pas techniques. La techno marchait. Le concept séduisait. Mais une équipe de 5 personnes reste fragile face à un imprévu humain. C'est une leçon que j'applique aujourd'hui chez Klorv : choisir ses co-fondateurs et son équipe avec autant de sérieux que ses choix techniques.
L'expérience CTO acquise sur xGangsters m'a directement préparé à fonder Klorv deux ans plus tard, avec plus de maturité sur ces sujets.
// 06 · stack-technique
Stack technique
| Layer | Technos |
|---|---|
| Frontend dApp | Next.js, React, ChakraUI, Tailwind, TypeScript |
| Backend | NestJS, Node.js, Firebase Realtime DB |
| Web3 | MultiversX SDK, WalletConnect (intégration côté dApp) |
| Smart Contracts | Rust (écrits par un dev dédié de l'équipe) |
| Game | Unreal Engine 5 (développé par un freelance externe) |
| Storage & deploy | AWS S3, Firebase, Netlify, Vercel |

