¡Bienvenidos a la Hackathon #2 de Desarrollo Basado en Plataformas! 🎉
TechFlow es una startup de gestión de proyectos que necesita un dashboard web para su plataforma de administración de tareas. Los equipos pueden crear proyectos, asignar tareas, hacer seguimiento del progreso y colaborar en tiempo real. Tu trabajo es construir la aplicación web frontend que consume su API existente.
Esta solución impacta directamente a equipos de productividad en todo el mundo al proporcionar una interfaz intuitiva para la coordinación de tareas, seguimiento de plazos y colaboración en equipo.
Construir una aplicación web interactiva y funcional usando React + TypeScript + Tailwind CSS que permita a los usuarios:
- Registrarse, iniciar sesión y gestionar su perfil
- Visualizar un dashboard con estadísticas de proyectos y tareas
- Crear, editar y eliminar proyectos
- Gestionar tareas con filtros avanzados (estado, prioridad, proyecto, usuario asignado)
- Asignar tareas a miembros del equipo
- Ver detalles completos de proyectos y tareas
- Colaborar con el equipo visualizando actividades y asignaciones
Todas las llamadas a la API requieren un token JWT válido en el header Authorization: Bearer <token> para garantizar la seguridad y privacidad de los datos.
- React 18+ con TypeScript
- React Router para navegación
- Tailwind CSS para estilos
- Axios o Fetch API para peticiones HTTP
- Pantallas de Login y Registro
- Gestión de token JWT
- Rutas protegidas (redirección a login si no está autenticado)
- Funcionalidad de logout
- Visualización de perfil de usuario
- Vista general con estadísticas (total de tareas, completadas, pendientes, vencidas)
- Acciones rápidas (crear tarea, ver proyectos)
- Feed de actividad reciente
- Listar todos los proyectos con paginación
- Crear nuevo proyecto (modal o página separada)
- Ver detalles de proyecto con tareas asociadas
- Actualizar información del proyecto
- Eliminar proyecto (con confirmación)
- Buscar/filtrar proyectos por nombre o estado
- Listar tareas con múltiples filtros:
- Por estado (TODO, IN_PROGRESS, COMPLETED)
- Por prioridad (LOW, MEDIUM, HIGH, URGENT)
- Por proyecto
- Por usuario asignado
- Crear tarea con validación de formulario
- Actualizar tarea (estado, prioridad, descripción, fecha límite)
- Eliminar tarea
- Asignar tarea a miembros del equipo
- Marcar tarea como completada
- Ver detalles de tarea (modal o página separada)
- Ver miembros del equipo
- Ver tareas asignadas a cada miembro
URL Base: https://cs2031-2025-2-hackathon-2-backend-production.up.railway.app/v1
Todos los endpoints autenticados requieren el header:
Authorization: Bearer <jwt_token>
| Método | Endpoint | Descripción | Body de Petición | Respuesta |
|---|---|---|---|---|
| POST | /auth/register |
Registrar nuevo usuario | { "email": "user@email.com", "password": "pass123", "name": "Juan Pérez" } |
{ "message": "Usuario creado exitosamente" } |
| POST | /auth/login |
Iniciar sesión | { "email": "user@email.com", "password": "pass123" } |
{ "token": "jwt_token", "user": { "id": "uuid", "email": "...", "name": "..." } } |
| GET | /auth/profile |
Obtener usuario actual | - | { "id": "uuid", "email": "...", "name": "...", "createdAt": "..." } |
| Método | Endpoint | Descripción | Body de Petición | Respuesta |
|---|---|---|---|---|
| GET | /projects?page=1&limit=10&search= |
Listar proyectos (paginado) | - | { "projects": [...], "totalPages": 5, "currentPage": 1 } |
| POST | /projects |
Crear proyecto | { "name": "Proyecto Alpha", "description": "...", "status": "ACTIVE" } |
{ "id": "uuid", "name": "...", ... } |
| GET | /projects/:id |
Obtener detalles de proyecto | - | { "id": "uuid", "name": "...", "tasks": [...] } |
| PUT | /projects/:id |
Actualizar proyecto | { "name": "Nombre Actualizado", "status": "COMPLETED" } |
{ "id": "uuid", ... } |
| DELETE | /projects/:id |
Eliminar proyecto | - | { "message": "Proyecto eliminado" } |
Estados de Proyecto: ACTIVE, COMPLETED, ON_HOLD
| Método | Endpoint | Descripción | Query Params | Body de Petición | Respuesta |
|---|---|---|---|---|---|
| GET | /tasks |
Listar todas las tareas | ?projectId=uuid&status=TODO&priority=HIGH&page=1&limit=20 |
- | { "tasks": [...], "totalPages": 3 } |
| POST | /tasks |
Crear tarea | - | { "title": "Implementar login", "description": "...", "projectId": "uuid", "priority": "HIGH", "dueDate": "2025-12-01", "assignedTo": "userId" } |
{ "id": "uuid", ... } |
| GET | /tasks/:id |
Obtener detalles de tarea | - | - | { "id": "uuid", "title": "...", "status": "IN_PROGRESS", ... } |
| PUT | /tasks/:id |
Actualizar tarea | - | { "status": "COMPLETED", "priority": "MEDIUM" } |
{ "id": "uuid", ... } |
| DELETE | /tasks/:id |
Eliminar tarea | - | { "message": "Tarea eliminada" } |
|
| PATCH | /tasks/:id/status |
Actualizar solo el estado de la tarea | - | { "status": "COMPLETED" } |
{ "id": "uuid", "status": "COMPLETED" } |
Estados de Tarea: TODO, IN_PROGRESS, COMPLETED
Prioridades: LOW, MEDIUM, HIGH, URGENT
| Método | Endpoint | Descripción | Respuesta |
|---|---|---|---|
| GET | /team/members |
Listar miembros del equipo | { "members": [{ "id": "uuid", "name": "...", "email": "..." }] } |
| GET | /team/members/:id/tasks |
Obtener tareas de un miembro | { "tasks": [...] } |
200 OK- GET/PUT/PATCH exitoso201 Created- POST exitoso204 No Content- DELETE exitoso400 Bad Request- Body de petición inválido401 Unauthorized- Token faltante o inválido403 Forbidden- Permisos insuficientes404 Not Found- Recurso no encontrado500 Internal Server Error- Error del servidor
- Configurar routing (React Router)
- Crear páginas de autenticación (Login/Registro)
- Implementar almacenamiento de JWT (localStorage/context)
- Crear wrapper de rutas protegidas
- Configurar instancia de Axios con interceptores
- Dashboard con estadísticas
- Lista de proyectos con paginación
- Operaciones CRUD de proyectos
- Lista de tareas con filtrado básico
- Operaciones CRUD de tareas
- Filtrado avanzado (estado, prioridad, búsqueda)
- Validación de formularios
- Estados de carga y manejo de errores
- Mejoras de UI y diseño responsive
- Funcionalidades de equipo
- Comienza con la autenticación - Todo depende de ella
- Crea componentes reutilizables - Button, Input, Modal, Card, etc.
- Usa React Context o custom hooks para el estado de autenticación
- Maneja estados de carga y error en todas partes
- Implementa actualizaciones optimistas de UI para mejor UX
- Usa variables de entorno para la URL de la API
- Agrega interfaces de TypeScript para todas las respuestas de la API
- Prueba casos extremos (estados vacíos, errores, texto largo)
src/
├── components/
│ ├── common/
│ │ ├── Button.tsx
│ │ ├── Input.tsx
│ │ ├── Modal.tsx
│ │ └── Card.tsx
│ ├── auth/
│ │ ├── LoginForm.tsx
│ │ └── RegisterForm.tsx
│ ├── projects/
│ │ ├── ProjectList.tsx
│ │ ├── ProjectCard.tsx
│ │ └── ProjectForm.tsx
│ └── tasks/
│ ├── TaskList.tsx
│ ├── TaskCard.tsx
│ └── TaskForm.tsx
├── pages/
│ ├── Login.tsx
│ ├── Register.tsx
│ ├── Dashboard.tsx
│ ├── Projects.tsx
│ └── Tasks.tsx
├── services/
│ ├── api.ts
│ ├── authService.ts
│ ├── projectService.ts
│ └── taskService.ts
├── context/
│ └── AuthContext.tsx
├── hooks/
│ ├── useAuth.ts
│ └── useApi.ts
├── types/
│ └── index.ts
└── utils/
└── constants.ts
- 🌙 Toggle de modo oscuro
- 🎯 Drag & drop de tareas para cambiar estado
- 🔄 Actualizaciones en tiempo real (polling cada 5s)
- 📊 Exportar tareas a CSV
- 💬 Sistema de comentarios en tareas
- 🔔 Notificaciones para fechas límite
- 📈 Dashboard de analíticas avanzado
- 🔍 Búsqueda global (proyectos + tareas)
- 📎 Adjuntar archivos a tareas
- 🏷️ Sistema de etiquetas/tags para tareas
- ✅ Repositorio público en GitHub con código completo
- ✅ README con instrucciones para correr la app localmente
- ✅ Link al deploy (Vercel, Netlify, etc.)
- ✅ (Opcional) Video demo mostrando la app funcionando (2-3 min)
Tu README debe incluir:
- Descripción breve del proyecto
- Instrucciones de instalación (
npm install) - Instrucciones para correr localmente (
npm run dev) - Link al deploy
- Tecnologías utilizadas
- Credenciales de prueba (si aplica)
- Features implementadas
- (Opcional) Screenshots de la aplicación
- Este proyecto es exclusivamente para plataforma web
- Deberán usar React con TypeScript obligatoriamente
- Tailwind CSS es requerido para los estilos
- No se permite el uso de librerías de componentes completas (Material-UI, Ant Design, etc.) - deben construir sus propios componentes
- La API está preconfigurada y lista para usar como "caja negra"
- El tiempo máximo es de 2 horas
- Trabajarán en equipos de 4-5 estudiantes
Esta hackathon está diseñada para evaluar su capacidad de:
- Integrar múltiples endpoints de una API REST
- Manejar autenticación y autorización
- Construir interfaces dinámicas y responsivas
- Gestionar estados complejos en React
- Trabajar bajo presión de tiempo
- Aplicar buenas prácticas de código
¡Estamos emocionados de ver lo que construirán! 🚀
Para dudas o soporte durante la hackathon, utilicen el canal oficial de Discord.
Con cariño, El equipo de CS2031 ❤️