Saltar al contenido
Volver a proyectos seleccionados
En producción
Logotipo de crwsync

crwsync

Espacio de trabajo colaborativo en tiempo real que fusiona tableros de tareas Kanban, mensajería de equipo en vivo y almacenamiento de archivos en un monorepo distribuido de alta disponibilidad.

Panel del espacio de trabajo crwsync

Una plataforma de espacio de trabajo colaborativo, distribuida y en tiempo real, diseñada para eliminar el constante cambio de contexto en las empresas. Al unificar el seguimiento de tareas Kanban, la comunicación de equipo de baja latencia y el almacenamiento centralizado de archivos en un monorepo Turborepo desacoplado, crwsync sincroniza el estado al instante entre organizaciones y entornos distribuidos — con una búsqueda global Cmd+K que abarca tareas, mensajes y archivos.

// Arquitectura

Turborepo distribuido

3 aplicaciones desacopladas (@crwsync/backend, @crwsync/dash, @crwsync/web).

// Motor en tiempo real

Socket.IO + Redis 7

Escalado horizontal de WebSockets con el adaptador Redis Pub/Sub.

// Backend y base de datos

NestJS 11 + Prisma 7

Persistencia en PostgreSQL 16 con guards RBAC a nivel de espacio de trabajo.

// Infraestructura

Docker Swarm

Orquestación contenerizada de múltiples servicios con comprobaciones de estado.

// resumen

Qué es crwsync

crwsync fusiona tableros de tareas al estilo Kanban con mensajería de equipo en vivo en una sola interfaz, de modo que un equipo arrastra una tarjeta entre columnas y ve llegar el mensaje de chat de un compañero en el mismo panel, en tiempo real — con archivos compartidos, comentarios de tareas y listas de verificación igual de a mano. Está construido como un monorepo Turborepo de nivel empresarial — una API NestJS, un panel Next.js y un portal web público — desacoplado en contenedores y orquestado para alta disponibilidad.

Un sistema de gestión de roles de doble capa adapta el espacio de trabajo a la jerarquía real y a los requisitos de acceso de un equipo, en lugar de un único modelo de permisos plano.

// 01. Contexto estratégico

Por qué crwsync está construido así

01 // Problema

Herramientas fragmentadas y cambios constantes de contexto

Los equipos de ingeniería modernos navegan a diario entre 9 y 15 aplicaciones dispares. Alternar entre tableros Kanban aislados, gestores de incidencias y canales de chat independientes fragmenta la concentración, provoca desajustes de datos y genera fricción en la comunicación, lo que frena la velocidad de ejecución del equipo.

Dinámica clave: 9–15 aplicaciones fragmentadas por equipo
02 // Solución

Tableros de tareas y mensajería en vivo en un mismo lugar

crwsync unifica la ejecución al integrar tableros de tareas Kanban con arrastrar y soltar directamente con la mensajería en tiempo real, por sala y directa, en una sola vista. Construido sobre un monorepo Turborepo modular, combina un estado de interfaz optimista con difusiones por WebSocket y permisos basados en roles a nivel de espacio de trabajo.

Dinámica clave: Lienzo colaborativo en un solo panel
03 // Resultado

Latencia inferior a 100 ms y arquitectura desacoplada

Al separar las transacciones síncronas de la base de datos PostgreSQL de las difusiones en vivo efímeras mediante Redis Pub/Sub, el sistema ofrece una latencia de sincronización inferior a 100 ms entre clientes distribuidos, a la vez que descarga las cargas pesadas en segundo plano, como los correos electrónicos, en colas de trabajos asíncronas con BullMQ.

Dinámica clave: Propagación de eventos en menos de 100 ms
// principio arquitectónico
“Al desacoplar las difusiones en vivo por WebSocket de las transacciones persistentes de la base de datos relacional, crwsync ofrece una latencia de sincronización inferior a 100 ms sin renunciar a estrictas garantías ACID.”
— Principio arquitectónico
// 02. Recorrido por el producto

crwsync en acción

Un recorrido orientado al cliente por cada módulo — qué hace y qué se siente al usarlo

Módulos globales

Tres vistas de todo el espacio de trabajo, disponibles desde la barra de navegación superior

Captura de pantalla de Panel de inicio

Panel de inicio

El punto de entrada del espacio de trabajo — actividad reciente, proyectos fijados, tareas pendientes y una instantánea en vivo de la presencia del equipo, de un vistazo.

⌘KOmni-búsqueda global

Omni-búsqueda global

Pulse Cmd+K (o Ctrl+K) desde cualquier punto del espacio de trabajo para abrir una ventana de búsqueda unificada. Tareas, mensajes, archivos y miembros — todo se puede buscar en un solo lugar, con resultados aproximados al instante mientras escribe.

Captura de pantalla de la ventana de omni-búsqueda Cmd+K de crwsync abierta, con resultados de tareas y mensajes
02Gestión de tareas

Tablero de tareas

Un tablero Kanban con arrastrar y soltar donde su equipo hace avanzar el trabajo en conjunto — en tiempo real. Suelte una tarjeta en una columna nueva y cada compañero la ve moverse al instante, sin recargar.

  • Columnas con arrastrar y soltar: Mueva tareas entre las etapas del flujo de trabajo con un arrastrar y soltar fluido — los cambios de orden se conservan al instante para todos los compañeros.
  • Panel de detalle de la tarea: Abra cualquier tarea para acceder a una superficie de edición completa: descripción en texto enriquecido, listas de verificación con progreso, fechas límite y etiquetas de prioridad.
  • Listas de verificación de subtareas: Divida el trabajo en pasos con listas de verificación integradas. Una insignia de progreso muestra el avance de un vistazo desde la vista de tablero.
  • Comentarios y @menciones: Comentarios en hilo en cada tarea con notificaciones por @mención, para que el contexto permanezca unido al propio trabajo.
  • Adjuntos y vistas previas: Arrastre archivos directamente a una tarea o pegue imágenes. Las miniaturas y un visor lightbox se cargan en línea dentro del panel de detalle.
  • Filtros, vistas y actividad: Filtre por responsable, prioridad o etiqueta. Alterne entre las vistas Kanban, Lista y Tabla. Cada cambio queda registrado en un historial de actividad por tarea.
Socket.IO@dnd-kitTanStack QueryTipTapFractional Indexing
03Comunicación de equipo

Sala de chat

Una capa completa de mensajería en vivo integrada en la misma vista que sus tareas. Canales de proyecto, mensajes directos, uso compartido de archivos y reacciones con emoji — todo difundido en menos de 100 ms.

  • Canales de proyecto: Cada proyecto tiene su propio canal dedicado. El contexto permanece junto al tablero, no en una aplicación aparte.
  • Mensajes directos: Conversaciones privadas uno a uno con cualquier miembro del espacio de trabajo — bandeja de entrada independiente, misma entrega en tiempo real.
  • Indicadores de escritura: Vea cuándo sus compañeros están redactando una respuesta — señales efímeras que hacen que lo asíncrono se sienta en vivo.
  • Presencia en línea: Estado en línea/ausente en vivo junto al avatar de cada miembro, tanto en la barra lateral como en los hilos de mensajes.
  • Reacciones con emoji: Reaccione a cualquier mensaje con un emoji. Los contadores se actualizan en vivo para todos los participantes de la sala.
  • Uso compartido de archivos e imágenes: Arrastre adjuntos a cualquier mensaje. Las imágenes se abren en un lightbox. Las insignias de no leídos y las alertas de notificación mantienen al equipo sincronizado.
Redis 7NestJS GatewaySocket.IOMotor de presenciaPub/Sub
04Almacenamiento de archivos

Unidad del equipo

Una biblioteca de archivos compartida del espacio de trabajo junto a sus tableros y al chat — suba, previsualice y organice los recursos del equipo sin salir de la aplicación. Los archivos adjuntos a tareas y mensajes también se guardan aquí.

  • Biblioteca de archivos del espacio de trabajo: Todos los archivos subidos al espacio de trabajo — adjuntos de tareas, contenido multimedia del chat, subidas independientes — aparecen en una única unidad organizada.
  • Alternancia entre cuadrícula y lista: Cambie entre una cuadrícula visual de miniaturas y una vista de lista compacta con columnas de metadatos.
  • Subida con arrastrar y soltar: Suelte archivos en cualquier punto del panel de la unidad para subirlos. Indicadores de progreso y generación instantánea de miniaturas al terminar.
  • Vista previa y descarga: Haga clic en cualquier archivo para abrir una ventana de vista previa completa con lightbox de imágenes. Descarga con un solo clic.
  • Acceso limitado al espacio de trabajo: Los archivos son privados para cada espacio de trabajo. El acceso basado en roles garantiza que solo los miembros autorizados puedan ver o descargar recursos sensibles.
MinIOCompatible con S3Presigned UploadsCloudflare R2
// 03. Arquitectura y topología

Arquitectura de monorepo distribuida

Contenedores desacoplados, orquestados para alta disponibilidad y sincronización de baja latencia

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)   │
                           └─────────────────────────────────────────────────────────────┘

Matriz de decisiones técnicas y su justificación

Las compensaciones arquitectónicas clave que determinan la estabilidad, la velocidad de desarrollo y la escalabilidad horizontal

Capa y alcanceTecnología elegidaCapacidades clave y justificación
Build y desarrollo
Motor del monorepo
Turborepo + pnpm workspaces

Commits atómicos, configuraciones compartidas, compilaciones en caché

Permite configuraciones de TypeScript unificadas, presets de ESLint compartidos y almacenamiento en caché instantáneo del pipeline de tareas entre @crwsync/backend, @crwsync/dash y @crwsync/web, a la vez que reduce el exceso de dependencias mediante un aislamiento estricto con enlaces simbólicos.
API principal
Framework de servidor
NestJS 11 (TypeScript)

DI modular estricta, DTO tipados, guards RBAC personalizados

Arquitectura empresarial con inyección de dependencias declarativa, saneamiento de entradas con class-validator y guards de ejecución componibles que aplican un RBAC de doble capa tanto en los controladores REST como en los gateways de Socket.IO.
Frontend
Framework de cliente
Next.js 16 + React 19

Componentes de servidor, primitivas de Radix UI, Tailwind CSS v4

Combina páginas de aterrizaje renderizadas en el servidor y rapidísimas (@crwsync/web) con un shell de aplicación del lado del cliente, muy interactivo, accesible y con estado (@crwsync/dash), optimizado para una respuesta de interfaz inferior a 100 ms.
Tiempo real
Capa en tiempo real
Socket.IO + Redis 7 Pub/Sub

Escalado horizontal de WebSockets entre réplicas de Swarm

Separa las difusiones efímeras por socket de las transacciones relacionales de la base de datos. El adaptador de Redis distribuye las difusiones de las salas entre varias réplicas de NestJS sin pérdida de paquetes.
Segundo plano
Procesamiento asíncrono
BullMQ + Redis 7

Colas de trabajos transaccionales desacopladas con reintentos y backoff

Aísla los trabajos pesados en segundo plano (renderizado de correos con Handlebars, envío de tokens de invitación, generación de resúmenes) de los hilos HTTP, con políticas de reintento exponencial configurables y colas dead-letter.
Persistencia
Base de datos
PostgreSQL 16 + Prisma 7

Controlador @prisma/adapter-pg, integridad relacional

Garantiza transacciones ACID estrictas para organizaciones multi-tenant, proyectos, tableros y columnas de tareas. Utiliza el controlador de alto rendimiento @prisma/adapter-pg con migraciones de esquema automatizadas.
Almacenamiento
Almacenamiento de objetos
MinIO (dev) + compatible con S3 (prod)

Subidas presigned, acceso limitado al espacio de trabajo

Sirve avatares, adjuntos de tareas, contenido multimedia del chat y el módulo dedicado de Archivos del espacio de trabajo. La ruta pública de avatares permanece abierta, mientras que las rutas de archivos del espacio de trabajo siguen protegidas por autenticación, ya que los adjuntos son privados para cada espacio de trabajo.
DevOps
Orquestación
Docker Swarm

stack.yml declarativo, actualizaciones progresivas sin tiempo de inactividad, límites de memoria

Orquestación ligera de contenedores mediante el demonio nativo de Docker, sin la sobrecarga de Kubernetes. Incluye redes overlay aisladas, comprobaciones de estado automáticas, despliegues progresivos sin tiempo de inactividad y topes de 512 MB de RAM.
// 02b. Bajo el capó

Diseñado para una colaboración de alta frecuencia

Cuatro capacidades centrales, desacopladas entre cliente y servidor

// 01 • Sincronización de estado e interfaz optimista

Motor Kanban en tiempo real

Flujos de tareas interactivos con arrastrar y soltar, reordenación por indexación fraccionaria, mutaciones optimistas en el cliente y difusión instantánea de eventos a varios clientes.

  • Difusión con Socket.IO: Las actualizaciones multi-tenant de columnas y tarjetas se difunden al instante a las salas de proyecto activas.
  • Indexación fraccionaria: Reordenación de elementos en O(1) entre tarjetas, sin costosas actualizaciones en cascada en la base de datos.
  • Interfaz optimista: Reversión de la caché de TanStack Query si los errores de red interrumpen la persistencia en el servidor.
  • Indicadores multiusuario: Marcadores visuales de presencia cuando los compañeros consultan o interactúan con tareas en la columna.
  • Listas de verificación y comentarios: Listas de verificación de subtareas con insignias de progreso y comentarios en hilo con @menciones en cada tarea.
  • Filtros, vistas y registro de actividad: Filtros por responsable/prioridad/etiqueta, un selector de vista Lista/Tabla y un historial cronológico de actividad por tarea.
  • Socket.IO
  • @dnd-kit
  • TanStack Query
  • TipTap
  • Fractional Indexing
// 02 • Comunicación por WebSocket

Mensajería en vivo por canales y mensajes directos

Una arquitectura de mensajería persistente basada en salas que da soporte a los canales públicos de proyecto, a las conversaciones en hilo sobre tareas y a las conversaciones directas uno a uno.

  • Salas de socket persistentes: Ciclo dinámico de entrada y salida de salas, gestionado por proyecto y por canal de mensajería directa.
  • Capa Redis Pub/Sub: Mensajería por WebSocket escalable horizontalmente entre instancias distribuidas de NestJS.
  • Presencia e indicadores: Seguimiento en tiempo real del estado en línea/ausente de los usuarios e indicadores de escritura efímeros.
  • Confirmaciones de lectura e insignias: Seguimiento asíncrono de mensajes no leídos y sincronización instantánea de notificaciones en el cliente.
  • Reacciones y uso compartido de archivos: Reacciones con emoji y contadores en vivo, adjuntos con arrastrar y soltar con vistas previas en lightbox y alertas de notificación persistentes.
  • Redis 7
  • NestJS Gateway
  • Motor de presencia
  • Pub/Sub
  • Reacciones con emoji
// 03 • Seguridad y autorización

Control de acceso basado en roles del espacio de trabajo

Un único sistema de roles estrictamente jerárquico — Propietario, Administrador, Miembro, Invitado — controla cada acción del espacio de trabajo, desde la capa de guards de la API hasta la interfaz, con administración de autoservicio para ascensos, descensos y transferencia de propiedad.

  • Roles jerárquicos: Niveles OWNER, ADMIN, MEMBER y GUEST asignados por espacio de trabajo y aplicados en cada mutación.
  • Guards y decoradores de NestJS: Guards declarativos @RequireWorkspaceRoles() evaluados en cada endpoint REST y en cada gateway de WebSocket.
  • Restricción por roles en el frontend: Los controles administrativos, como expulsar a un miembro, eliminar una columna y eliminar un proyecto, solo se muestran a los roles autorizados.
  • Flujos de invitación y de transferencia de propiedad: Invitaciones con rol asignado, ascenso y descenso de miembros, y transferencia completa de propiedad desde los ajustes del espacio de trabajo.
  • Guards de NestJS
  • RBAC del espacio de trabajo
  • JWT + HttpOnly Cookies
  • Administración de roles
// 04 • Almacenamiento y multimedia

Archivos, adjuntos y almacenamiento multimedia

Almacenamiento de objetos compatible con S3 que da soporte a una unidad de archivos del equipo, a los adjuntos de tareas y al contenido multimedia del chat — cerrando el círculo de sincronizar tareas, conversaciones y archivos en un solo lugar.

  • Subidas presigned: MinIO en desarrollo local, almacenamiento compatible con S3 en producción, con URL presigned para subidas directas desde el cliente.
  • Módulo de archivos del espacio de trabajo: Una unidad de archivos dedicada por espacio de trabajo, con vistas de cuadrícula/lista, vistas previas y descargas junto a los tableros y al chat.
  • Adjuntos de tareas y del chat: Subidas con arrastrar y soltar en las tareas y en el chat, con vistas previas en miniatura y un lightbox de imágenes.
  • Acceso limitado al espacio de trabajo: Las rutas de archivos y avatares están protegidas por autenticación y limitadas al espacio de trabajo, a diferencia del endpoint público de avatares.
  • MinIO
  • Almacenamiento compatible con S3
  • Subidas presigned
  • Salas de archivos
// 04. Desafíos y obstáculos

Obstáculos de ingeniería y soluciones

Principales obstáculos encontrados durante la orquestación en tiempo real con alta concurrencia

// 01 • Concurrencia en tiempo real

Condiciones de carrera y arrastrar y soltar concurrente

El obstáculo

La reordenación simultánea de tareas desde varios clientes con una indexación ingenua por enteros (1, 2, 3...) provocaba actualizaciones SQL en cascada, bloqueos mutuos y condiciones de carrera en las que las tarjetas saltaban de posición.

La resolución

Indexación fraccionaria de cadenas tipo Lexorank junto con bloqueo optimista mediante Redis. Al mover una tarjeta se calcula el rango medio exacto en tiempo O(1) sin modificar las filas vecinas, y las actualizaciones se difunden al instante por Socket.IO.

Impacto: Cero bloqueos de filas en la base de datos, reconciliación instantánea de la interfaz optimista y mutaciones de tableros sin conflictos entre varios usuarios.

  • Lexorank
  • Bloqueos con Redis
  • Indexación fraccionaria
  • Reordenación O(1)
// 02 • Autenticación y seguridad

Aislamiento de sesiones entre dominios y handshakes WSS

El obstáculo

El monorepo abarca crwsync.xyz, dash.crwsync.xyz y api.crwsync.xyz. Guardar los tokens en localStorage exponía la autenticación a XSS, mientras que las cookies estándar no se compartían entre subdominios y fallaban en la verificación de la actualización a WebSocket.

La resolución

Cookies de sesión firmadas criptográficamente, HttpOnly y SameSite=Lax, con el alcance Domain=.crwsync.xyz detrás de la terminación TLS de NGINX. Los gateways de WebSocket de NestJS inspeccionan y validan la cookie de sesión durante el handshake inicial de actualización HTTP.

Impacto: Se eliminó la exposición de los tokens a los scripts del cliente, se habilitó un SSO fluido entre subdominios y se aseguraron las conexiones de socket en tiempo real.

  • Cookies HttpOnly
  • Alcance de dominio
  • Handshake WSS
  • Mitigación de XSS
// 03 • DevOps e infraestructura

Saturación de memoria de los contenedores y despliegues sin tiempo de inactividad

El obstáculo

Las imágenes Docker del monorepo superaban 1,5 GB, con picos de memoria durante el SSR y la compilación, lo que arriesgaba cierres por OOM en producción y cortaba las conexiones WebSocket activas durante los despliegues.

La resolución

Dockerfiles multietapa con poda de Turborepo (turbo prune --scope=<app> --docker), reduciendo el tamaño de las imágenes por debajo de 120 MB. Servicios de Swarm orquestados con límites estrictos de memoria de 512 MB y actualizaciones progresivas (parallelism: 1, start-first order).

Impacto: Reducción del 90 % en el tamaño de las imágenes, consumo de RAM estrictamente acotado y despliegues progresivos fluidos sin tiempo de inactividad, sin ninguna conexión de socket perdida.

  • Turbo Prune
  • Docker Swarm
  • Actualizaciones progresivas
  • Tope de 512 MB de RAM
// 05. Stack tecnológico

Matriz de arquitectura full-stack

Desglose completo, capa por capa, de bibliotecas, controladores y frameworks

Monorepo
  • Turborepo
  • pnpm workspaces
  • TypeScript
Frontend y UI
  • Next.js 16
  • React 19
  • Tailwind CSS v4
  • Radix UI
  • @dnd-kit
  • TipTap
Backend y API
  • NestJS 11
  • Prisma 7
  • PostgreSQL 16
  • @prisma/adapter-pg
Tiempo real y WSS
  • Socket.IO
  • Redis 7 (adaptador Pub/Sub)
Colas en segundo plano
  • BullMQ
  • Broker de Redis
Almacenamiento y multimedia
  • MinIO (local)
  • Cloudflare R2 (prod)
Estado del cliente
  • Zustand
  • TanStack Query v5
Autenticación y seguridad
  • Passport.js (JWT/Local)
  • bcrypt
  • Cookies HttpOnly
Comunicaciones
  • Nodemailer
  • Plantillas Handlebars
Localización
  • Paquete i18n compartido
  • Inglés
  • Español
DevOps y despliegue
  • Docker
  • Docker Swarm
  • NGINX Reverse Proxy
  • GitHub Actions
  • Sentry
  • Playwright E2E
// 06. Ejecución local y evaluación

Pruébelo en vivo y reprodúzcalo en local

El portal web de crwsync.xyz está activo en producción. El panel de la aplicación está protegido por autenticación basada en sesión y por guards de organización multi-tenant, por lo que las credenciales de demostración no se publican — contácteme directamente para una demostración interactiva.

Todo el código fuente del monorepo es público, para la revisión del portafolio y la evaluación técnica. Puede ejecutar en local el stack completo y desacoplado: Docker Compose proporciona PostgreSQL, Redis y MinIO, y Turborepo inicia la API de NestJS y las dos aplicaciones 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

Avisos de evaluación y detalles de la simulación

  • Datos simulados del espacio de trabajo: Los equipos, proyectos, tareas Kanban y canales de chat de la demo de producción son datos de prueba precargados, para preservar la privacidad de la evaluación.
  • Motor en tiempo real en vivo: El gateway de WebSocket, el bus Redis 7 Pub/Sub, la API de NestJS y la base de datos PostgreSQL se ejecutan en vivo sobre infraestructura de producción contenerizada, con propagación real de eventos.
  • Licencia PolyForm Noncommercial: El código fuente es visible públicamente para estudio, aprendizaje y revisión del portafolio bajo la PolyForm Noncommercial License 1.0.0 — el uso comercial requiere una licencia aparte.

Descubra crwsync en acción

De acceso público para evaluación técnica, revisión de código e inspección de la arquitectura.