Retour aux projets

Projet personnel

Undercut

Pronostics de sport automobile entre amis, sur une saison complète.

Rôle
Conception et développement
Année
2026

Aperçu

Undercut est né d'un bot Discord que j'avais écrit pour une communauté de plus de 30 000 personnes. Le bot marchait, mais il était limité par Discord : pas de vraie page de classement, pas d'historique lisible, et chaque nouvelle règle de scoring devenait une commande de plus. Passer au web était la seule façon de faire grandir le produit.

J'ai structuré le projet en monorepo Turborepo pour partager les types entre le client, l'API et le bot. C'est le choix qui m'a fait gagner le plus de temps : quand le schéma d'un pronostic change, le typage casse aux trois endroits concernés au lieu de casser en production.

Le scoring est la partie qui demande le plus de soin. Les résultats de course arrivent depuis l'API du calendrier F1, puis un job calcule les points de chaque pronostic selon des règles pondérées : podium exact, vainqueur, meilleur tour. Le calcul est idempotent : rejouer une course ne double jamais les points.

Côté produit, il y a l'authentification, un système d'amis, des classements saisonniers et un back-office d'administration pour corriger un résultat quand la FIA modifie un classement après coup, ce qui arrive plus souvent qu'on ne le croit.

Points clés

  • Monorepo Turborepo : types partagés entre le client, l'API et le bot Discord
  • API REST NestJS avec Prisma comme ORM, sur une base MySQL
  • Authentification BetterAuth, système d'amis et classements saisonniers
  • Intégration de l'API du calendrier officiel de Formule 1
  • Déploiement continu via GitHub Actions, sur Vercel (frontend) et Render (backend)

Stack

  • TypeScript
  • React
  • SCSS
  • Tailwind CSS
  • NestJS
  • Prisma
  • MySQL
  • BetterAuth
  • Turborepo
  • GitHub Actions
  • Vercel
  • Render