• Projets
  • Expertise
  • Ingénierie
  • Services
  • Tarifs
  • À propos
  • Contact
Discuter d’un projet
  • Projets
  • Expertise
  • Ingénierie
  • Services
  • Tarifs
  • À propos
  • Contact
Discuter d’un projet
Valerii Vvedenskyi

Les études de cas décrivent de vrais produits sur lesquels j'ai travaillé ; chaque fait de ce site en provient.

Sections

  • Projets
  • Expertise
  • Ingénierie
  • Services
  • Tarifs
  • À propos
  • Contact

Langues

  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português

Contact

valerii.vvedenskyi@gmail.com

Toronto, Canada

LinkedIn

© 2026 Valerii Vvedenskyi. Tous droits réservés.

Politique de confidentialité

Conçu et développé par Valerii Vvedenskyi avec Next.js.

  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português
  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português
Tous les travaux

GymTeam

Gestion de clubs : une plateforme, de nombreux clubs

Le volet staff de l’écosystème Fitofan : les clubs sportifs gèrent membres, cours, check-in, progression et paiements, chaque club dans son propre espace privé.

Rôle
Senior Full-Stack Engineer
Période
2025 – 2026

Contexte

GymTeam est l’outil des propriétaires, gérants et entraîneurs de clubs ; les athlètes et les parents utilisent Fitofan, qui les connecte aussi. Je l’ai extrait de la base de code Fitofan pour en faire un produit à part et j’en ai livré l’essentiel.

Le défi

Servir de nombreux clubs indépendants depuis une seule application avec une isolation stricte des données, encaisser les paiements sur chaque marché où les clubs opèrent, et garder les données de clubs cohérentes avec la plateforme des athlètes en temps réel.

Construit sur toutes les couches

  • Admin Next.js 16 en Feature-Sliced Design : plus de 80 pages, 11 locales
  • Backend NestJS : un module par entité avec cas d’usage, repositories et DTO validés ; 95 migrations
  • Isolation des tenants : un guard résout chaque club par id ou slug et vérifie l’appartenance avant tout handler
  • Membres, invitations et essais, plannings hebdomadaires avec listes d’attente, check-in en direct, présences, programme et niveaux de ceinture, décharges, devoirs, évaluations
  • Paiements : Finix, Stripe, PayPal, Square, Monopay, LiqPay, GCash et Mercado Pago plus espèces et dettes, un planificateur de facturation quotidien, stockage des identifiants en AES-256-GCM
  • Contrat RabbitMQ partagé avec Fitofan : 29 clés de routage, une enveloppe typée avec identifiants de corrélation, topologie documentée
  • Connexion par QR via WebSockets, une passerelle de session Socket.IO, stockage média compatible S3
  • Analyses de revenus, de présences et d’entraîneurs avec export CSV et PDF
  • Même pipeline de livraison que Fitofan : contrôle de types et Jest, image Docker, déploiement SSH

Points d’ingénierie

  • Périmètre du tenant imposé côté serveur, jamais confié au client
  • Webhooks idempotents par prestataire et id d’événement ; les intentions de paiement portent des clés d’idempotence
  • Une règle ESLint sur mesure, avec ses propres tests, garde les couches Feature-Sliced honnêtes
  • Les parcours d’inscription et de création de club viennent de packages partagés par les deux produits

Ce que cela permet

Chaque club obtient un produit qui semble conçu pour lui, tandis que l’ingénierie reste une seule base de code et un seul déploiement.

Preuves

  • Huit prestataires de paiement plus les espèces derrière un seul adaptateur, avec identifiants chiffrés et webhooks idempotents
  • Check-in en direct via WebSockets et connexion par QR
  • Chaque route de club résolue et autorisée côté serveur
  • Site web

Stack

  • Next.js
  • NestJS
  • PostgreSQL
  • RabbitMQ
  • Socket.IO
  • Finix
  • Stripe
  • Docker

Cas suivant

Jour de compétition
Discuter d’un projet