Ir al contenido

Changelog

Registro de cambios significativos en el proyecto.

  • Server actions de board: listBoardsAction, getBoardByIdAction, renameBoardAction, deleteBoardAction (además de getBoardAction y createBoardAction)
  • Sidebar: nueva sección “Boards” con listado de tableros, crear (+), renombrar inline y eliminar con confirmación
  • Rutas: /kanban (primer board) y /kanban/[boardId] (board específico)
  • Seed enriquecido: 5 usuarios, 3 workspaces, boards poblados y 40 tareas de backlog

Kanban: toolbar y controles de vista (#90, #95, #104)

Sección titulada «Kanban: toolbar y controles de vista (#90, #95, #104)»
  • KanbanToolbar con búsqueda por título/descripción, filtros de prioridad y asignado
  • Ancho de columna (compact/normal/wide/extraWide), densidad de tarjetas y tamaño de letra, todo persistido en localStorage (syncro.kanban.view.v1)
  • Toggle de descripciones, “fill width” y limpiar filtros
  • Ordenación por columna (prioridad, fecha límite, título, fecha de creación)
  • TaskFormDialog para crear y editar tareas (título, descripción markdown, prioridad, asignados, fechas y estimación)
  • MarkdownEditor + MarkdownView (react-markdown + remark-gfm + rehype-raw) para las descripciones
  • TopBar unificada: UserControls, menú de usuario y controles consistentes

Pulido de tarjetas y fixes de drag & drop (#109, #113, #117, #118)

Sección titulada «Pulido de tarjetas y fixes de drag & drop (#109, #113, #117, #118)»
  • Asignados con avatares, creador y fecha de creación en las tarjetas, tooltips de edición
  • Fix: el hueco de arrastre sigue al puntero al mover tarjetas entre columnas
  • Fix: bucle infinito al arrastrar (drag-over con debounce de 50ms + columnAwareVerticalSortingStrategy)
  • Fix: desborde de tablas markdown en descripciones, tooltips de tableros, fecha de creación y tinte de columnas
  • formatDate extraído a lib/dates.ts (DRY) y helpers de color en lib/color.ts

Equipos: roles editables y estadísticas (#115)

Sección titulada «Equipos: roles editables y estadísticas (#115)»
  • updateMemberRoleAction: el OWNER cambia el rol de los miembros desde la página Teams
  • addMemberAction / removeMemberAction con validación de permisos (solo OWNER/ADMIN)
  • Estadísticas por miembro (tasksCreated y tasksAssigned) en MemberList
  • Leyenda visual de roles (OWNER/ADMIN/MEMBER)

Time tracking: calendario, estimación e imputación de horas (#119)

Sección titulada «Time tracking: calendario, estimación e imputación de horas (#119)»
  • Schema: modelo TimeEntry y campo Task.estimatedHours; Task.columnId ahora nullable (una tarea puede estar en backlog) con onDelete: SetNull
  • Backend en server/time-entry/: getTeamCalendarAction, getMyTimeAction, listLoggableTasksAction, logTimeAction, deleteTimeEntryAction
  • Frontend: CalendarGrid, DayDetail y MyTimeView con tabs Equipo / Mi tiempo
  • createTaskAction / updateTaskAction aceptan dueDate, startDate y estimatedHours
  • Métricas por tarea: invertido, desviación y % de estimación (computeTaskMetrics, función pura)
  • lib/dates.ts con serialización "YYYY-MM-DD" (componentes UTC)
  • CI: workflow de GitHub Actions con lint + typecheck bloqueantes en PRs a dev/main
  • Unit tests: Vitest configurado en apps/web; tests de user-service (verifyCredentials + registerUser) y time-entry-service (computeTaskMetrics)
  • Guía de aprendizaje de unit tests actualizada (ver Unit Tests)
  • Las docs pasan de Next.js a Astro + Starlight (estáticas, port 3001, deploy en Vercel)
  • Nueva página Calendario y horas
  • Guía de setup corregida (requisitos BD/env, pnpm dev:fallback, enlace a Discord)

Sistema de diseño: escala de radios tokenizada

Sección titulada «Sistema de diseño: escala de radios tokenizada»
  • Escala de radios restaurada en globals.css: sm=6px, md=10px, lg=14px, xl=20px, pill=999px
  • rounded-fullrounded-pill en toda la app (118 usos) para usar el token pill
  • Estandarización por tipo de componente: inputs/botones/diálogos → md (10px), dropdowns/menús → lg (14px), superficies grandes (kanban, landing) → xl (20px), elementos circulares → pill
  • Eliminados valores arbitrarios (rounded-[8px]) y radios no mapeados a tokens (rounded-2xl, rounded-full)
  • .gitignore documenta la convención de archivos de contexto de agentes (AGENTS.md, *.md de agentes) (#121)
  • Nueva guía GitHub CLI

Kanban board completo con drag & drop (ee2da54)

Sección titulada «Kanban board completo con drag & drop (ee2da54)»
  • Implementación del tablero Kanban con @dnd-kit (core + sortable + utilities)
  • KanbanBoard con DndContext, DragOverlay, optimistic updates y persistencia vía server actions
  • KanbanColumn dropeable: nombre editable inline, selector de 7 colores, contador de tareas, confirm dialog al eliminar
  • TaskCard sortable: dropdown de prioridad (LOW→MEDIUM→HIGH→URGENT), asignación con avatares toggle, descripción expandible, confirm inline al eliminar
  • CreateTaskDialog: modal con título, descripción, prioridad y selector de miembros
  • ConfirmDialog: modal reutilizable de confirmación con variante destructiva
  • Server actions: createColumnAction, updateColumnNameAction, updateColumnColorAction, deleteColumnAction
  • Validaciones: mínimo 3 columnas, máximo 7 columnas por board
  • Servicio con posicionamiento automático y colores por defecto
  • Server actions: createTaskAction, updateTaskAction, moveTaskAction, deleteTaskAction, toggleAssigneeAction
  • Validación Zod en creación (título requerido, descripción opcional, prioridad por enum)
  • Normalización de posiciones al mover/eliminar tareas
  • getBoardAction: obtiene board con eager loading de columnas, tareas y asignados
  • Servicio y repositorio en server/board/
  • Sidebar: eliminado WorkspaceSelector, ya no recibe workspaces/activeWorkspace (más angosta)
  • TopBar: nuevo dropdown inline de workspaces en el breadcrumb, botón “Invitar” con copiar enlace
  • WorkspaceSelector.tsx: eliminado (código muerto)
  • layout.tsx: pasa workspaces/activeWorkspace/locale a TopBar
  • DeleteWorkspaceDialog con confirmación escribiendo “ELIMINAR”
  • Solo visible para rol OWNER
  • Server action deleteWorkspaceAction en workspace-actions
  • 2 usuarios: Usuario Demo + María García (maria@syncro.app, pass: demo1234)
  • 2 workspaces con 5 columnas cada uno y tareas con descripciones realistas
  • “Proyecto Alpha”: 9 tareas con prioridades y asignaciones variadas
  • “Diseño UX”: 6 tareas + 2 comentarios
  • Nuevo namespace kanban con todas las claves del tablero (30+ claves)
  • Claves workspace.deleteWorkspace* para el diálogo de eliminación
  • Fix: sidebar.teams → singular (Equipo/Team)
  • Nuevo diseño del dashboard con estadísticas, tips y layout compacto
  • Tarjetas de roadmap con hover refinado y diseño mejorado
  • Componentes WelcomeBanner, RoadmapSection, RoadmapCard

Settings con datos reales + sesión en perfil (c207b08)

Sección titulada «Settings con datos reales + sesión en perfil (c207b08)»
  • Settings ahora carga datos reales del workspace desde la DB (nombre, descripción, slug)
  • Perfil muestra datos de sesión real en lugar de hardcoded
  • Edición de perfil funcional con server action editProfileAction
  • Configuración de equipo: selector de rol por defecto y toggle de invitaciones (269ac7b)

Validación Zod en formularios de auth (8290e4c)

Sección titulada «Validación Zod en formularios de auth (8290e4c)»
  • Validación Zod v4 en login y register
  • noValidate en formularios para evitar validación nativa del navegador
  • Corrección de sección errors faltante en mensajes de auth.register
  • Página de selección de workspaces unificada con el design system
  • Estados vacío y grid rediseñados con los componentes Button y Card
  • Botón “Copiar enlace” en la URL del workspace en settings, con feedback visual
  • Botón “Invitar” en la TopBar ahora funcional: despliega menú con “Copiar enlace” (con feedback) y placeholder para “Invitar miembros”
  • Nuevas claves i18n: copyLink, linkCopied, inviteMembers
  • Nueva página /forgot-password con formulario
  • Traducción de aria-labels en el header
  • Estados vacíos para las páginas de teams y home
  • Mensajes informativos y llamadas a la acción cuando no hay datos

i18n: migración de textos hardcoded (8e4df63)

Sección titulada «i18n: migración de textos hardcoded (8e4df63)»
  • Migración de cadenas estáticas en layout y componentes de autenticación al sistema de mensajes
  • Corrección de breadcrumbs i18n y enlaces rotos (03476d5)
  • Mejora visual de la página 404 con colores del tema
  • Mensajes con humor temático del kanban
  • Nuevo modal CreateWorkspaceModal con formulario para crear workspaces
  • Server action createWorkspaceAction con validación Zod
  • Botones “Crear nuevo workspace” habilitados en estado vacío y grid de workspaces
  • Seeder de Prisma (prisma/seed.ts) con usuario demo y 2 workspaces de prueba
  • Documentación del seeder y del modal en docs
  • Sistema de tema oscuro/claro con ThemeProvider y contexto de React
  • ThemeToggle con iconos de sol/luna y animación de transición
  • Persistencia en localStorage y detección de preferencia del sistema
  • Clases dark: en todos los componentes del landing y workspace
  • Nuevo layout de workspace post-autenticación con ruta /[locale]/home
  • Sidebar colapsable con iconos y navegación (Home, Kanban, Calendar, Teams, Chat, Settings)
  • TopBar con información del usuario y breadcrumbs
  • Páginas placeholder para todas las secciones del workspace
  • Sistema de rutas protegidas separado del landing público
  • Nueva paleta de colores y sistema de tipografía con Geist
  • Rediseño de componentes: Button (variantes primary/secondary/ghost, tamaños sm/md/lg, soporte de iconos)
  • Card con borde gradient interactivo
  • Badge para estados (planned/building/ready)
  • Migración completa a Tailwind CSS v4
  • Eliminación de módulos CSS (*.module.css)
  • Migración de todos los estilos a clases utilitarias de Tailwind
  • PostCSS con @tailwindcss/postcss
  • Configuración de NextAuth v5 beta con PrismaAdapter
  • Google OAuth con persistencia de locale post-login
  • Páginas de Login y Register con diseño responsive
  • SessionProvider para componentes cliente
  • Separación de rutas públicas y autenticadas con route groups
  • Credentials provider con email + contraseña usando bcryptjs
  • Registro con validación de Zod v4
  • Hashing de contraseñas en la capa de servicio
  • Auto-login tras registro exitoso
  • Creación transaccional de usuario + workspace personal
  • Mapeo de errores de Zod a códigos i18n
  • Sin verificación de email en el MVP
  • Configuración de next-intl con detección automática de idioma
  • Soporte para español e inglés
  • middleware.ts para redirección basada en Accept-Language y cookie NEXT_LOCALE
  • Sistema de mensajes JSON con estructura de namespaces
  • LocaleSwitcher en el header
  • Hero asimétrico con bento grid y animaciones scroll reveal
  • Header sticky con menú hamburguesa en mobile
  • Sección de features con iconos animados
  • Footer con copyright, contacto y enlace a GitHub
  • Configuración de Turborepo con workspaces pnpm
  • Prisma 7 con PostgreSQL (Neon + Docker local)
  • Schema inicial: User, Account, Session, VerificationToken
  • Configuración de ESLint y TypeScript compartida
  • Scripts de desarrollo y despliegue