Este proyecto consiste en un backend en NestJS y un frontend en Next.js para administrar tareas con autenticación JWT, manejo de sesiones vía cookies y una interfaz moderna usando TailwindCSS y shadcn/ui.
-
Backend:
- NestJS con TypeORM y PostgreSQL.
- Cache con Redis para mejor rendimiento.
- Autenticación con JWT y Passport.
- WebSockets para actualizaciones en tiempo real.
- Protección de endpoints con Guards y Rate Limiting.
- Documentación de la API con Swagger en
/docs. - Health check endpoint en
/health.
-
Frontend:
- Next.js 15 con App Router.
- Interfaz con TailwindCSS y componentes de shadcn/ui.
- Autenticación con JWT y cookies, protección de páginas a través de
middleware.ts. - Conexión WebSocket para notificaciones en tiempo real.
- Diseño responsive y experiencia de usuario moderna.
-
Contenedores Docker para un despliegue sencillo:
- Backend (NestJS)
- Frontend (Next.js)
- Base de datos (PostgreSQL)
- Cache (Redis)
- Monitoreo (Portainer)
-
CI/CD con GitHub Actions
- Tests automatizados en cada PR.
- Build y push a DockerHub en merge a
main. - Multi-stage builds optimizados.
- Docker instalado.
- Docker Compose (la mayoría de instalaciones de Docker Desktop ya lo incluyen).
- (Opcional) Node.js 20+ si deseas ejecutar el proyecto fuera de Docker.
Crea un archivo .env en la raíz del proyecto copiando el ejemplo:
cp .env.example .envContenido del .env:
# Base de datos
DB_HOST=postgres
DB_PORT=5432
DB_NAME=db_task_manager
DB_USER=postgres
DB_PASSWORD=tu_password_segura
# JWT
JWT_SECRET=tu_secreto_jwt_seguro
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_TTL=300
# Rate Limiting
THROTTLE_TTL=60000
THROTTLE_LIMIT=100
# Mail (opcional)
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USER=
MAIL_PASSWORD=
MAIL_FROM=noreply@example.comClona este repositorio:
git clone https://github.com/Rumazor/task-manager
cd task-manager
Crea tu archivo .env en la raíz:
cp .env.example .env
Construye e inicia los contenedores:
docker compose up -d
| Servicio | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend API | http://localhost:3001 |
| Swagger Docs | http://localhost:3001/docs |
| Portainer | http://localhost:9000 |
Para iniciar con datos de prueba, ejecuta el script de seed:
./seed.sh
O manualmente:
docker compose exec nestjs npm run seed
Cuentas de prueba creadas:
| Rol | Contraseña | |
|---|---|---|
| Admin | admin@test.com | password123 |
| Manager | manager@test.com | password123 |
| Usuario | john@test.com | password123 |
| Usuario | jane@test.com | password123 |
| Usuario | bob@test.com | password123 |
Datos generados por el seed:
- 5 usuarios (1 admin, 1 manager, 3 usuarios regulares)
- 3 proyectos
- 5 etiquetas
- 17 tareas (incluyendo subtareas y asignaciones)
POST /auth/login- Inicia sesión y devuelve un JWT.POST /auth/register- Crea un usuario nuevo.GET /tasks- Lista las tareas (requiere autenticación).POST /tasks- Crea una tarea (requiere autenticación).PATCH /tasks/:id- Actualiza una tarea específica.DELETE /tasks/:id- Elimina la tarea.GET /health- Health check del servidor.
Swagger: La documentación completa está disponible en /docs.
Portainer está incluido para monitorear los contenedores:
- Abre http://localhost:9000
- Crea un usuario admin (primera vez)
- Selecciona "local" environment
- Ve a "Containers" para ver logs y stats
Login:
- Se envían las credenciales al backend (
/auth/login). - Si es correcto, el backend responde con un JWT y/o setea una cookie.
Middleware en Next.js (middleware.ts):
- Antes de acceder a la ruta protegida (
/dashboard) se verifica la cookie y JWT. - Si no estás autenticado, redirige a
/.
# Ver logs en tiempo real
docker compose logs -f nestjs
# Reiniciar un servicio
docker compose restart nestjs
# Reconstruir un servicio
docker compose build nestjs && docker compose up -d nestjs
# Ejecutar tests
docker compose run --rm nestjs-test npm test
# Detener todo
docker compose down
# Detener y eliminar volúmenes
docker compose down -vSi deseas ejecutar el backend sin Docker:
cd backend
npm install
npm run start:dev
# En el .env usar DB_HOST=localhost
Si quieres ejecutar el frontend sin Docker:
cd frontend
npm install
npm run dev
# En el .env usar BASE_API_URL="http://localhost:3001"
El pipeline se ejecuta automáticamente:
- En Pull Requests: Ejecuta tests
- En merge a main: Tests + Build + Push a DockerHub
El Dockerfile usa multi-stage builds optimizados:
- Imagen base
node:20-alpine(ligera) - Stage
testpara CI con devDependencies - Stage
productionsolo con dependencias de producción
- Para modificar los estilos globales, revisa
frontend/tailwind.config.jsyglobals.css. - Los componentes de shadcn/ui se ubican en
frontend/components/ui/. - Si deseas más temas o ajustar la paleta de colores, revisa la documentación oficial de shadcn/ui.
Este proyecto está bajo la MIT License. Siéntete libre de usar, modificar y distribuir.
Si tienes dudas o sugerencias, puedes abrir un Issue o contactar a:
- Autor: Ruma
- Email: th3rum2@gmail.com




