Milton Gonzalez 7557dffc52 feat: autorregistro con verificacion de correo + aprobacion, superadmin y SMTP
- POST /api/auth/register: primer usuario del sistema -> superadmin con sesion
  directa (bootstrap, sin correo ni aprobacion); los siguientes quedan
  pending_verification y reciben un correo con enlace de un solo uso (24h).
- GET /api/auth/verify-email: pasa a pending_approval y notifica in-app a los
  admin/superadmin activos.
- admin/superadmin aprueban (POST /api/users/:id/approve, eligen rol y
  departamento) o rechazan (POST /api/users/:id/reject, borra y audita el
  email) desde Organizacion -> Usuarios (nuevo badge de estado + acciones).
- login() da mensaje especifico segun el status de la cuenta en vez del
  generico "credenciales invalidas".
- Recuperacion de clave (forgot/reset-password): respuesta siempre generica,
  token de 1 hora de un solo uso.
- Nuevo modulo settings: SMTP configurable SOLO por superadmin desde
  Configuracion -> Correo (SMTP); clave cifrada AES-256-GCM (ENCRYPTION_KEY)
  en la tabla system_settings, nunca expuesta por la API. sendMail() degrada
  a modo dev (loguea en vez de enviar) si no hay SMTP configurado, y nunca
  deja que un fallo de envio tumbe al que lo llama.
- Migracion 002_registration_and_smtp.sql: rol superadmin, columnas de ciclo
  de vida en users (status, tokens), tabla system_settings, y promueve al
  usuario mas antiguo del sistema a superadmin.
- Fix: React.StrictMode disparaba el efecto de VerifyEmailPage dos veces; la
  segunda llamada (token ya consumido) mostraba "enlace invalido" pese a que
  la verificacion ya habia funcionado. Se agrega una guarda por token.
- Fix (deuda tecnica v1.0.0): se reordena el montaje de rutas en app.js —
  subtasksRoutes (mount generico en /api) va al final, para no interceptar
  con su requireAuth interno una request sin token dirigida a un router mas
  especifico registrado despues.
- Documentacion actualizada: AGENTS.md, SPEC.md, API.md, BASE_DE_DATOS.md,
  CONFIGURACION.md, ESTADO.md, CHANGELOG.md. Version 1.1.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 23:28:46 -05:00
2026-09-03 08:37:58 -05:00
2026-09-03 08:37:58 -05:00

project.linkedcorp.net

En producción: https://project.linkedcorp.net

Gestión y seguimiento de proyectos y actividades de TI para una empresa de tamaño medio. MVP simple por diseño (menos campos, menos módulos separados) con el modelo de datos preparado para crecer hacia el resto del alcance funcional (riesgos, incidencias, recursos, proveedores, presupuesto, reportes exportables, etc.) sin romper lo construido.

Stack

  • Frontend: React + Vite
  • Backend: Node.js + Express
  • Base de datos: MariaDB
  • Deploy: Debian 12 (dos servicios separados — arquetipo B del grupo)

Estructura

project.linkedcorp.net/
├── README.md
├── AGENTS.md
├── SPEC.md
├── API.md
├── BASE_DE_DATOS.md
├── CONFIGURACION.md
├── VERSIONADO.md
├── ESTADO.md
├── frontend/
├── backend/
├── docs/
└── scripts/

Modulos principales (MVP)

  • Seguridad (usuarios, roles, auditoría)
  • Organización (departamentos, usuarios)
  • Proyectos, Actividades y Subtareas
  • Dashboard, Calendario, Gantt (solo lectura)
  • Comentarios, adjuntos, notificaciones in-app
  • Configuración (catálogos)

Arranque rapido

Backend

cd backend
npm install
cp .env.example .env   # completar con las credenciales reales
npm run dev

Frontend

cd frontend
npm install
npm run dev

Puertos de este proyecto (registrados en PORTS_INVENTORY.md del grupo): frontend 5196, backend 4019. El frontend escucha en 0.0.0.0 para poder probarlo desde otro equipo/celular en la misma red.

Variables y configuracion

  • Revisar backend/.env.example y CONFIGURACION.md.
  • Base de datos dev: project_linkedcorp en 192.168.222.20 (ya creada).

Documentacion relacionada

  • AGENTS.md — contexto del proyecto para el asistente de IA (leer primero el orquestador del grupo).
  • SPEC.md — alcance funcional.
  • API.md — contrato de la API.
  • BASE_DE_DATOS.md — modelo de datos.
  • CONFIGURACION.md — variables de entorno y setup local.
  • docs/UI-UX-WINDOWS.md — identidad visual del proyecto (Fluent/Windows 11).
  • ESTADO.md — punto de retoma del proyecto (handoff).
S
Description
Gestion y seguimiento de proyectos/actividades TI
Readme 10 MiB
Languages
JavaScript 94.6%
CSS 3.7%
Shell 1.4%
PowerShell 0.2%