P.02Prototype interne

RaceShare

Plateforme de mise en relation entre pilotes, sponsors et professionnels du sport automobile : annonces, profils, messagerie temps réel.

Période
Août 2025 – juin 2026
Rôle
Architecture complète, backend, base de données, interface.
Stack
  • React 19
  • Express 5
  • PostgreSQL
  • socket.io
  • JWT
  • bcrypt
  • helmet
  • sharp
  • multer

Repères

  • 6

    services backend

    auth, annonces, contacts, messages, photos, publications

  • 3

    rôles cloisonnés

    administrateur, pilote, sponsor

  • 10

    mois de développement

    premier au dernier commit, août 2025 – juin 2026

Le problème

Un pilote cherchant un budget et un sponsor cherchant une visibilité ne se rencontrent aujourd'hui que par relations personnelles. Le problème n'est pas d'afficher des annonces : c'est de rendre le premier contact possible sans exposer les coordonnées de tout le monde à tout le monde.

Ce qui a été construit

  • 01

    Trois rôles distincts — administrateur, pilote, sponsor — avec des vues et des droits séparés.

  • 02

    Une messagerie temps réel sur socket.io, avec un mécanisme de demande de contact : on ne peut pas écrire à quelqu'un tant qu'il n'a pas accepté.

  • 03

    Un système d'annonces avec tags, permettant de filtrer par discipline, catégorie et besoin.

  • 04

    Un gestionnaire de photos qui redimensionne à l'envoi plutôt qu'à l'affichage.

  • 05

    Des profils publics, un annuaire de contacts et un fil de publications.

Architecture

si acceptéPilotecompteSponsorcompteDemandefile d'attenteJWT + bcryptrôlesPostgreSQLannonces / tagssocket.ioconversation ouverte
Cloisonnement des échanges : rien ne passe entre deux comptes sans acceptation.

Décisions techniques

La demande de contact avant la messagerie

Une plateforme où un sponsor reçoit trente messages non sollicités par jour meurt en trois semaines. Les conversations ne s'ouvrent qu'après acceptation explicite, et les demandes en attente vivent dans une file séparée. C'est une contrainte produit avant d'être une contrainte technique, et elle a dicté le modèle de données.

Redimensionnement à l'envoi

Les photos passent par sharp au moment du dépôt et sont stockées à la taille servie. Le serveur ne refait jamais le travail à chaque affichage, et une photo de 8 Mo sortie d'un téléphone ne devient jamais 8 Mo de bande passante pour chaque visiteur.

Limitation de débit et en-têtes de sécurité dès le départ

express-rate-limit sur les routes d'authentification et helmet sur l'ensemble de l'application. Sur un site où l'on peut créer un compte, une route de connexion sans limitation est une invitation au bourrage d'identifiants. C'est une ligne de code au premier jour et une reprise complète au six-centième.

Ce que ça démontre

Authentification multi-rôles, temps réel, modération des échanges, traitement d'images côté serveur.