OsaBoard est un espace de travail collaboratif en temps réel. On pose des blocs sur un canvas infini (texte, code, Kanban, sondage, carte, base de données…), on les relie entre eux, et chacun voit les curseurs des autres bouger en direct.
« Au départ, c'était un tableau blanc. Au bout de quelques heures, c'était devenu un outil de travail. »
La première version d'OsaBoard était un simple tableau blanc partagé en WebRTC. Deux heures plus tard, je l'ai réécrite autour de React Flow : au lieu de traits, on manipule des blocs qu'on peut relier.
Le reste de la nuit a servi à ajouter des blocs utiles : du code, du Markdown, une checklist, un Kanban, un sondage, un minuteur, une carte, un agenda, la météo, et même une petite base SQL qui tourne dans le navigateur.
02En images
À quoi ça ressemble.
La barre d'outils : chaque icône ajoute un type de bloc.
osaboard.osalabs.fr
Créer une room, en importer une, ou rejoindre par code.
03Comment ça marche
Sous le capot.
Chaque participant garde une copie du tableau. Les changements voyagent directement entre les navigateurs.
1
Une room et un code
Le serveur Socket.io ne sert qu'à présenter les participants.
2
Un maillage WebRTC
Chaque participant ouvre un DataChannel avec chacun des autres : un vrai réseau à N personnes, sans serveur central.
3
Des messages découpés
Les gros contenus (images compressées, tableaux) sont découpés en morceaux de 16 Ko et réassemblés à l'arrivée.
4
Des blocs React Flow
18 types de nœuds personnalisés, reliés par des liens animés. Les curseurs de chacun s'affichent en direct.
5
Export et import
Un tableau entier se sauvegarde dans un fichier et se rouvre dans une nouvelle room.
✦À toi de jouer
Bouge les blocs
Une version miniature du canvas : déplace les blocs, ajoutes-en, et regarde les liens suivre.
!Les défis
Ce qui a résisté.
Des boucles de rendu infinies
ProblèmeSynchroniser l'état React Flow avec le réseau dans un useEffect relançait le rendu à l'infini.
SolutionLes mises à jour réseau passent par des fonctions de mise à jour ciblées, sans effet qui se déclenche lui-même.
Les candidats ICE perdus
ProblèmeCertaines connexions ne s'établissaient jamais.
SolutionLes candidats ICE n'étaient pas envoyés à temps : ils sont maintenant transmis dès qu'ils arrivent.
Passer de 2 à N personnes
ProblèmeLe premier modèle ne reliait que deux participants.
SolutionUne topologie maillée : chaque nouvel arrivant ouvre une connexion avec chacun des participants déjà présents.