Aller au contenu
Retour aux réalisations sélectionnées
En production
Logo crwsync

crwsync

Espace de travail collaboratif en temps réel qui fusionne tableaux de tâches Kanban, messagerie d’équipe en direct et stockage de fichiers dans un monorepo distribué haute disponibilité.

Tableau de bord de l’espace de travail crwsync

Une plateforme collaborative distribuée en temps réel, conçue pour supprimer les changements de contexte incessants en entreprise. En réunissant le suivi de tâches Kanban, la communication d’équipe à faible latence et le stockage centralisé de fichiers dans un monorepo Turborepo découplé, crwsync synchronise l’état instantanément entre organisations et environnements distribués — avec une recherche globale Cmd+K qui couvre les tâches, les messages et les fichiers.

// Architecture

Turborepo distribué

3 applications découplées (@crwsync/backend, @crwsync/dash, @crwsync/web).

// Moteur temps réel

Socket.IO + Redis 7

Montée en charge horizontale des WebSockets avec l’adaptateur Redis Pub/Sub.

// Backend et base de données

NestJS 11 + Prisma 7

Persistance PostgreSQL 16 avec des guards RBAC à l’échelle de l’espace de travail.

// Infrastructure

Docker Swarm

Orchestration conteneurisée multiservice avec vérifications de santé.

// aperçu

Ce qu’est crwsync

crwsync fusionne des tableaux de tâches de type Kanban et la messagerie d’équipe en direct dans une seule interface : une équipe glisse une carte d’une colonne à l’autre et voit le message de chat d’un coéquipier arriver dans le même panneau, en temps réel — avec fichiers partagés, commentaires de tâche et listes de contrôle tout aussi à portée de main. Il est conçu comme un monorepo Turborepo de niveau entreprise — une API NestJS, un tableau de bord Next.js et un portail web public — découplé en conteneurs et orchestré pour la haute disponibilité.

Un système de gestion des rôles à deux niveaux adapte l’espace de travail à la hiérarchie réelle et aux besoins d’accès d’une équipe, plutôt que de recourir à un modèle de permissions unique et plat.

// 01. Contexte stratégique

Pourquoi crwsync est conçu ainsi

01 // Problème

Outils fragmentés et changements de contexte

Les équipes d’ingénierie modernes jonglent chaque jour entre 9 et 15 applications distinctes. Basculer entre des tableaux Kanban isolés, des outils de suivi de tickets et des canaux de chat autonomes éparpille l’attention, provoque des dérives de données et crée des frictions de communication qui ralentissent l’exécution de l’équipe.

Dynamique clé : 9–15 applications fragmentées par équipe
02 // Solution

Tableaux de tâches et messagerie en direct réunis

crwsync unifie l’exécution en intégrant des tableaux de tâches Kanban en glisser-déposer directement à la messagerie en temps réel, par salon et en direct, dans une seule vue. Bâti sur un monorepo Turborepo modulaire, il associe un état d’interface optimiste à des diffusions WebSocket et à des permissions par rôle à l’échelle de l’espace de travail.

Dynamique clé : Espace collaboratif en un seul panneau
03 // Résultat

Latence inférieure à 100 ms et architecture découplée

En séparant les transactions synchrones de la base PostgreSQL des diffusions en direct éphémères via Redis Pub/Sub, le système offre une latence de synchronisation inférieure à 100 ms entre clients distribués, tout en déléguant les charges lourdes d’arrière-plan, comme les e-mails, à des files de tâches BullMQ asynchrones.

Dynamique clé : Propagation des événements en moins de 100 ms
// principe architectural
« En découplant les diffusions WebSocket en direct des transactions persistantes de la base relationnelle, crwsync offre une latence de synchronisation inférieure à 100 ms tout en préservant de strictes garanties ACID. »
— Principe architectural
// 02. Visite du produit

crwsync en action

Une présentation orientée client de chaque module — ce qu’il fait et ce que l’on ressent en l’utilisant

Modules globaux

Trois vues à l’échelle de l’espace de travail, accessibles depuis la barre de navigation supérieure

Capture d’écran de Tableau de bord d’accueil

Tableau de bord d’accueil

Le point d’entrée de l’espace de travail — fil d’activité récente, projets épinglés, tâches en attente et aperçu en direct de la présence de l’équipe, en un coup d’œil.

⌘KOmni-recherche globale

Omni-recherche globale

Appuyez sur Cmd+K (ou Ctrl+K) depuis n’importe où dans l’espace de travail pour ouvrir une fenêtre de recherche unifiée. Tâches, messages, fichiers et membres — tout est consultable au même endroit, avec des résultats approximatifs instantanés au fil de la saisie.

Capture d’écran de la fenêtre d’omni-recherche Cmd+K de crwsync, ouverte, avec des résultats issus de tâches et de messages
02Gestion des tâches

Tableau de tâches

Un tableau Kanban en glisser-déposer où votre équipe fait avancer le travail ensemble — en temps réel. Déposez une carte dans une nouvelle colonne et chaque coéquipier la voit bouger instantanément, sans rechargement.

  • Colonnes en glisser-déposer: Déplacez les tâches entre les étapes du flux de travail d’un simple glisser-déposer fluide — les changements d’ordre sont conservés instantanément pour tous les coéquipiers.
  • Panneau de détail de la tâche: Ouvrez n’importe quelle tâche pour disposer d’une surface d’édition complète : description en texte enrichi, listes de contrôle avec progression, échéances et étiquettes de priorité.
  • Listes de contrôle de sous-tâches: Découpez le travail en étapes avec des listes de contrôle intégrées. Un badge de progression indique l’avancement d’un coup d’œil depuis la vue tableau.
  • Commentaires et @mentions: Des commentaires en fil de discussion sur chaque tâche, avec notifications par @mention, pour que le contexte reste attaché au travail lui-même.
  • Pièces jointes et aperçus: Glissez des fichiers directement sur une tâche ou collez des images. Les miniatures et la visionneuse lightbox se chargent directement dans le panneau de détail.
  • Filtres, vues et activité: Filtrez par responsable, priorité ou étiquette. Basculez entre les vues Kanban, Liste et Tableau. Chaque modification est consignée dans un historique d’activité propre à la tâche.
Socket.IO@dnd-kitTanStack QueryTipTapFractional Indexing
03Communication d’équipe

Salon de discussion

Une couche complète de messagerie en direct, intégrée à la même vue que vos tâches. Canaux de projet, messages directs, partage de fichiers et réactions emoji — le tout diffusé en moins de 100 ms.

  • Canaux de projet: Chaque projet dispose de son propre canal dédié. Le contexte reste à côté du tableau, pas dans une application séparée.
  • Messages directs: Des conversations privées en tête-à-tête avec n’importe quel membre de l’espace de travail — boîte de réception distincte, même livraison en temps réel.
  • Indicateurs de saisie: Voyez quand vos coéquipiers rédigent une réponse — des signaux éphémères qui donnent au travail asynchrone un côté direct.
  • Présence en ligne: Statut en ligne/absent en direct à côté de l’avatar de chaque membre, dans la barre latérale comme dans les fils de messages.
  • Réactions emoji: Réagissez à n’importe quel message avec un emoji. Les compteurs se mettent à jour en direct pour tous les participants du salon.
  • Partage de fichiers et d’images: Glissez des pièces jointes dans n’importe quel message. Les images s’ouvrent dans une lightbox. Les badges de messages non lus et les alertes de notification gardent l’équipe synchronisée.
Redis 7NestJS GatewaySocket.IOMoteur de présencePub/Sub
04Stockage de fichiers

Drive d’équipe

Une bibliothèque de fichiers partagée de l’espace de travail, à côté de vos tableaux et du chat — téléversez, prévisualisez et organisez les ressources de l’équipe sans quitter l’application. Les fichiers joints aux tâches et aux messages s’y trouvent aussi.

  • Bibliothèque de fichiers de l’espace de travail: Tous les fichiers téléversés dans l’espace de travail — pièces jointes de tâches, médias du chat, téléversements autonomes — apparaissent dans un seul Drive organisé.
  • Bascule grille et liste: Passez d’une grille visuelle de miniatures à une vue liste compacte avec des colonnes de métadonnées.
  • Téléversement par glisser-déposer: Déposez des fichiers n’importe où dans le panneau du Drive pour les téléverser. Indicateurs de progression et génération instantanée des miniatures à la fin.
  • Aperçu et téléchargement: Cliquez sur un fichier pour ouvrir une fenêtre d’aperçu complète avec lightbox pour les images. Téléchargement en un clic.
  • Accès limité à l’espace de travail: Les fichiers sont privés pour chaque espace de travail. L’accès par rôle garantit que seuls les membres autorisés peuvent consulter ou télécharger les ressources sensibles.
MinIOCompatible S3Presigned UploadsCloudflare R2
// 03. Architecture et topologie

Architecture monorepo distribuée

Des conteneurs découplés, orchestrés pour la haute disponibilité et une synchronisation à faible latence

topology.ascii
                      [ Client Browser / Mobile Web ]
                                     │
                                     │ HTTPS / WSS (TLS Termination)
                                     ▼
         ┌───────────────────────────────────────────────────────────┐
         │           Reverse Proxy & Edge Ingress (NGINX)            │
         │            Routes *.crwsync.xyz with SSL & Gzip           │
         └──────────────┬─────────────────────────────┬──────────────┘
                        │                             │
        ┌───────────────┴───────────────┐             │
        ▼                             ▼            ▼
    ┌───────────────────────┐   ┌───────────────────────┐   ┌───────────────────────────┐
    │     @crwsync/web      │   │     @crwsync/dash     │   │     @crwsync/backend      │
    │   (Next.js 16 SSR)    │   │   (Next.js 16 SPA)    │   │        (NestJS 11)        │
    │   crwsync.xyz:3000    │   │ dash.crwsync.xyz:3001 │   │    api.crwsync.xyz:4000   │
    │   • Marketing Portal  │   │   • Kanban Viewport   │   │  • REST API Controllers   │
    │   • Auth Redirection  │   │   • Live Chat Panels  │   │  • Socket.IO Gateways     │
    │   • Static Docs/Legal │   │   • Zustand State     │   │  • Dual-Layer RBAC Guards │
    └───────────────────────┘   └───────────┬───────────┘   │  • BullMQ Queue Producers │
                                            │               └─────────────┬─────────────┘
                                            │ REST / WSS Events           │
                                            └─────────────────────────────┘
                                                          │
                           ┌──────────────────────────────┴──────────────────────────────┐
                           │                                                             │
                           ▼                                                           ▼
           ┌───────────────────────────────┐                             ┌───────────────────────────────┐
           │     PostgreSQL Relational     │                             │        Redis 7 In-Memory      │
           │       Database Instance       │                             │      Pub/Sub & Queue Broker   │
           ├───────────────────────────────┤                             ├───────────────────────────────┤
           │ • Prisma 7 ORM Data Modeling  │                             │ • Socket.IO Redis Adapter     │
           │ • Relational Integrity & ACID │                             │ • BullMQ Worker Queue State   │
           │ • Scoped Multi-Tenant Tables  │                             │ • Ephemeral User Presence     │
           │ • Indexed Foreign Keys & DTOs │                             │ • Real-time Typing Streams    │
           └───────────────────────────────┘                             └───────────────────────────────┘
                           ▲                                                           ▲
                           │                                                             │
                           └──────────────────────────────┬──────────────────────────────┘
                                                          │
                                                          ▼
                           ┌─────────────────────────────────────────────────────────────┐
                           │               Docker Swarm Orchestration Engine             │
                           │   • Stack Compose Deployment (`stack.yml`)                  │
                           │   • Isolated Virtual Overlay Network (`crwsync_net`)        │
                           │   • Automated Container Health Checks & Zero-Downtime Rolls │
                           │   • Memory Hard Limits & Restart Policies (512MB/service)   │
                           └─────────────────────────────────────────────────────────────┘

Matrice des décisions techniques et de leur justification

Les arbitrages d’architecture fondamentaux qui déterminent la stabilité, la vélocité de développement et la scalabilité horizontale

Couche et périmètreChoix technologiqueCapacités clés et justification
Build et dev
Moteur monorepo
Turborepo + pnpm workspaces

Commits atomiques, configurations partagées, builds en cache

Permet des configurations TypeScript unifiées, des presets ESLint partagés et une mise en cache instantanée du pipeline de tâches entre @crwsync/backend, @crwsync/dash et @crwsync/web, tout en limitant l’inflation des dépendances grâce à une isolation stricte par liens symboliques.
API centrale
Framework serveur
NestJS 11 (TypeScript)

DI modulaire stricte, DTO typés, guards RBAC sur mesure

Architecture d’entreprise avec injection de dépendances déclarative, assainissement des entrées par class-validator et guards d’exécution composables qui appliquent un RBAC à deux niveaux, tant sur les contrôleurs REST que sur les gateways Socket.IO.
Frontend
Framework client
Next.js 16 + React 19

Composants serveur, primitives Radix UI, Tailwind CSS v4

Allie des pages d’accueil rendues côté serveur ultra-rapides (@crwsync/web) à un shell applicatif côté client très interactif, accessible et avec état (@crwsync/dash), optimisé pour un retour d’interface inférieur à 100 ms.
Temps réel
Couche temps réel
Socket.IO + Redis 7 Pub/Sub

Montée en charge horizontale des WebSockets sur les réplicas Swarm

Sépare les diffusions éphémères par socket des transactions relationnelles de la base de données. L’adaptateur Redis distribue les diffusions de salons entre plusieurs réplicas NestJS, sans perte de paquets.
Arrière-plan
Traitement asynchrone
BullMQ + Redis 7

Files de tâches transactionnelles découplées avec backoff de réessai

Isole les tâches lourdes d’arrière-plan (rendu d’e-mails Handlebars, envoi des jetons d’invitation, génération de résumés) des threads HTTP, avec des politiques de réessai exponentielles configurables et des files dead-letter.
Persistance
Base de données
PostgreSQL 16 + Prisma 7

Pilote @prisma/adapter-pg, intégrité relationnelle

Garantit des transactions ACID strictes pour les organisations multi-tenant, les projets, les tableaux et les colonnes de tâches. Utilise le pilote performant @prisma/adapter-pg avec des migrations de schéma automatisées.
Stockage
Stockage d’objets
MinIO (dev) + compatible S3 (prod)

Téléversements presigned, accès limité à l’espace de travail

Alimente les avatars, les pièces jointes de tâches, les médias du chat et le module Fichiers dédié de l’espace de travail. La route publique des avatars reste ouverte, tandis que les routes de fichiers de l’espace de travail restent protégées par authentification, puisque les pièces jointes sont privées pour un espace de travail.
DevOps
Orchestration
Docker Swarm

stack.yml déclaratif, mises à jour progressives sans interruption, limites de mémoire

Orchestration de conteneurs légère via le démon Docker natif, sans la lourdeur de Kubernetes. Propose des réseaux overlay isolés, des vérifications de santé automatiques, des déploiements progressifs sans interruption et des plafonds de 512 Mo de RAM.
// 02b. Sous le capot

Conçu pour une collaboration à haute fréquence

Quatre capacités essentielles, découplées entre client et serveur

// 01 • Synchronisation d’état et UI optimiste

Moteur Kanban en temps réel

Flux de tâches interactifs en glisser-déposer, avec réordonnancement par indexation fractionnaire, mutations optimistes côté client et diffusion instantanée des événements à plusieurs clients.

  • Diffusion Socket.IO: Les mises à jour multi-tenant des colonnes et des cartes sont diffusées instantanément aux salons de projet actifs.
  • Indexation fractionnaire: Réordonnancement des éléments en O(1) entre les cartes, sans mises à jour en cascade coûteuses dans la base de données.
  • UI optimiste: Annulation du cache TanStack Query si des erreurs réseau interrompent la persistance côté serveur.
  • Indicateurs multi-utilisateurs: Marqueurs de présence visuels lorsque des coéquipiers consultent ou manipulent des tâches dans la colonne.
  • Listes de contrôle et commentaires: Listes de contrôle de sous-tâches avec badges de progression et commentaires en fil de discussion avec @mentions, pour chaque tâche.
  • Filtres, vues et journal d’activité: Filtres par responsable/priorité/étiquette, bascule de vue Liste/Tableau et historique chronologique d’activité propre à chaque tâche.
  • Socket.IO
  • @dnd-kit
  • TanStack Query
  • TipTap
  • Fractional Indexing
// 02 • Communication WebSocket

Messagerie en direct par canaux et messages directs

Une architecture de messagerie persistante par salons, qui alimente les canaux de projet publics, les discussions en fil liées aux tâches et les conversations directes en tête-à-tête.

  • Salons socket persistants: Cycle d’entrée/sortie des salons dynamique, géré par projet et par canal de messagerie directe.
  • Couche Redis Pub/Sub: Messagerie WebSocket évolutive horizontalement entre des instances NestJS distribuées.
  • Présence et indicateurs: Suivi en temps réel du statut en ligne/absent des utilisateurs et indicateurs de saisie éphémères.
  • Accusés de lecture et badges: Suivi asynchrone des messages non lus et synchronisation instantanée des notifications côté client.
  • Réactions et partage de fichiers: Réactions emoji avec compteurs en direct, pièces jointes en glisser-déposer avec aperçus lightbox et alertes de notification persistantes.
  • Redis 7
  • NestJS Gateway
  • Moteur de présence
  • Pub/Sub
  • Réactions emoji
// 03 • Sécurité et autorisation

Contrôle d’accès par rôle à l’échelle de l’espace de travail

Un système de rôles unique et strictement hiérarchique — Propriétaire, Administrateur, Membre, Invité — qui contrôle chaque action de l’espace de travail, de la couche de guards de l’API jusqu’à l’interface, avec une administration en libre-service pour la promotion, la rétrogradation et le transfert de propriété.

  • Rôles hiérarchiques: Niveaux OWNER, ADMIN, MEMBER et GUEST attribués par espace de travail et appliqués à chaque mutation.
  • Guards et décorateurs NestJS: Guards déclaratifs @RequireWorkspaceRoles() évalués sur chaque endpoint REST et chaque gateway WebSocket.
  • Restriction par rôle côté frontend: Les commandes d’administration, comme l’exclusion d’un membre, la suppression d’une colonne et la suppression d’un projet, ne s’affichent que pour les rôles autorisés.
  • Parcours d’invitation et de transfert de propriété: Invitations avec rôle attribué, promotion et rétrogradation des membres, et transfert complet de propriété depuis les paramètres de l’espace de travail.
  • Guards NestJS
  • RBAC de l’espace de travail
  • JWT + HttpOnly Cookies
  • Administration des rôles
// 04 • Stockage et médias

Fichiers, pièces jointes et stockage de médias

Un stockage d’objets compatible S3 qui alimente un Drive d’équipe dédié, les pièces jointes de tâches et les médias du chat — bouclant la boucle de la synchronisation des tâches, des conversations et des fichiers au même endroit.

  • Téléversements presigned: MinIO en développement local, stockage compatible S3 en production, avec des URL presigned pour des téléversements directs depuis le client.
  • Module Fichiers de l’espace de travail: Un Drive dédié par espace de travail, avec vues grille/liste, aperçus et téléchargements, à côté des tableaux et du chat.
  • Pièces jointes de tâches et de chat: Téléversements en glisser-déposer sur les tâches et dans le chat, avec aperçus en miniature et lightbox d’images.
  • Accès limité à l’espace de travail: Les routes de fichiers et d’avatars sont protégées par authentification et limitées à l’espace de travail, contrairement à l’endpoint public des avatars.
  • MinIO
  • Stockage compatible S3
  • Téléversements presigned
  • Salons de fichiers
// 04. Défis et obstacles

Obstacles d’ingénierie et solutions

Les principaux écueils rencontrés lors de l’orchestration temps réel à forte concurrence

// 01 • Concurrence en temps réel

Conditions de concurrence et glisser-déposer simultané

L’obstacle

Le réordonnancement simultané de tâches par plusieurs clients, avec une indexation naïve par entiers (1, 2, 3...), déclenchait des mises à jour SQL en cascade, des deadlocks et des conditions de concurrence où les cartes changeaient de position.

La résolution

Indexation fractionnaire de type Lexorank sur des chaînes, associée à un verrouillage optimiste via Redis. Le déplacement d’une carte calcule le rang médian exact en temps O(1), sans modifier les lignes voisines, et diffuse les mises à jour instantanément via Socket.IO.

Impact : Aucun verrouillage de ligne en base, réconciliation instantanée de l’UI optimiste et modifications de tableau sans conflit entre plusieurs utilisateurs.

  • Lexorank
  • Verrous Redis
  • Indexation fractionnaire
  • Réordonnancement O(1)
// 02 • Authentification et sécurité

Isolation des sessions multi-domaines et handshakes WSS

L’obstacle

Le monorepo s’étend sur crwsync.xyz, dash.crwsync.xyz et api.crwsync.xyz. Stocker les jetons dans localStorage exposait l’authentification au XSS, tandis que les cookies standard ne se partageaient pas entre sous-domaines et échouaient à la vérification de la montée de protocole WebSocket.

La résolution

Cookies de session signés cryptographiquement, HttpOnly, SameSite=Lax, avec la portée Domain=.crwsync.xyz derrière une terminaison TLS NGINX. Les gateways WebSocket NestJS inspectent et valident le cookie de session lors du handshake initial de montée de protocole HTTP.

Impact : L’exposition des jetons aux scripts côté client a été supprimée, un SSO fluide entre sous-domaines est devenu possible et les connexions socket en temps réel sont sécurisées.

  • Cookies HttpOnly
  • Portée de domaine
  • Handshake WSS
  • Atténuation du XSS
// 03 • DevOps et infrastructure

Saturation mémoire des conteneurs et déploiements sans interruption

L’obstacle

Les images Docker du monorepo dépassaient 1,5 Go, avec des pics de mémoire pendant le SSR et la compilation, ce qui exposait la production à des arrêts OOM et coupait les connexions WebSocket actives pendant les déploiements.

La résolution

Dockerfiles multi-étapes avec élagage Turborepo (turbo prune --scope=<app> --docker), ramenant la taille des images sous 120 Mo. Services Swarm orchestrés avec des limites de mémoire strictes de 512 Mo et des mises à jour progressives (parallelism: 1, start-first order).

Impact : Taille des images réduite de 90 %, empreinte RAM strictement bornée et déploiements progressifs fluides sans interruption, sans aucune connexion socket perdue.

  • Turbo Prune
  • Docker Swarm
  • Mises à jour progressives
  • Plafond de 512 Mo de RAM
// 05. Stack technologique

Matrice d’architecture full-stack

Détail complet, couche par couche, des bibliothèques, pilotes et frameworks

Monorepo
  • Turborepo
  • pnpm workspaces
  • TypeScript
Frontend et UI
  • Next.js 16
  • React 19
  • Tailwind CSS v4
  • Radix UI
  • @dnd-kit
  • TipTap
Backend et API
  • NestJS 11
  • Prisma 7
  • PostgreSQL 16
  • @prisma/adapter-pg
Temps réel et WSS
  • Socket.IO
  • Redis 7 (adaptateur Pub/Sub)
Files d’arrière-plan
  • BullMQ
  • Broker Redis
Stockage et médias
  • MinIO (local)
  • Cloudflare R2 (prod)
État côté client
  • Zustand
  • TanStack Query v5
Authentification et sécurité
  • Passport.js (JWT/Local)
  • bcrypt
  • Cookies HttpOnly
Communications
  • Nodemailer
  • Templates Handlebars
Localisation
  • Package i18n partagé
  • Anglais
  • Espagnol
DevOps et déploiement
  • Docker
  • Docker Swarm
  • NGINX Reverse Proxy
  • GitHub Actions
  • Sentry
  • Playwright E2E
// 06. Exécution locale et évaluation

À essayer en ligne et à reproduire en local

Le portail web crwsync.xyz est en ligne en production. Le tableau de bord de l’application est protégé par une authentification par session et des guards d’organisation multi-tenant ; les identifiants de démonstration ne sont donc pas publiés — contactez-moi directement pour une démonstration interactive.

L’intégralité du code source du monorepo est publique, pour la revue de portfolio et l’évaluation technique. Vous pouvez exécuter en local toute la stack découplée : Docker Compose fournit PostgreSQL, Redis et MinIO, et Turborepo démarre l’API NestJS ainsi que les deux applications Next.js.

local-setup.sh
# 1. Clone monorepo and install dependencies
git clone https://github.com/JustTunya/crwsync.git
cd crwsync
pnpm install

# 2. Start local infrastructure (PostgreSQL, Redis, MinIO)
docker compose -f docker-compose.dev.yml up -d

# 3. Configure environment variables (fill in secrets, see README)
cp apps/backend/.env.example apps/backend/.env
cp apps/frontend/dash/.env.example apps/frontend/dash/.env
cp apps/frontend/web/.env.example apps/frontend/web/.env

# 4. Generate Prisma client, run migrations, seed demo workspace (optional)
pnpm --filter @crwsync/backend run prisma:generate
pnpm --filter @crwsync/backend run prisma:migrate:dev
pnpm seed

# 5. Start web, dashboard and API via Turborepo
pnpm dev
# Marketing Portal: http://localhost:3000
# App Dashboard:    http://localhost:3001
# Backend API:      http://localhost:8080

Informations d’évaluation et détails de simulation

  • Données d’espace de travail simulées : Les équipes, projets, tâches Kanban et canaux de chat de la démo en production sont des jeux de données préchargés, pour préserver la confidentialité de l’évaluation.
  • Moteur temps réel en direct : La gateway WebSocket, le bus Redis 7 Pub/Sub, l’API NestJS et la base PostgreSQL tournent en direct sur une infrastructure de production conteneurisée, avec une véritable propagation des événements.
  • Licence PolyForm Noncommercial : Le code source est consultable publiquement pour l’étude, l’apprentissage et la revue de portfolio, sous la PolyForm Noncommercial License 1.0.0 — tout usage commercial exige une licence distincte.

Découvrez crwsync en action

Accessible publiquement pour l’évaluation technique, la revue de code et l’examen de l’architecture.