Un gestionnaire de tâches, oui — mais surtout un projet conçu pour montrer comment je construis une application de bout en bout : API typée et documentée, authentification multi-stratégies, pipeline CI/CD conteneurisé, et une intégration Slack pilotée par IA qui permet de créer des tâches en langage naturel.
Permettre à un utilisateur de créer des tâches en langage naturel directement depuis Slack, sans ouvrir l'application.
Un message comme «J'ai une réunion d'équipe vendredi à 14h, crée-moi une tâche pour préparer l'ordre du jour jeudi et une pour envoyer le compte-rendu lundi.» génère automatiquement les bonnes tâches aux bonnes dates.
Le workflow est orchestré par n8n, un outil d'automatisation open-source. Le choix de n8n plutôt qu'un script maison est délibéré : n8n permet de brancher facilement d'autres sources de messagerie (Discord, Teams, webhook générique) sans réécrire la logique d'orchestration.
Quand un utilisateur envoie un message dans Slack, n8n le réceptionne et le soumet d'abord à une IA qui modère le contenu. Si le message est valide, l'IA le parse pour en extraire les tâches pertinentes avec leurs dates. n8n envoie ensuite ces tâches à l'API sous forme d'opération en attente, et un message récapitulatif est posté dans Slack avec des boutons Approve / Deny.
Plutôt que d'exposer directement l'endpoint de création de tâches aux systèmes externes, l'API utilise un modèle intermédiaire Operation. Chaque opération est stockée avec un statut pending et ne produit aucun effet tant qu'elle n'est pas explicitement approuvée.
Endpoints protégés par API Key (X-API-Key), séparés des endpoints utilisateur. Payload validé contre le schéma CreateTaskSchema dès l'ingestion.
L'approbation utilise findOneAndUpdate({ shortId, status: "pending" }). Une opération déjà traitée ne peut pas être rejouée.
Chaque opération conserve l'intégralité du contexte : source, canal, utilisateur, horodatage, payload original. L'audit est natif.
Ajouter une nouvelle source (Discord, Teams) se résume à enrichir l'enum source et brancher un nouveau workflow n8n.
Architecture en couches stricte (routes → controllers → services → models). Les schémas Zod assurent validation des requêtes et génération automatique de la documentation OpenAPI. Endpoints couverts par tests d'intégration.
Même logique de séparation : fonctions HTTP pures (src/api/), wrappées par des hooks TanStack Query pour le cache et l'invalidation, consommées par les composants sans couplage au transport.
Quatre stratégies Passport.js (email/mot de passe, Google OAuth2, Slack OAuth2), access tokens JWT en Bearer, refresh tokens en cookie HttpOnly (Secure + SameSite), protection CSRF via state OAuth encodé en base64url, rate limiting sur les endpoints sensibles, et hiérarchie d'erreurs typées avec handler centralisé.
Templates React rendues côté serveur, envoyées via Resend, prévisualisables en développement avec @react-email/preview-server.
Docker multi-stage (image allégée, utilisateur non-root), CI/CD GitHub Actions via SSH, reverse proxy Nginx avec SSL sur VPS Ubuntu.
Exposer la gestion de tâches comme outils utilisables par les assistants IA (Claude, ChatGPT), permettant de créer et consulter ses tâches directement depuis une interface de chat.
Migration vers un replica set pour activer les transactions et garantir l'atomicité des opérations composées (ex. approbation bulk avec rollback en cas d'erreur partielle).