Skip to content

Rumazor/task-manager

Repository files navigation

Aplicación de gestor de tareas

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.

Task Manager Preview

Características

  • 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.

Requisitos previos

  • 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.

Configuración de variables de entorno

Crea un archivo .env en la raíz del proyecto copiando el ejemplo:

cp .env.example .env

Contenido 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.com

Instrucciones de instalación y arranque (con Docker)

Docker logs

Clona 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

URLs disponibles

Servicio URL
Frontend http://localhost:3000
Backend API http://localhost:3001
Swagger Docs http://localhost:3001/docs
Portainer http://localhost:9000

Poblar la base de datos con datos de prueba

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 Email 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)

Rutas principales (Backend)

  • 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.


Monitoreo con Portainer

Portainer

Portainer está incluido para monitorear los contenedores:

  1. Abre http://localhost:9000
  2. Crea un usuario admin (primera vez)
  3. Selecciona "local" environment
  4. Ve a "Containers" para ver logs y stats

Flujo de autenticación en el Frontend

Flujo de autenticación

Login:

  1. Se envían las credenciales al backend (/auth/login).
  2. 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 /.

Scripts útiles

# 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 -v

Si 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"

CI/CD con GitHub Actions

GitHub Actions

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 test para CI con devDependencies
  • Stage production solo con dependencias de producción

Personalización de UI (Tailwind & shadcn/ui)

Shadcn UI Example
  • Para modificar los estilos globales, revisa frontend/tailwind.config.js y globals.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.

Licencia

Este proyecto está bajo la MIT License. Siéntete libre de usar, modificar y distribuir.

Contacto

Si tienes dudas o sugerencias, puedes abrir un Issue o contactar a:

About

a simple task manager with auth

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages