blog/hola-app-react-native-socketio

Construire une app de réservation sportive avec React Native, Expo et Socket.io

13 mai 20265 min
React NativeExpoSocket.ioHonoTypeScript
───

Hola App est née d'un constat simple : réserver un terrain de five ou de padel, c'est encore trop souvent un appel téléphonique ou un SMS. L'idée : une app mobile rapide, avec des créneaux visibles en temps réel.

Stack technique

Le projet tourne sur :

  • React Native / Expo — pour le cross-platform mobile (iOS + Android) sans perdre en perf
  • Socket.io — pour la mise à jour en temps réel des disponibilités
  • Hono — framework backend ultra-léger, parfait pour une API REST + WebSocket
  • PostgreSQL — pour le stockage des créneaux, réservations et utilisateurs

Pourquoi Hono plutôt qu'Express ?

Hono pèse environ 30KB, démarre en quelques millisecondes, et supporte nativement les WebSocket sans bidouillage. Pour une app temps réel, c'est un choix naturel. La syntaxe est proche d'Express, donc la courbe d'apprentissage est quasi nulle.

Le temps réel avec Socket.io

Le défi principal : quand un utilisateur réserve un créneau, il faut le verrouiller immédiatement pour éviter les doublons, et notifier tous les autres utilisateurs de la mise à jour. Socket.io permet ça avec des rooms par terrain et des events de broadcast.

// Réservation optimiste avec verrouillage
socket.emit("book:slot", { slotId, userId });
socket.on("book:confirmed", (slot) => {
  // Mise à jour immédiate de l'UI
  updateSlot(slot);
});

Leçons apprises

  • Le state management React Native + Socket.io demande une architecture réfléchie — on utilise un context provider avec useReducer
  • Expo Go est parfait pour le prototypage, mais le build natif avec EAS est indispensable pour les notifications push et les modules natifs
  • Les WebSocket derrière un reverse proxy (Nginx) nécessitent une configuration spécifique (upgrade headers, buffer size)

La suite : intégration des notifications push pour les rappels de réservation, et un système de mapping des terrains en temps réel.