Plataforma profesional de gestion de proyectos Scrum con asistente de IA integrado, analiticas en tiempo real y soporte multi-idioma.
- Descripcion general
- Funcionalidades principales
- Stack tecnologico
- Arquitectura del proyecto
- Instalacion y configuracion
- Scripts disponibles
- Modelo de datos
- Sistema de permisos
- Integracion con IA
- Internacionalizacion
- Versionado y releases
- Despliegue
- Testing
Planning Task es una aplicacion web completa para la gestion agil de proyectos basada en la metodologia Scrum. Permite a equipos de desarrollo gestionar proyectos, sprints, tareas, bugs y propuestas con un flujo de trabajo completo, desde la planificacion hasta la entrega.
La aplicacion incluye un asistente de IA basado en Gemini que puede crear tareas, consultar datos del proyecto y ayudar en la planificacion directamente desde un chat integrado. Ademas, cuenta con un dashboard analitico completo con mas de 12 graficos interactivos y vistas Kanban y tabla para la gestion visual de tareas.
- Crear, editar y eliminar proyectos con descripcion, fechas, repositorios y tech stack
- Gestionar miembros del proyecto con roles (Owner, Admin, Member, Viewer)
- Invitar miembros por email con flujo de aceptacion/rechazo
- Estadisticas del proyecto: tareas totales, completadas, progreso
- CRUD completo con User Stories (Como.../Quiero.../Para...)
- Criterios de aceptacion y plan de implementacion
- Puntos de negocio y desarrollo (escala Fibonacci: 1, 2, 3, 5, 8, 13)
- Prioridad automatica calculada como
bizPoints / devPoints - Asignacion de desarrollador principal y co-desarrollador
- Vista Kanban con drag & drop entre columnas (To-Do, In Progress, To Validate, Done)
- Vista Tabla con ordenamiento por columnas y filtros avanzados
- Filtros por desarrollador, estado, sprint y busqueda por texto
- Adjuntos de archivos (Firebase Storage)
- Historial completo de cambios (audit trail)
- Comentarios con soporte de @menciones
- Borradores automaticos para tareas en progreso
- Crear, editar y eliminar epics con titulo, descripcion, color y fechas
- Agrupar tareas por funcionalidad o feature
- Barra de progreso visual por epic
- Selector de epic integrado en el modal de tareas
- Badge de epic con color en las TaskCards del Kanban
- Filtro por epic en los filtros de tareas
- Crear, editar y eliminar sprints con fechas de inicio y fin
- Estados: Planned, Active, Completed
- Asignar tareas a sprints
- Metricas de sprint: tareas, puntos totales
- Retrospectiva de sprint con notas y feedback del equipo
- Reportar bugs con titulo, descripcion y severidad (Critical, High, Medium, Low)
- Estados: Open, In Progress, Resolved, Closed
- Asignacion a desarrolladores
- Miembros pueden proponer nuevas tareas
- Owners/Admins revisan y aprueban o rechazan
- Propuestas aprobadas se convierten automaticamente en tareas
- Vistas: Mes, Semana, Dia, Agenda
- Drag & drop para reprogramar tareas
- Redimensionar duracion de tareas arrastrando bordes
- Colores por estado de tarea y sprints
- Filtro multi-proyecto
- Soporte para idiomas ES/EN
| Grafico | Descripcion |
|---|---|
| KPIs | Tasa de completado, velocidad promedio, resolucion de bugs, sprints activos |
| Sprint Chart | Lineas de puntos de negocio vs desarrollo por sprint |
| Developer Performance | Barras de tareas completadas vs pendientes por developer |
| Task Completion | Progreso general de completado de tareas |
| Task State Distribution | Grafico de tarta con tareas por estado |
| Overdue Tasks | Lista de tareas vencidas |
| Team Velocity | Tendencia de velocidad del equipo por sprint |
| Developer Workload | Distribucion de carga de trabajo |
| Sprint Burndown | Puntos restantes vs completados durante el sprint |
| Bugs Severity | Distribucion de bugs por severidad |
| Activity Heatmap | Mapa de calor de actividad por fecha |
| Sprint Timeline | Linea temporal de sprints |
| Developer Performance Metrics | Metricas avanzadas individuales por developer |
| Achievement Badges | Grid de logros con filtro por categoria y barra de progreso |
| Leaderboard | Ranking del equipo mensual/trimestral/total con puntuacion |
- 14 logros en 4 categorias: Productividad, Calidad, Colaboracion, Constancia
- Evaluacion automatica al completar tareas y cerrar bugs
- Badges visuales con filtro por categoria y barra de progreso
- Leaderboard mensual, trimestral y total del equipo
- Puntuacion basada en devPoints + bugs resueltos + logros desbloqueados
- Notificacion toast y persistente al desbloquear un logro
- Datos almacenados en Firebase RTDB (
userAchievements/{userId})
- Service Worker para cacheo de assets estaticos (network-first strategy)
- Indicador visual "Offline" en el header con animacion de pulso
- Firebase RTDB maneja cola de operaciones pendientes automaticamente
- Notificacion toast al reconectarse con sincronizacion automatica
- Reglas de automatizacion configurables por proyecto
- Disparadores por cambio de estado de tarea o bug
- Acciones: notificar, cambiar estado, asignar developer
- Editor visual de reglas con diagrama de flujo (@xyflow/react)
- Guardar tareas como templates reutilizables
- Aplicar templates al crear nuevas tareas
- Incluye User Story, criterios, puntos y plan de implementacion
- Guardar combinaciones de filtros como vistas personalizadas
- Restaurar filtros rapidamente desde un selector
- Temporizador integrado por tarea
- Widget de timer activo visible en todo el dashboard
- Registro de tiempo dedicado por tarea
- Pagina dedicada de standup por proyecto
- Formato: que hice ayer, que hare hoy, bloqueos
- Historial de standups anteriores
- Notificaciones en tiempo real via Firebase
- Tipos: asignacion de tareas, cambios de estado, comentarios, menciones, invitaciones, logros
- Centro de notificaciones con marcar como leido
- Push notifications con toast
- Vista de todos los miembros del equipo
- Perfiles con avatar e informacion de contacto
- Gestion de roles por proyecto
- Chat integrado con Google Gemini 2.5-Flash
- 21 herramientas de funcion para operar sobre el proyecto
- Puede crear tareas, sprints, bugs, consultar datos, generar analiticas
- Historial de conversaciones persistente
- Pool de API keys con control de cuotas (RPM/RPD)
- Generacion automatica de User Stories desde un titulo
- Modo oscuro y modo claro
- Persistencia del tema en localStorage
- Deteccion de preferencia del sistema
- Soporte completo para Ingles (EN) y Espanol (ES)
- Selector de idioma en el header
- Preferencia guardada en perfil de Firebase y localStorage
- Todas las paginas traducidas
| Tecnologia | Version | Uso |
|---|---|---|
| Next.js | 14.2.35 | Framework React con App Router |
| React | 18.3.1 | Libreria UI |
| TypeScript | 5.9.3 | Tipado estatico |
| CSS Modules | - | Estilos encapsulados por componente |
| Recharts | 3.7.0 | Graficos del dashboard |
| react-big-calendar | 1.19.4 | Vista de calendario |
| @dnd-kit | 6.3.1 | Drag & drop (Kanban) |
| react-hook-form | 7.71.1 | Gestion de formularios |
| Zod | 4.3.6 | Validacion de schemas |
| Lucide React | 0.574.0 | Iconos |
| react-hot-toast | 2.6.0 | Notificaciones toast |
| i18next | 25.8.14 | Internacionalizacion |
| react-markdown | 10.1.0 | Renderizado Markdown |
| @xyflow/react | 12.10.0 | Diagramas de flujo |
| Tecnologia | Version | Uso |
|---|---|---|
| Firebase Auth | 12.9.0 | Autenticacion (email + Google OAuth) |
| Firebase Realtime DB | 12.9.0 | Base de datos en tiempo real |
| Firebase Storage | 12.9.0 | Almacenamiento de archivos |
| Firebase Admin SDK | 13.6.1 | Operaciones server-side |
| Google Generative AI | 0.24.1 | Chatbot IA (Gemini) |
| Tecnologia | Version | Uso |
|---|---|---|
| Jest | 30.2.0 | Testing |
| @testing-library/react | 16.3.2 | Testing de componentes |
| semantic-release | 25.0.3 | Versionado automatico |
| Husky | 9.1.7 | Git hooks |
| commitlint | 20.4.1 | Validacion de commits |
| Docker | - | Contenedorizacion |
| GitHub Actions | - | CI/CD |
planning-task/
|-- app/ # Next.js App Router
| |-- (dashboard)/ # Layout protegido (requiere auth)
| | |-- layout.tsx # Header, Sidebar, AuthGuard
| | |-- dashboard/page.tsx # Dashboard con KPIs, graficos, logros y leaderboard
| | |-- calendar/page.tsx # Calendario interactivo
| | |-- my-work/page.tsx # Vista personal de tareas asignadas
| | |-- projects/
| | | |-- page.tsx # Lista de proyectos
| | | |-- [projectId]/
| | | |-- page.tsx # Detalle: tareas, bugs, propuestas
| | | |-- sprints/page.tsx # Gestion de sprints
| | | |-- sprints/[sprintId]/retro/page.tsx # Retrospectiva
| | | |-- standup/page.tsx # Daily standup
| | | |-- workflows/page.tsx # Reglas de automatizacion
| | | |-- epics/page.tsx # Gestion de epics
| | |-- team/page.tsx # Gestion del equipo
| | |-- profile/page.tsx # Perfil de usuario
| |-- api/
| | |-- chat/ # Endpoints del chatbot IA
| | |-- tasks/generate-ai/ # Generacion IA de User Stories
| | |-- version/ # Endpoint de version
| | |-- changelog/ # Endpoint del changelog
| |-- login/page.tsx # Autenticacion
| |-- layout.tsx # Layout raiz
|
|-- components/
| |-- auth/ # LoginForm, AuthGuard
| |-- chat/ # ChatPanel, ChatFab, ChatMessage, ChatInput, ChatHistory
| |-- dashboard/ # Header, KPIs, SprintChart, DeveloperPerformance, +12 graficos,
| | # AchievementBadges, Leaderboard, AchievementToast, OfflineIndicator
| |-- tasks/ # TaskModal, TaskForm, TaskKanban, TaskCard, TaskTable, Filters,
| | # TimeTracker, SubtaskList, DependencySelector, EpicSelector
| |-- sprints/ # SprintForm, SprintCard
| |-- bugs/ # BugModal, BugForm, BugsList, BugCard
| |-- proposals/ # ProposalModal, ProposalForm, ProposalsList, ProposalCard
| |-- projects/ # MembersManager, ProjectEditModal
| |-- ui/ # Button, Card, Modal, Input, Select, Badge, Spinner, CommandPalette
| |-- layout/ # Navbar, Sidebar, TabsBar
| |-- common/ # UpdateNotification, Providers
|
|-- hooks/ # Custom React Hooks
| |-- useAuth.ts # Autenticacion Firebase
| |-- useTasks.ts # CRUD tareas + listeners real-time
| |-- useProjects.ts # CRUD proyectos
| |-- useSprints.ts # CRUD sprints
| |-- useBugs.ts # CRUD bugs
| |-- useProposals.ts # Gestion de propuestas
| |-- useComments.ts # Comentarios de tareas
| |-- useNotifications.ts # Notificaciones real-time
| |-- useChat.ts # Chat con IA
| |-- usePermissions.ts # RBAC por proyecto
| |-- useTaskDrafts.ts # Borradores de tareas
| |-- useTaskTemplates.ts # Templates reutilizables de tareas
| |-- useSavedViews.ts # Vistas guardadas con filtros
| |-- useEpics.ts # CRUD epics (agrupacion por feature)
| |-- useAchievements.ts # Logros y badges del usuario
| |-- useWorkflowRules.ts # Reglas de automatizacion
| |-- useWorkflowEngine.ts # Motor de ejecucion de workflows
| |-- useOnlineStatus.ts # Deteccion offline/online
| |-- useServiceWorker.ts # Gestion de Service Worker
| |-- useTheme.ts # Tema oscuro/claro
| |-- useLocalStorage.ts # Persistencia local
| |-- useFilters.ts # Logica de filtros
| |-- useFileUpload.ts # Subida de archivos
| |-- useVersionCheck.ts # Verificacion de version
| |-- useChangelog.ts # Carga del changelog
| |-- useInvitations.ts # Invitaciones a proyectos
|
|-- lib/
| |-- firebase/ # config.ts (cliente), admin.ts (server)
| |-- services/ # task, project, sprint, bug, user, comment, notification,
| | # chat (Gemini), ai-tools, storage, model-pool, quota-tracker,
| | # achievement, workflow
| |-- auth/ # validateSession.ts, validateProjectAccess.ts
| |-- utils/ # calculations, formatters, validators, cn, colors, errorHandler
| |-- constants/ # appVersion, fibonacciPoints, taskStates
| |-- i18n/ # config.ts (i18next setup)
|
|-- contexts/
| |-- LanguageContext.tsx # Proveedor de idioma
|
|-- types/ # Interfaces TypeScript
| |-- task.ts, project.ts, sprint.ts, user.ts, bug.ts,
| |-- proposal.ts, notification.ts, comment.ts, draft.ts,
| |-- filters.ts, invitation.ts, epic.ts, achievement.ts, index.ts
|
|-- locales/
| |-- en.json # Traducciones ingles
| |-- es.json # Traducciones espanol
|
|-- __tests__/ # Tests con Jest
|-- public/ # Assets estaticos
|-- .github/workflows/ # GitHub Actions (release, docker-build)
- Node.js >= 18
- npm >= 9
- Cuenta de Firebase con proyecto configurado
- API Key de Google Generative AI (Gemini)
git clone https://github.com/SergioRVDev/planning-task.git
cd planning-tasknpm installCrear un archivo .env.local en la raiz del proyecto:
# Firebase Client
NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_DATABASE_URL=https://your_project.firebaseio.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
# Firebase Admin (server-side)
FIREBASE_ADMIN_PROJECT_ID=your_project_id
FIREBASE_ADMIN_CLIENT_EMAIL=your_service_account_email
FIREBASE_ADMIN_PRIVATE_KEY="your_private_key"
# Google Gemini AI
GEMINI_API_KEY=your_gemini_api_key
# Opcional: multiples keys separadas por coma para pool
GEMINI_API_KEYS=key1,key2,key3
# App
NEXT_PUBLIC_APP_URL=http://localhost:3300npm run devLa aplicacion estara disponible en http://localhost:3300
| Script | Comando | Descripcion |
|---|---|---|
dev |
next dev -p 3300 |
Inicia servidor de desarrollo |
build |
next build |
Build de produccion |
start |
next start -p 3300 |
Inicia servidor de produccion |
lint |
next lint |
Ejecuta ESLint |
test |
jest |
Ejecuta tests |
test:watch |
jest --watch |
Tests en modo watch |
test:coverage |
jest --coverage |
Tests con reporte de cobertura |
/projects/{projectId}
|-- name, description, status
|-- startDate, endDate
|-- members: { uid: { role, addedAt, addedBy } }
|-- repositories: [{ url, type, isDefault }]
|-- languages, frameworks
/tasks/{taskId}
|-- title, projectId, sprintId
|-- status: to-do | in-progress | to-validate | validated | done
|-- userStory: { who, what, why }
|-- bizPoints, devPoints, priority
|-- developer, coDeveloper
|-- acceptanceCriteria: string[]
|-- implementationPlan: { approach, steps, risks, ... }
|-- attachments: [{ id, name, url, storagePath }]
|-- history: { timestamp: { field, oldValue, newValue, changedBy } }
/sprints/{sprintId}
|-- name, projectId, startDate, endDate
|-- status: planned | active | completed
/bugs/{bugId}
|-- title, description, projectId
|-- severity: critical | high | medium | low
|-- status: open | in-progress | resolved | closed
|-- assignedTo, createdBy
/proposals/{proposalId}
|-- title, projectId, userStory, acceptanceCriteria
|-- bizPoints, devPoints
|-- status: pending | accepted | rejected
/users/{uid}
|-- email, displayName, photoURL
|-- role: admin | developer
|-- language: en | es
/notifications/{userId}/{notificationId}
|-- title, message, type, read, date, link
/comments/{taskId}/{commentId}
|-- text, userId, userName, timestamp, mentions
/invitations/{invitationId}
|-- projectId, invitedUserId, invitedUserEmail
|-- senderId, status: pending | accepted | rejected
/tasks-drafts/{userId}/{draftId}
|-- projectId, formData, updatedAt
/epics/{epicId}
|-- title, description, color, projectId
|-- startDate, endDate, taskIds[]
|-- createdAt, updatedAt
/userAchievements/{userId}/{achievementId}
|-- achievementId, unlockedAt, projectId
/workflow-rules/{ruleId}
|-- projectId, name, trigger, conditions, actions
|-- enabled, createdAt
Control de acceso basado en roles (RBAC) a nivel de proyecto:
| Permiso | Owner | Admin | Member | Viewer |
|---|---|---|---|---|
| Ver proyecto | Si | Si | Si | Si |
| Editar proyecto | Si | Si | No | No |
| Eliminar proyecto | Si | No | No | No |
| Gestionar miembros | Si | Si | No | No |
| Crear tareas | Si | Si | Si | No |
| Editar tareas | Si | Si | Si | No |
| Eliminar tareas | Si | Si | No | No |
| Crear sprints | Si | Si | Si | No |
| Eliminar sprints | Si | Si | No | No |
| Crear bugs | Si | Si | Si | No |
| Eliminar bugs | Si | Si | No | No |
| Aprobar propuestas | Si | Si | No | No |
| Crear propuestas | Si | Si | Si | No |
El asistente de IA esta integrado en la pagina de detalle del proyecto y puede:
- Consultar datos: listar proyectos, sprints, tareas, bugs, miembros
- Crear recursos: tareas, sprints, bugs con datos completos
- Modificar datos: actualizar estados de tareas, asignar developers, mover tareas a sprints
- Analiticas: obtener dashboard del proyecto, burndown de sprint, busquedas avanzadas
El endpoint /api/tasks/generate-ai genera automaticamente:
- User Story completa (Como.../Quiero.../Para...)
- Criterios de aceptacion
- Puntos de negocio y desarrollo estimados
- Soporte para multiples API keys con balanceo de carga
- Control de cuotas por minuto (RPM) y por dia (RPD)
- Rotacion automatica entre keys cuando una alcanza su limite
La aplicacion soporta dos idiomas:
- Espanol (ES) - Idioma por defecto
- Ingles (EN)
- Dashboard (KPIs, graficos, estadisticas)
- Lista de proyectos
- Detalle del proyecto (tareas, bugs, propuestas)
- Equipo
- Header y navegacion
- Calendario
- Modales de confirmacion
- Mensajes toast (exito/error)
i18next+react-i18nextpara gestion de traduccionesLanguageContextcomo proveedor de estado del idioma- Archivos de traduccion en
locales/es.jsonylocales/en.json - Persistencia en
localStoragey perfil de Firebase
El proyecto usa semantic-release con Conventional Commits:
| Tipo de commit | Efecto en version | Ejemplo |
|---|---|---|
feat: |
MINOR (1.0.0 -> 1.1.0) | feat: add kanban view |
fix: |
PATCH (1.0.0 -> 1.0.1) | fix: resolve drag drop bug |
feat!: / BREAKING CHANGE: |
MAJOR (1.0.0 -> 2.0.0) | feat!: redesign API |
chore:, docs:, refactor: |
Sin incremento | chore: update deps |
- Developer hace commit con formato convencional
- Push a rama
main - GitHub Actions ejecuta
semantic-release - Se actualiza
package.json,CHANGELOG.md, tags y GitHub Release - Version inyectada en UI via
NEXT_PUBLIC_APP_VERSION
.releaserc.json- Configuracion de semantic-release.commitlintrc.json- Reglas de validacion de commits.github/workflows/release.yml- Workflow de GitHub Actions
docker build -t planning-task .
docker run -p 3300:3300 planning-taskLa aplicacion incluye soporte para despliegue en Kubernetes con:
- Multi-stage Docker builds
- Tags semanticos para imagenes
- GitHub Actions para build automatico de imagenes
Todas las variables listadas en la seccion de Configuracion deben estar disponibles en el entorno de produccion.
# Ejecutar todos los tests
npm test
# Modo watch
npm run test:watch
# Con cobertura
npm run test:coverage- Componentes UI (Button, Input, Badge, Card, TaskCard, TaskForm, Chat)
- Hooks (useFilters, useTheme, useChat, useInvitations)
- Servicios (chat.service, model-pool, auth validation)
- Utilidades (formatters, calculations, validators, errorHandler)
Este proyecto esta inspirado en pgamexp.com de manufosela.
Sergio Ramos - GitHub
Proyecto privado. Todos los derechos reservados.