TaskFlow
Gestionnaire de tâches collaboratif en temps réel, inspiré de Trello et Linear. Les équipes créent des tableaux Kanban, déplacent des cartes par drag & drop et voient les modifications de leurs coéquipiers instantanément grâce aux WebSockets. Projet personnel pour approfondir le temps réel et l'architecture full-stack.
Captures d'écran
Pourquoi TaskFlow ?
TaskFlow est né d'une frustration personnelle : les outils de gestion de tâches existants (Trello, Notion, Jira) sont soit trop lourds, soit trop limités dans leur version gratuite. L'objectif principal était de construire un projet de bout en bout en me confrontant à des problématiques techniques que mes projets scolaires n'abordaient pas : le temps réel, la gestion des conflits de données et l'architecture orientée événements.
Le choix de MongoDB (au lieu de MySQL habituel) était délibéré : les données d'un tableau Kanban — cartes, colonnes, membres — sont naturellement imbriquées et leur schéma évolue fréquemment. Un document MongoDB représente un tableau entier avec toutes ses données, ce qui simplifie les lectures mais complexifie les mises à jour partielles.
La partie la plus challenging du projet a été d'implémenter la synchronisation temps réel multi-utilisateurs : quand Alice déplace une carte pendant que Bob en modifie le titre, les deux utilisateurs doivent voir un état cohérent sans rafraîchissement. Socket.io avec des rooms par tableau résout ce problème élégamment.
Ce que fait l'application
Comment c'est construit
L'application suit une architecture client-serveur découplée. Le frontend React communique avec le backend via deux canaux : l'API REST (Express) pour les opérations CRUD classiques, et Socket.io pour les événements temps réel. Les deux partagent le même processus Node.js mais sont clairement séparés dans le code.
MongoDB stocke les données avec un modèle de document par tableau contenant ses colonnes et ses cartes. Cette dénormalisation optimise les lectures (un seul fetch pour tout un tableau) au prix d'une logique de mise à jour plus complexe via les opérateurs atomiques de MongoDB ($set, $push, $pull, arrayFilters).