LabOrchestré par IA
Rôle · Concepteur & orchestrateurAnnée · oct. 2026Type · Jeu multi-écrans temps réel

Navale

Une bataille navale qui se joue autour de la table : l’écran central montre la partie, chaque téléphone garde la flotte secrète de son joueur, et un serveur temps réel fait respecter les règles

Capture principale du projet Navale
Le contexte

L’idée

Les jeux de société à informations cachées demandent des paravents et quelqu’un pour arbitrer. Les jeux vidéo locaux, eux, isolent chacun derrière son écran. Navale garde la table et les regards, et confie les règles et le secret à une machine.

Ce que ça fait

Fonctionnement

Un écran central (TV, portable ou tablette) affiche l’état public de la partie. Chaque joueur rejoint par QR code depuis son téléphone, y place sa flotte et tire. De 2 à 4 joueurs, en tour par tour ou en salve simultanée, avec des bots pour jouer seul. Sans compte ni installation : le navigateur suffit, et l’app est installable en PWA.

Chaque tir déclenche une séquence animée sur l’écran central, avec des sons synthétisés en Web Audio. Un téléphone verrouillé puis rouvert retrouve sa partie sans rien ressaisir, et la revanche se lance en un geste.

Architecture

Un serveur qui fait autorité

Un monorepo TypeScript de bout en bout : un moteur de jeu pur et event-sourced, sans dépendance, qui tourne dans Node comme dans le navigateur ; un protocole partagé validé par Zod ; un serveur Fastify + Socket.IO ; un front React 19 + Vite.

Le client ne calcule jamais le résultat d’un tir. Chaque commande est validée, décidée par le moteur, ajoutée à un journal d’événements SQLite, puis publiée en deux vues : une vue publique pour l’écran central, une vue privée pour chaque téléphone.

Défis

Défis techniques

Le secret garanti par construction : les vues publiques et privées sont calculées côté serveur, jamais filtrées dans le client. Un test d’intégration joue une partie complète et vérifie qu’aucune position de bateau cachée n’atteint l’écran central.

Reprise après redémarrage : au démarrage, le serveur rejoue le journal de chaque partie en cours et réarme les chronos. Un redémarrage ne perd aucune partie.

Salve simultanée : tous les joueurs tirent en secret, puis le serveur résout les tirs un par un, au rythme des animations de l’écran central.

Moteur testé avant toute interface : tests Vitest et tests de propriétés fast-check (le rejeu du journal redonne toujours l’état courant).

Mon rôle

Conçu & orchestré

J’ai écrit le cahier des charges et validé les maquettes, puis Navale a été construit via l’orchestration d’agents IA, en six jalons. Je tranche l’architecture et je valide chaque jalon avant de passer au suivant.

Stack

Technologies

TypeScript strict en monorepo pnpm ; moteur pur event-sourced ; Zod ; Node 24, Fastify, Socket.IO, SQLite ; React 19, Vite, Zustand, Tailwind CSS v4, PWA ; Vitest et fast-check ; Docker et Caddy sur un VPS.

Socket.IOEvent sourcing
Résultat

L’impact

Un jeu en ligne sur navale.sigilbo.fr, qui se joue à plusieurs autour d’une table ou seul contre des bots.

2–4
joueurs autour d’un écran central
0
position cachée reçue par l’écran central (testé)
2 jours
du cahier des charges à la mise en ligne