TaskFlow

TaskFlow

Tablero Kanban con colaboración en tiempo real, pensado para equipos pequeños que ya no caben en una hoja de cálculo.

Next.js 15TypeScriptSupabaseTailwind CSSdnd-kitVitest
Ver en vivoVer repositorio

El problema

Mi equipo llevaba el trabajo en una hoja de cálculo compartida que se rompía con conflictos de edición y no daba visibilidad real de quién hacía qué. Quería un tablero tan rápido como una hoja de cálculo, pero que se actualizara en vivo para todos.

Rol e impacto

Decisiones técnicas y desafíos

El tablero debía reflejar los movimientos de otros usuarios al instante, sin que el gesto de arrastre local saltara o se reiniciara a mitad de camino. Comparé aplicar las actualizaciones remotas directamente sobre el estado local contra encolarlas hasta que terminara el arrastre local.

Terminé encolando las actualizaciones remotas durante un arrastre local activo y aplicándolas justo después de soltar, porque aplicarlas a mitad de gesto causaba saltos visibles en conexiones más lentas.

Dos personas reordenando la misma columna al mismo tiempo podían producir posiciones de tarjeta en conflicto. Evalué last-write-wins contra un esquema de indexación fraccional.

Elegí indexación fraccional para el orden de las tarjetas, porque evita reescribir toda la columna y resuelve la mayoría de los movimientos concurrentes sin un "salto" visible.

Stack detallado

CapaTecnologíaPor qué
FrontendNext.js 15, dnd-kit, Tailwinddnd-kit da drag-and-drop accesible sin reinventarlo
BackendSupabase (Postgres + Realtime, RLS)Sincronización en vivo lista para usar, control de acceso con RLS
TestingVitest, React Testing LibraryCobertura del estado del tablero, permisos y lógica de reordenamiento

Galería

Tablero Kanban con tres columnas y tarjetasPanel de detalle de tarjeta con asignados y fecha límite

Qué haría diferente

Agregaría soporte offline desde el día uno en vez de asumir una conexión estable. La implementación actual pierde los movimientos encolados si se corta la conexión a mitad de un arrastre, lo cual es una limitación real en wifis de oficina inestables.