RETOUR

CASSIMON

À propos

CassiMon est un bot Discord sur le thème Pokémon avec une communauté active de plus de 80 000 inscrits et 13 millions de pokémons capturés. C'est mon projet le plus longévif, maintenu et étoffé depuis 2018.

Fonctionnalités

  • Capture de pokémons
  • Échanges entre joueurs
  • Système de monnaie et loterie
  • Méga évolutions
  • Quêtes journalières
  • Marché pour acheter/vendre
  • Classements (pokémons, collections, etc.)
  • Événements saisonniers (Halloween, Noël, Pâques…)

Stack technique

L'écosystème est réparti en plusieurs services autour d'une même base PostgreSQL :

  • Bot : TypeScript + Node, discord.js 14, exécuté via un ShardingManager (réparti sur plusieurs shards pour encaisser la charge à grande échelle). Génération d'images et de GIF à la volée (cartes pokémon) avec canvas + gifencoder. Un second bot (boîtes à collectionner) tourne en parallèle. Intégration @top-gg/sdk.
  • Site compagnon : React 19 + TanStack Start (SSR), TanStack Router/Query, Drizzle ORM, authentification via Better Auth (OAuth Discord), Tailwind v4, avec un back-office admin pour gérer le catalogue pokémon et un CMS d'aide multilingue.
  • Données : PostgreSQL 16 (migré depuis MariaDB via pgloader) + Redis pour le cache. Le bot écrit l'état de jeu en SQL brut paramétré ; le site lit ces données via Drizzle.
  • Infra : tout dockerisé, déploiement continu via GHCR + Portainer sur VPS, nginx en frontal.

Défis techniques

  • Scaler un bot Discord à 80k+ utilisateurs → sharding et soin sur les requêtes / le cache.
  • Génération d'images performante côté serveur pour les cartes et animations.
  • Migration de base MariaDB → PostgreSQL sans interruption de service, puis refonte du site compagnon sur une stack moderne (TanStack Start).