From 8063a6c0b66ead7e682f3990af42ab81dbaee07d Mon Sep 17 00:00:00 2001 From: Jessica Orozco Date: Tue, 16 Jun 2026 14:46:23 -0400 Subject: [PATCH] feat: implement core frontend architecture with authentication, dashboard, and AI-powered resource booking modules --- .env | 6 +- .env.local.template | 6 +- AGENT.md | 4 +- backend/.env | 6 +- backend/package.json | 4 +- doc/presentacion_kinetix.html | 2184 ++++++++++------- doc/propuesta_kinetix.md | 32 +- doc/walkthrough.md | 14 +- docker-compose.yml | 8 +- frontend/angular.json | 8 +- frontend/package.json | 4 +- frontend/src/app/app.component.ts | 16 +- frontend/src/app/core/guards/auth.guard.ts | 2 +- .../app/features/auth/login.component.html | 97 +- .../src/app/features/auth/login.component.ts | 18 +- .../features/dashboard/dashboard.component.ts | 22 +- .../directorio/directorio.component.ts | 80 - .../calendar-booking.component.html | 291 ++- .../reserva-form/reserva-form.component.html | 68 +- .../reservas/services/ia-parser.service.ts | 2 +- frontend/src/index.html | 7 +- frontend/src/styles.css | 179 +- package-lock.json | 14 +- package.json | 4 +- setup.ps1 | 2 +- setup.sh | 2 +- standards/02-database-schema.md | 2 +- standards/03-active-directory-sso.md | 2 +- standards/04-ui-ux-neon.md | 4 +- 29 files changed, 1681 insertions(+), 1407 deletions(-) diff --git a/.env b/.env index 02c4fcc..4f2e763 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -# Kinetix Intranet - Environment Variables Template +# App Intranet - Environment Variables Template # ========================================== # BACKEND (NestJS) CONFIGURATION @@ -7,7 +7,7 @@ PORT=3000 NODE_ENV=development # Database Settings (PostgreSQL / Supabase) -DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/kinetix_db?schema=public" +DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/App_db?schema=public" # SUPABASE_URL="https://your-project.supabase.co" # SUPABASE_KEY="your-anon-key" @@ -16,7 +16,7 @@ AD_TENANT_ID="your-azure-tenant-id" AD_CLIENT_ID="your-azure-client-id" AD_CLIENT_SECRET="your-azure-client-secret" AD_REDIRECT_URI="http://localhost:3000/api/auth/callback" -JWT_SECRET="kinetix-super-jwt-secret-key-2026" +JWT_SECRET="App-super-jwt-secret-key-2026" # ========================================== # FRONTEND (Angular) CONFIGURATION diff --git a/.env.local.template b/.env.local.template index 02c4fcc..4f2e763 100644 --- a/.env.local.template +++ b/.env.local.template @@ -1,4 +1,4 @@ -# Kinetix Intranet - Environment Variables Template +# App Intranet - Environment Variables Template # ========================================== # BACKEND (NestJS) CONFIGURATION @@ -7,7 +7,7 @@ PORT=3000 NODE_ENV=development # Database Settings (PostgreSQL / Supabase) -DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/kinetix_db?schema=public" +DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/App_db?schema=public" # SUPABASE_URL="https://your-project.supabase.co" # SUPABASE_KEY="your-anon-key" @@ -16,7 +16,7 @@ AD_TENANT_ID="your-azure-tenant-id" AD_CLIENT_ID="your-azure-client-id" AD_CLIENT_SECRET="your-azure-client-secret" AD_REDIRECT_URI="http://localhost:3000/api/auth/callback" -JWT_SECRET="kinetix-super-jwt-secret-key-2026" +JWT_SECRET="App-super-jwt-secret-key-2026" # ========================================== # FRONTEND (Angular) CONFIGURATION diff --git a/AGENT.md b/AGENT.md index 355f596..edfba29 100644 --- a/AGENT.md +++ b/AGENT.md @@ -14,7 +14,7 @@ ## 2. Estructura del Monorepo ``` -Kinetix/ +App/ │ ├── AGENT.md ← System Prompt principal e instrucciones de onboarding (no borrar) ├── package.json ← Scripts del monorepo @@ -77,7 +77,7 @@ Levanta el contenedor de PostgreSQL para desarrollo local: ```bash docker-compose up -d ``` -Esto creará la base de datos `kinetix_db` expuesta en `localhost:5432` y pgAdmin en `http://localhost:5050` con las credenciales configuradas en el archivo `.env`. +Esto creará la base de datos `App_db` expuesta en `localhost:5432` y pgAdmin en `http://localhost:5050` con las credenciales configuradas en el archivo `.env`. --- diff --git a/backend/.env b/backend/.env index 02c4fcc..4f2e763 100644 --- a/backend/.env +++ b/backend/.env @@ -1,4 +1,4 @@ -# Kinetix Intranet - Environment Variables Template +# App Intranet - Environment Variables Template # ========================================== # BACKEND (NestJS) CONFIGURATION @@ -7,7 +7,7 @@ PORT=3000 NODE_ENV=development # Database Settings (PostgreSQL / Supabase) -DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/kinetix_db?schema=public" +DATABASE_URL="postgresql://admin:supersecretpassword123@localhost:5432/App_db?schema=public" # SUPABASE_URL="https://your-project.supabase.co" # SUPABASE_KEY="your-anon-key" @@ -16,7 +16,7 @@ AD_TENANT_ID="your-azure-tenant-id" AD_CLIENT_ID="your-azure-client-id" AD_CLIENT_SECRET="your-azure-client-secret" AD_REDIRECT_URI="http://localhost:3000/api/auth/callback" -JWT_SECRET="kinetix-super-jwt-secret-key-2026" +JWT_SECRET="App-super-jwt-secret-key-2026" # ========================================== # FRONTEND (Angular) CONFIGURATION diff --git a/backend/package.json b/backend/package.json index ee90641..931cbda 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,5 +1,5 @@ { - "name": "kinetix-backend", + "name": "App-backend", "version": "1.0.0", "private": true, "scripts": { @@ -26,4 +26,4 @@ "@types/passport-jwt": "^4.0.0", "typescript": "^5.0.0" } -} +} \ No newline at end of file diff --git a/doc/presentacion_kinetix.html b/doc/presentacion_kinetix.html index c02e3ea..8955aca 100644 --- a/doc/presentacion_kinetix.html +++ b/doc/presentacion_kinetix.html @@ -1,5 +1,6 @@ + @@ -11,31 +12,38 @@ - + - -
-
- -
-
-
- - - - - -
-
-

Intranet Corporativa

-

Plataforma de Nueva Generación · Propuesta Técnica y Comercial

-
-

- - Preparado por: Jess Miller · Arquitecta de Software Senior · Junio 2026 -

-
+
+
+
+ + + + + +
+
+

Intranet Corporativa

+

Plataforma de Nueva Generación · Propuesta Técnica y Comercial

+
+

+ + Preparado por: Jess Miller · Arquitecta de Software Senior · Junio 2026 +

+
- -
-
01 / 19
-
Resumen Ejecutivo
-

Una plataforma integrada y lista para producción

-
-
-
5
-
Módulos core
-
Directorio · Espacios · Workflow · CMS · Tickets
-
-
-
SSO
-
Azure Entra ID
-
Autenticación nativa de nivel empresarial
-
-
-
100%
-
Código Abierto
-
Angular 18 · NestJS 10 · PostgreSQL 15
-
-
-
-

- LA PLATAFORMA NO ES UN PROTOTIPO. Se presenta como una solución central de intranet corporativa completamente funcional en desarrollo activo, con frontends y backends estables. Consolida procesos dispersos, garantiza seguridad empresarial y otorga propiedad total del código al cliente sin dependencias ni vendor lock-in. -

-
-
+
+
01 / 19
+
Resumen Ejecutivo
+

Una plataforma integrada y lista para producción

+
+
+
5
+
Módulos core
+
Directorio · Espacios · Workflow · CMS · Tickets
+
+
+
SSO
+
Azure Entra ID
+
Autenticación nativa de nivel empresarial
+
+
+
100%
+
Código Abierto
+
Angular 18 · NestJS 10 · PostgreSQL 15
+
+
+
+

+ LA PLATAFORMA NO ES UN PROTOTIPO. Se presenta como una solución central de intranet + corporativa completamente funcional en desarrollo activo, con frontends y backends estables. Consolida + procesos dispersos, garantiza seguridad empresarial y otorga propiedad total del código al cliente sin + dependencias ni vendor lock-in. +

+
+
- -
-
02 / 19
-
El Diagnóstico
-

El impacto de la fragmentación de herramientas

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Síntoma OperativoImpacto en el Negocio
Fragmentación de herramientasPérdida de tiempo, ineficiencia operativa y errores de coordinación interdepartamental.
Sin integración con Active DirectoryOnboarding y offboarding lentos, gestión manual de accesos y serios riesgos de seguridad.
Reservas de salas sin control centralizadoConflictos de disponibilidad, overbooking y salas de reuniones subutilizadas.
Aprobaciones de contenidos por correo/chatsFalta absoluta de trazabilidad, cuellos de botella operativos y pérdida de historial.
Directorio de personal desactualizadoDificultad para localizar habilidades internas, baja colaboración y silos de información.
-
+
+
02 / 19
+
El Diagnóstico
+

El impacto de la fragmentación de herramientas

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Síntoma OperativoImpacto en el Negocio
Fragmentación de herramientasPérdida de tiempo, ineficiencia operativa y errores de coordinación interdepartamental.
Sin integración con Active DirectoryOnboarding y offboarding lentos, gestión manual de accesos y serios riesgos de seguridad.
Reservas de salas sin control centralizadoConflictos de disponibilidad, overbooking y salas de reuniones subutilizadas.
Aprobaciones de contenidos por correo/chatsFalta absoluta de trazabilidad, cuellos de botella operativos y pérdida de historial.
Directorio de personal desactualizadoDificultad para localizar habilidades internas, baja colaboración y silos de información.
+
- -
-
03 / 19
-
La Propuesta
-

Un ecosistema. Todos los procesos internos en uno.

- -
-
-
- 🏢 -

Directorio (IAM)

-
-
- 📅 -

Espacios & IA

-
-
- ⚙️ -

Aprobaciones BPM

-
-
- 📰 -

Info Hub CMS

-
-
- 🎫 -

Ticketing SLA

-
-
- -
-
🔑 Autenticación SSO: Microsoft Azure Entra ID / Tokens JWT
-
🐘 Persistencia: PostgreSQL (ACID) & Prisma ORM
-
🐳 Infraestructura: Docker / Cloud Ready
-
-
- -

- La solución consolida la seguridad y la experiencia del usuario bajo un mismo diseño unificado y coherente. -

-
+
+
03 / 19
+
La Propuesta
+

Un ecosistema. Todos los procesos internos en uno.

- -
-
04 / 19
-
Módulos de la Solución
-

Módulo 1: Directorio Corporativo (IAM / HR)

-
-
-
-

👥 Sincronización Azure Entra ID

-

Lectura directa de usuarios, departamentos y jerarquías sin replicar datos sensibles de manera local.

-
-
-

🔍 Búsqueda Reactiva en Tiempo Real

-

Búsqueda instantánea integrada con Angular Signals. Filtros por rol, departamento o habilidades específicas de manera fluida.

-
-
- -
-
-

🆔 Perfiles de Colaborador Detallados

-

Muestra ID del directorio (AD-XXXX), tarifa por hora, badge de calificación y datos de contacto integrados.

-
-
-

⚡ Interfaz Ergónomica e Inmersiva

-

Tarjetas de personal dinámicas con micro-interacciones de hover y navegación rápida a información de contacto.

-
-
-
-
+
+
04 / 19
+
Módulos de la Solución
+

Módulo 1: Directorio Corporativo (IAM / HR)

+
+
+
+

👥 Sincronización Azure Entra ID

+

Lectura directa de usuarios, departamentos y jerarquías sin replicar datos sensibles de manera local. +

+
+
+

🔍 Búsqueda Reactiva en Tiempo Real

+

Búsqueda instantánea integrada con Angular Signals. Filtros por rol, departamento o habilidades + específicas de manera fluida.

+
+
- -
-
05 / 19
-
Módulos de la Solución
-

Módulo 2: Autogestión de Espacios y Reservas (PMS)

-
-
-
-

📅 Calendario Interactivo

-

Vistas completas de Mes, Semana y Día. Clic en cualquier bloque de tiempo disponible redirige al formulario con parámetros precargados.

-
-
-

🛡️ Anti-Overbooking Garantizado

-

Control transaccional estricto en base de datos PostgreSQL, asegurando consistencia absoluta sin duplicidad de reservas.

-
-
-

⚙️ Filtros por Tipo de Activo

-

Filtrado de recursos en tiempo real: salas de reuniones, equipos tecnológicos, vehículos y áreas comunes.

-
-
+
+
05 / 19
+
Módulos de la Solución
+

Módulo 2: Autogestión de Espacios y Reservas (PMS)

+
+
+
+

📅 Calendario Interactivo

+

Vistas completas de Mes, Semana y Día. Clic en cualquier bloque de tiempo disponible redirige al + formulario con parámetros precargados.

+
+
+

🛡️ Anti-Overbooking Garantizado

+

Control transaccional estricto en base de datos PostgreSQL, asegurando consistencia absoluta sin + duplicidad de reservas.

+
+
+

⚙️ Filtros por Tipo de Activo

+

Filtrado de recursos en tiempo real: salas de reuniones, equipos tecnológicos, vehículos y áreas + comunes.

+
+
-
-
🤖 ASISTENTE DE IA INTEGRADO (NLP)
-

- El usuario puede agendar recursos usando lenguaje natural de forma intuitiva: -

-
- Entrada libre:
- "Reservar la sala Londres para mañana a las 10 am para 8 personas"
-
- Variables detectadas por IA:
- • Espacio: London Hall (ID: SALA-02)
- • Fecha: 2026-06-17 (Calculado)
- • Hora: 10:00 AM - 11:00 AM
- • Participantes: 8 colaboradores -
-
-
-
+
+
+ 🤖 ASISTENTE DE IA INTEGRADO (NLP)
+

+ El usuario puede agendar recursos usando lenguaje natural de forma intuitiva: +

+
+ Entrada libre:
+ "Reservar la sala Londres para mañana a las 10 am para 8 personas"
+
+ Variables detectadas por IA:
+ • Espacio: London Hall (ID: SALA-02)
+ • Fecha: 2026-06-17 (Calculado)
+ • Hora: 10:00 AM - 11:00 AM
+ • Participantes: 8 colaboradores +
+
+
+
- -
-
06 / 19
-
Módulos de la Solución
-

Módulo 3: Workflow de Aprobación y Publicación (BPM)

-
-
-
-

⚙️ Motor de Reglas Jerárquicas

-

Flujo estructurado multinivel basado en roles de Active Directory. Asigna aprobadores de manera automática según el departamento.

-
-
-

📈 Trazabilidad de Estados

-

Control exacto del estado de cada solicitud (Borrador → En Aprobación → Aprobado → Publicado) con auditoría histórica detallada.

-
-
+
+
06 / 19
+
Módulos de la Solución
+

Módulo 3: Workflow de Aprobación y Publicación (BPM)

+
+
+
+

⚙️ Motor de Reglas Jerárquicas

+

Flujo estructurado multinivel basado en roles de Active Directory. Asigna aprobadores de manera + automática según el departamento.

+
+
+

📈 Trazabilidad de Estados

+

Control exacto del estado de cada solicitud (Borrador → En Aprobación → Aprobado → Publicado) con + auditoría histórica detallada.

+
+
-
-
-

🔔 Notificaciones y Alertas Reactivas

-

Integración directa con el sistema de mensajería para avisos de solicitudes pendientes, garantizando flujos de trabajo sin demoras.

-
-
-

📰 Integración con Canales CMS

-

Una vez aprobado el contenido corporativo, el motor realiza la publicación automática en los tableros del Info Hub de la empresa.

-
-
-
-
+
+
+

🔔 Notificaciones y Alertas Reactivas

+

Integración directa con el sistema de mensajería para avisos de solicitudes pendientes, garantizando + flujos de trabajo sin demoras.

+
+
+

📰 Integración con Canales CMS

+

Una vez aprobado el contenido corporativo, el motor realiza la publicación automática en los tableros + del Info Hub de la empresa.

+
+
+
+
- -
-
07 / 19
-
Módulos de la Solución
-

Módulos 4 & 5: Info Hub CMS y Ticketing

-
-
- 📰 -

Módulo 4: Info Hub / CMS Corporativo

-

Gestión y publicación de información interna en un portal centralizado de noticias corporativas.

-
    -
  • Editor WYSIWYG de contenidos enriquecidos
  • -
  • Categorías y taxonomías customizables
  • -
  • Programación de comunicados a futuro
  • -
  • Publicación segmentada por departamento o rol
  • -
-
+
+
07 / 19
+
Módulos de la Solución
+

Módulos 4 & 5: Info Hub CMS y Ticketing

+
+
+ 📰 +

Módulo 4: Info Hub / CMS Corporativo

+

Gestión y publicación de información interna en un portal + centralizado de noticias corporativas.

+
    +
  • Editor WYSIWYG de contenidos enriquecidos
  • +
  • Categorías y taxonomías customizables
  • +
  • Programación de comunicados a futuro
  • +
  • Publicación segmentada por departamento o rol
  • +
+
-
- 🎫 -

Módulo 5: Soporte Técnico e Incidencias

-

Mesa de ayuda integrada para gestionar requerimientos de soporte interno técnico, operacional y de RR.HH.

-
    -
  • Creación de solicitudes con prioridades claras
  • -
  • Asignación automatizada según especialidad del agente
  • -
  • Control de Tiempos de Respuesta y SLAs por ticket
  • -
  • Dashboard de resolución para coordinadores de mesa
  • -
-
-
-
+
+ 🎫 +

Módulo 5: Soporte Técnico e Incidencias

+

Mesa de ayuda integrada para gestionar requerimientos de soporte + interno técnico, operacional y de RR.HH.

+
    +
  • Creación de solicitudes con prioridades claras
  • +
  • Asignación automatizada según especialidad del agente
  • +
  • Control de Tiempos de Respuesta y SLAs por ticket
  • +
  • Dashboard de resolución para coordinadores de mesa
  • +
+
+
+
- -
-
08 / 19
-
Arquitectura de Software
-

Stack Tecnológico Moderno y Open Source

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CapaTecnología UtilizadaVersiónJustificación y Beneficio
FrontendAngular (Standalone Components & Signals)18.0Framework enterprise mantenido por Google, alta reactividad y orden.
BackendNestJS (REST API)10.0Arquitectura modular sólida basada en TypeScript, fácil mantenimiento.
AutenticaciónAzure Entra ID + JWT (SSO)EstándarIntegración corporativa directa con el Active Directory de la empresa.
Base de DatosPostgreSQL + Prisma ORM15 / v5Garantiza transacciones ACID indispensables para evitar overbooking de salas.
InfraestructuraDocker + Docker Composev3.8Asegura portabilidad absoluta y despliegue rápido en local o cloud.
-
+
+
08 / 19
+
Arquitectura de Software
+

Stack Tecnológico Moderno y Open Source

- -
-
09 / 19
-
Seguridad Corporativa
-

Arquitectura SSO: Cero almacenamiento de credenciales

- -
-
-

1. Usuario

-

Accede a la plataforma web desde el navegador.

-
-
-
-

2. Azure Entra ID

-

Autenticación delegada (OAuth2) con credenciales corporativas.

-
-
-
-

3. Token JWT

-

Retorna token con identidad y pertenencia a grupos de AD.

-
-
-
-

4. NestJS API

-

Decodifica y valida firma del JWT por cada petición HTTP.

-
-
-
-

5. Autorización

-

Acceso concedido según rol: employee, manager o admin.

-
-
+
+
09 / 19
+
Seguridad Corporativa
+

Arquitectura SSO: Cero almacenamiento de credenciales

-
-
-

- OWASP Top 10 Compliance: Toda la transmisión de datos corre sobre HTTPS y los permisos expiran automáticamente mediante tokens JWT firmados. -

-
-
-

- Control Centralizado: Si se da de baja un colaborador en el AD corporativo de la empresa, pierde acceso de forma inmediata y automática a la intranet. -

-
-
-
+
+
+

1. Usuario

+

Accede a la plataforma web desde el navegador.

+
+
+
+

2. Azure Entra ID

+

Autenticación delegada (OAuth2) con credenciales corporativas.

+
+
+
+

3. Token JWT

+

Retorna token con identidad y pertenencia a grupos de AD.

+
+
+
+

4. NestJS API

+

Decodifica y valida firma del JWT por cada petición HTTP.

+
+
+
+

5. Autorización

+

Acceso concedido según rol: employee, manager o admin.

+
+
- -
-
10 / 19
-
Ingeniería de Software
-

Arquitectura de Repositorio Estructurado

- -
- proyecto-intranet/
- ├── frontend/← Aplicación Angular 18 (Standalone Components + Signals)
- │ └── src/app/
- │ ├── core/← Guard SSO, interceptores HTTP, auth services y manejo de tokens
- │ ├── shared/← Componentes del Design System y pipes comunes
- │ └── features/← Módulos funcionales (directorio, calendar-booking, etc.)
- ├── backend/← REST API en NestJS (TypeScript modular estructurado)
- │ └── src/
- │ ├── auth/← Módulo Passport con validación JWT de Azure Entra ID
- │ ├── directory/ / spaces/ / workflow/← Módulos con lógica empresarial
- ├── standards/← Documentación de calidad de código y especificaciones de diseño
- ├── docker-compose.yml← Orquestación local: base de datos PostgreSQL + administradores
- └── setup.ps1 / .sh← Scripts de automatización y despliegue rápido para desarrollo -
- -

- → Código limpio, modular y documentado que permite la adición de nuevos desarrolladores de forma ágil. -

-
+
+
10 / 19
+
Ingeniería de Software
+

Arquitectura de Repositorio Estructurado

- -
-
11 / 19
-
Experiencia de Usuario
-

Executive Suite Design System

-

- Diseñado bajo directrices premium que mezclan sobriedad corporativa y tecnología de vanguardia. -

+
+
11 / 19
+
Experiencia de Usuario
+

Executive Suite Design System

+

+ Diseñado bajo directrices premium que mezclan sobriedad corporativa y tecnología de vanguardia. +

-
-
-

✨ Tipografía Limpia

-

Inter para titulares de gran peso, brindando jerarquía y firmeza, complementada con Outfit para lecturas extensas fluidas.

-
-
-

🖼️ Card System Joya

-

Glows de fondo en colores oscuros pero ricos (Navy, Plum, Viridian, Espresso). Estructura elegante sin bordes cargados.

-
-
-

🔮 Micro-animaciones

-

Efectos de hover sutiles en tarjetas y botones, feedback inmediato al clickear y transiciones fluidas de página.

-
-
+
+
+

✨ Tipografía Limpia

+

Inter para titulares de gran peso, brindando jerarquía y firmeza, complementada con Outfit para lecturas + extensas fluidas.

+
+
+

🖼️ Card System Joya

+

Glows de fondo en colores oscuros pero ricos (Navy, Plum, Viridian, Espresso). Estructura elegante sin + bordes cargados.

+
+
+

🔮 Micro-animaciones

+

Efectos de hover sutiles en tarjetas y botones, feedback inmediato al clickear y transiciones fluidas de + página.

+
+
-
-
-
-

Ivory (#F5F4F1)

-

Color primario para contraste de textos limpios y de alta legibilidad.

-
-
-
-

Gold (#C9973C)

-

Dorado corporativo para estados activos, botones primarios y tags.

-
-
-
-

Navy (#0D1B2A)

-

Color de fondo para el Directorio IAM y elementos de seguridad.

-
-
-
-

Plum (#1A0E2E)

-

Fondo sofisticado reservado para calendario, reservas e IA.

-
-
-
-

Viridian (#0A2520)

-

Tonalidad verde para el motor de reglas y aprobaciones BPM.

-
-
-
+
+
+
+

Ivory (#F5F4F1)

+

Color primario para contraste de textos limpios y de alta legibilidad.

+
+
+
+

Gold (#C9973C)

+

Dorado corporativo para estados activos, botones primarios y tags.

+
+
+
+

Navy (#0D1B2A)

+

Color de fondo para el Directorio IAM y elementos de seguridad.

+
+
+
+

Plum (#1A0E2E)

+

Fondo sofisticado reservado para calendario, reservas e IA.

+
+
+
+

Viridian (#0A2520)

+

Tonalidad verde para el motor de reglas y aprobaciones BPM.

+
+
+
- -
-
12 / 19
-
Estado del Proyecto
-

Módulos desarrollados y nivel de avance

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Módulo o ComponenteAvanceDetalles Técnicos Implementados
Autenticación SSO corporativo✅ ImplementadoMódulo Auth JWT en NestJS, interceptores en Angular y Guards SSO.
Dashboard & Shell✅ ImplementadoSidebar interactivo colapsable, métricas globales, navegación.
Directorio de Personal✅ ImplementadoBúsqueda reactiva con Signals, filtros por departamento, tarjetas de AD.
Calendario de Reservas✅ ImplementadoCalendario reactivo en frontend con vistas de Mes, Semana y Día.
Formulario de Reservas + IA✅ ImplementadoParser NLP configurado con mock local y listado de consumo HTTP.
Workflow de Aprobación BPM🔄 En DesarrolloEstructuración del motor de jerarquías y vistas de historial de cambios.
Info Hub CMS / Ticketing SLA📋 PlanificadoDiseño de tablas de base de datos definidos en esquemas de Prisma.
-
+
+
12 / 19
+
Estado del Proyecto
+

Módulos desarrollados y nivel de avance

- -
-
13 / 19
-
Roadmap de Entrega
-

Fase 0: Diagnóstico & Fase 1: Setup e Integración

- -
- -
-
- Fase 0 — Diagnóstico y NDA (Semanas 1–2) -
-
-

📋 Kickoff e Inventario Técnico

-

Alineación de objetivos con el departamento de IT y negocio. Definición de ambientes de desarrollo y sandbox.

-
-
-

🔍 Auditoría de Active Directory

-

Revisión de grupos, jerarquías de aprobadores y políticas de acceso a la tenant del cliente.

-
-
- - -
-
- Fase 1 — Setup y Conexión SSO (Semanas 3–4) -
-
-

🛡️ Integración Microsoft Entra ID

-

Conexión directa de SSO vía OAuth2 en entorno de Staging. Traspaso de token JWT con claims asignados.

-
-
-

🐘 Despliegue de DB de Producción

-

Instalación de base de datos PostgreSQL, ejecución de esquemas Prisma y pruebas de concurrencia base.

-
-
-
- -
- 🔑 HITO CLAVE FASE 1: Inicio de sesión exitoso de usuarios del cliente en ambiente de Staging usando sus credenciales corporativas reales. -
-
+
+
13 / 19
+
Roadmap de Entrega
+

Fase 0: Diagnóstico & Fase 1: Setup e Integración

- +
+
+ Fase 0 — Diagnóstico y NDA (Semanas 1–2) +
+
+

📋 Kickoff e Inventario Técnico

+

Alineación de objetivos con el departamento de IT y negocio. Definición de ambientes de desarrollo y + sandbox.

+
+
+

🔍 Auditoría de Active Directory

+

Revisión de grupos, jerarquías de aprobadores y políticas de acceso a la tenant del cliente.

+
+
+ + +
+
+ Fase 1 — Setup y Conexión SSO (Semanas 3–4) +
+
+

🛡️ Integración Microsoft Entra ID

+

Conexión directa de SSO vía OAuth2 en entorno de Staging. Traspaso de token JWT con claims asignados. +

+
+
+

🐘 Despliegue de DB de Producción

+

Instalación de base de datos PostgreSQL, ejecución de esquemas Prisma y pruebas de concurrencia base. +

+
+
+
+ +
+ 🔑 HITO CLAVE FASE 1: Inicio de sesión exitoso de + usuarios del cliente en ambiente de Staging usando sus credenciales corporativas reales. +
+
+ + -
-
14 / 19
-
Roadmap de Entrega
-

Fases 2, 3 & 4: Módulos Core, Secundarios y Go-Live

- -
- -
- Fase 2 (Sem 5–10) -

Módulos Core

-

Desarrollo final de los módulos esenciales:

-
    -
  • Directorio IAM en Staging
  • -
  • Reservas e IA integradas
  • -
  • Motor de Workflow BPM
  • -
  • Piloto con 50 usuarios
  • -
-
- - -
- Fase 3 (Sem 11–14) -

Módulos Secundarios

-

Construcción de soporte e información:

-
    -
  • Info Hub CMS con editor
  • -
  • Ticketing y asignación SLA
  • -
  • Pruebas de aceptación globales (UAT)
  • -
  • Congelamiento de código
  • -
-
+
+
14 / 19
+
Roadmap de Entrega
+

Fases 2, 3 & 4: Módulos Core, Secundarios y Go-Live

- -
- Fase 4 (Sem 15–16) -

Go-Live & Traspaso

-

Despliegue y estabilización:

-
    -
  • Paso a Producción Cloud
  • -
  • Capacitación de usuarios
  • -
  • Traspaso de Runbooks y código
  • -
  • 30 días de garantía incluidos
  • -
-
-
- -
-
🚀 HITO CLAVE FASE 4: Plataforma 100% en vivo para todos los colaboradores de la empresa.
-
-
+
+ +
+ Fase + 2 (Sem 5–10) +

Módulos Core

+

Desarrollo final de los módulos esenciales:

+
    +
  • Directorio IAM en Staging
  • +
  • Reservas e IA integradas
  • +
  • Motor de Workflow BPM
  • +
  • Piloto con 50 usuarios
  • +
+
- +
+ Fase + 3 (Sem 11–14) +

Módulos Secundarios

+

Construcción de soporte e información:

+
    +
  • Info Hub CMS con editor
  • +
  • Ticketing y asignación SLA
  • +
  • Pruebas de aceptación globales (UAT)
  • +
  • Congelamiento de código
  • +
+
+ + +
+ Fase + 4 (Sem 15–16) +

Go-Live & Traspaso

+

Despliegue y estabilización:

+
    +
  • Paso a Producción Cloud
  • +
  • Capacitación de usuarios
  • +
  • Traspaso de Runbooks y código
  • +
  • 30 días de garantía incluidos
  • +
+
+
+ +
+
🚀 HITO CLAVE FASE 4: Plataforma 100% en vivo + para todos los colaboradores de la empresa.
+
+
+ + -
-
15 / 19
-
Roadmap de Entrega
-

Cronograma General de Trabajo (16 Semanas)

- -
- -
-
Fase 0: Diagnóstico
-
-
Diagnóstico & AD Audit
-
-
- -
-
Fase 1: Setup & SSO
-
-
SSO Azure Staging
-
-
- -
-
Fase 2: Módulos Core
-
-
Dir + Espacios IA + BPM + Piloto
-
-
- -
-
Fase 3: Módulos Secundarios
-
-
CMS + Tickets + UAT General
-
-
- -
-
Fase 4: Lanzamiento
-
-
Go-Live & Traspaso
-
-
- - -
- Mes 1 (Sem 1-4) - Mes 2 (Sem 5-8) - Mes 3 (Sem 9-12) - Mes 4 (Sem 13-16) -
-
- -

- Cada hito requiere aprobación y pruebas UAT de cara al cliente antes del paso a la siguiente fase del proyecto. -

-
+
+
15 / 19
+
Roadmap de Entrega
+

Cronograma General de Trabajo (16 Semanas)

- +
+
Fase 0: Diagnóstico
+
+
Diagnóstico & AD Audit +
+
+
+ +
+
Fase 1: Setup & SSO
+
+
SSO Azure Staging
+
+
+ +
+
Fase 2: Módulos Core
+
+
Dir + Espacios IA + BPM + + Piloto
+
+
+ +
+
Fase 3: Módulos Secundarios
+
+
CMS + Tickets + UAT General +
+
+
+ +
+
Fase 4: Lanzamiento
+
+
Go-Live & Traspaso +
+
+
+ + +
+ Mes 1 (Sem 1-4) + Mes 2 (Sem 5-8) + Mes 3 (Sem 9-12) + Mes 4 (Sem 13-16) +
+
+ +

+ Cada hito requiere aprobación y pruebas UAT de cara al cliente antes del paso a la siguiente fase del + proyecto. +

+ + + -
-
16 / 19
-
Presupuesto y Adquisición
-

Esquema de Presupuesto y Modalidades de Contratación

- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Concepto de TrabajoDescripción del Entregable
Licenciamiento baseEntrega de la plataforma e infraestructura base preconfigurada.
Integración SSO e InfraFases 0 y 1: Configuración de Azure Entra ID, base de datos PostgreSQL.
Desarrollo Core & BPMFase 2: Conexión de Directorio, Calendario + IA, workflow BPM.
Desarrollo CMS & TicketsFase 3: Info Hub, Ticketing y SLA. Pruebas UAT.
Go-Live & GarantíaDespliegue, manuales, capacitación y 30 días de garantía inicial.
-
+
+
16 / 19
+
Presupuesto y Adquisición
+

Esquema de Presupuesto y Modalidades de Contratación

- -
-
- Modalidades de Adquisición -
-
-

🔑 Proyecto Llave en Mano

-

Precio y plazos fijos por la entrega del alcance completo de las 16 semanas. Ideal para presupuestos definidos.

-
-
-

⏳ Tiempo y Materiales (T&M)

-

Facturación mensual por sprints según requerimientos variables y flexibilidad de prioridades.

-
-
-

☁️ SaaS Mensual (OpEx)

-

Suscripción mensual recurrente con hosting, soporte continuo y actualizaciones evolutivas incluidas.

-
-
-
-
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Concepto de TrabajoDescripción del Entregable
Licenciamiento baseEntrega de la plataforma e infraestructura base preconfigurada.
Integración SSO e InfraFases 0 y 1: Configuración de Azure Entra ID, base de datos PostgreSQL.
Desarrollo Core & BPMFase 2: Conexión de Directorio, Calendario + IA, workflow BPM.
Desarrollo CMS & TicketsFase 3: Info Hub, Ticketing y SLA. Pruebas UAT.
Go-Live & GarantíaDespliegue, manuales, capacitación y 30 días de garantía inicial.
+
- +
+
+ Modalidades de Adquisición +
+
+

🔑 Proyecto Llave en Mano

+

Precio y plazos fijos por la entrega del alcance completo de las 16 semanas. + Ideal para presupuestos definidos.

+
+
+

⏳ Tiempo y Materiales (T&M)

+

Facturación mensual por sprints según requerimientos variables y + flexibilidad de prioridades.

+
+
+

☁️ SaaS Mensual (OpEx)

+

Suscripción mensual recurrente con hosting, soporte continuo y + actualizaciones evolutivas incluidas.

+
+
+
+ + + -
-
17 / 19
-
Análisis del Mercado
-

Por qué nuestra solución frente a las alternativas

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CriterioNuestra PlataformaSharePointConfluenceDesarrollo desde 0
Integración AD Nativa✅ Sí (SSO)✅ Sí⚠️ Vía Plugin✅ Sí
Personalización UI/UX✅ 100% Libre⚠️ Limitada⚠️ Limitada✅ 100% Libre
Asistente IA NLP✅ Integrado❌ No❌ No⚠️ Costo Extra
Plazos de Entrega✅ 16 Semanas3 - 12 meses2 - 6 meses12 - 18 meses
Propiedad de Código✅ Del Cliente❌ Microsoft❌ Atlassian✅ Del Cliente
Vendor Lock-in✅ Cero (Open Source)❌ Alto❌ Alto✅ Cero
-
+
+
17 / 19
+
Análisis del Mercado
+

Por qué nuestra solución frente a las alternativas

- -
-
18 / 19
-
Transparencia
-

Garantías y Respaldos del Proyecto

- -
-
-

📦 Propiedad Intelectual Total

-

El cliente es dueño absoluto del código fuente, base de datos y documentación técnica al cierre del proyecto. Sin regalías.

-
-
-

🔓 Cero Dependencias

-

Uso de stack open source estándar (Angular, NestJS, PostgreSQL). Cualquier equipo de desarrollo puede asumir y escalar el sistema en el futuro.

-
-
-

📈 Escalabilidad Enterprise

-

Arquitectura desacoplada en backend y frontend, preparada para soportar 10,000+ usuarios concurrentes sin degradar velocidad.

-
-
-

🛡️ Seguridad by Design

-

Cumplimiento estricto de lineamientos OWASP Top 10, cifrado SSL/TLS obligatorio y validación de sesiones delegadas en el SSO.

-
-
-

📄 Soporte y Operatividad

-

30 días de soporte técnico reactivo de primer nivel tras el Go-Live, garantizando una transición operativa suave.

-
-
-

⚙️ Documentación Exhaustiva

-

Traspaso completo de guías de desarrollo, runbooks de DevOps, esquemas de bases de datos y manuales de usuario.

-
-
-
+
+
18 / 19
+
Transparencia
+

Garantías y Respaldos del Proyecto

- -
-
Propuesta de Intranet · 2026
-

- Unificando procesos para
potenciar tu organización. -

- -
-
- PRÓXIMOS PASOS - 1. Demo en vivo de la plataforma actual (30 min)
- 2. Workshop técnico sobre Active Directory (2h)
- 3. Propuesta comercial formal ajustada a usuarios
- 4. Firma de acuerdo NDA y Contrato de Desarrollo
- 5. Kick-off de Fase 0 -
-
+
+
Propuesta de Intranet · 2026
+

+ Unificando procesos para
potenciar tu organización. +

-
- -
- Jess Miller — Arquitecta de Software Senior & Full-Stack Engineer - 📧 jess@intranet.dev  |  🔗 github.com/intranet-platform - - Para descargar o imprimir a PDF: Ctrl+P (Chrome) → Guardar como PDF → Habilitar "Gráficos de fondo" e imprimir horizontal. - -
-
+
+
+ PRÓXIMOS PASOS + 1. Demo en vivo de la plataforma actual (30 min)
+ 2. Workshop técnico sobre Active Directory (2h)
+ 3. Propuesta comercial formal ajustada a usuarios
+ 4. Firma de acuerdo NDA y Contrato de Desarrollo
+ 5. Kick-off de Fase 0 +
+
-
- +
- - - + + + + + + - + + \ No newline at end of file diff --git a/doc/propuesta_kinetix.md b/doc/propuesta_kinetix.md index 2278406..6ff6191 100644 --- a/doc/propuesta_kinetix.md +++ b/doc/propuesta_kinetix.md @@ -1,5 +1,5 @@ # Propuesta Técnica y Comercial -## Plataforma de Intranet Corporativa · **Kinetix** +## Plataforma de Intranet Corporativa · **App** --- @@ -12,12 +12,12 @@ ## Resumen Ejecutivo -**Kinetix** es una plataforma de intranet corporativa de nueva generación, diseñada para consolidar en un único ecosistema digital todos los procesos internos de una organización empresarial moderna: gestión de identidades, reserva de espacios, aprobación de contenidos, directorio de personal y ticketing de incidencias. +**App** es una plataforma de intranet corporativa de nueva generación, diseñada para consolidar en un único ecosistema digital todos los procesos internos de una organización empresarial moderna: gestión de identidades, reserva de espacios, aprobación de contenidos, directorio de personal y ticketing de incidencias. La plataforma está operativa, con frontend y backend en producción local, y lista para su despliegue en infraestructura cloud o on-premise. Está construida sobre un stack tecnológico de primer nivel —**Angular 18, NestJS 10 y PostgreSQL 15**— con autenticación nativa vía **Microsoft Azure Entra ID (Active Directory)**, lo que garantiza integración inmediata con el ecosistema Microsoft de cualquier empresa. > [!IMPORTANT] -> Kinetix no es un prototipo. Es un producto en desarrollo activo con arquitectura escalable, código limpio y documentación técnica estructurada. Esta propuesta presenta su adopción como solución central de intranet para [Empresa]. +> App no es un prototipo. Es un producto en desarrollo activo con arquitectura escalable, código limpio y documentación técnica estructurada. Esta propuesta presenta su adopción como solución central de intranet para [Empresa]. --- @@ -33,17 +33,17 @@ Las empresas modernas operan con herramientas fragmentadas: un sistema para rese | Aprobaciones por correo | Sin trazabilidad, cuellos de botella operativos | | Directorio desactualizado | Información incorrecta, baja colaboración | -**Kinetix resuelve todos estos problemas en una sola plataforma integrada.** +**App resuelve todos estos problemas en una sola plataforma integrada.** --- -## 2. La Solución: Plataforma Kinetix +## 2. La Solución: Plataforma App ### 2.1 Visión General ``` ┌─────────────────────────────────────────────────────────────┐ -│ KINETIX INTRANET │ +│ App INTRANET │ │ "Un ecosistema. Todos los procesos internos en uno." │ ├──────────────┬──────────────┬──────────────┬────────────────┤ │ Directorio │ Espacios │ Workflows │ Info Hub CMS │ @@ -115,14 +115,14 @@ Usuario → App Angular → Azure Entra ID (login) Acceso según rol: employee | manager | admin ``` -**Ninguna contraseña se almacena en Kinetix.** La autenticación es 100% delegada a Active Directory de la empresa. +**Ninguna contraseña se almacena en App.** La autenticación es 100% delegada a Active Directory de la empresa. --- ## 4. Arquitectura del Sistema ``` -kinetix/ +App/ ├── frontend/ ← SPA Angular 18 (Standalone Components + Signals) │ └── src/app/ │ ├── core/ ← Guards SSO, interceptores HTTP, auth services @@ -147,7 +147,7 @@ kinetix/ ## 5. Diseño e Interfaz de Usuario -Kinetix utiliza el **Executive Suite Design System**, un sistema de diseño corporativo premium desarrollado a medida: +App utiliza el **Executive Suite Design System**, un sistema de diseño corporativo premium desarrollado a medida: - **Paleta:** Ivory `#F5F4F1` + Negro sofisticado `#0F0D0A` + Dorado bronce `#C9973C` - **Tarjetas Joya (Blackjack System):** Fondos oscuros en Navy, Plum, Viridian, Espresso para los módulos principales @@ -227,7 +227,7 @@ Kinetix utiliza el **Executive Suite Design System**, un sistema de diseño corp | Documentación técnica de operación | Runbook de DevOps | | Soporte post-lanzamiento (30 días incluidos) | Canal de soporte dedicado | -**Hito:** 🚀 Go-Live oficial de Kinetix para [Empresa]. +**Hito:** 🚀 Go-Live oficial de App para [Empresa]. --- @@ -235,7 +235,7 @@ Kinetix utiliza el **Executive Suite Design System**, un sistema de diseño corp ```mermaid gantt - title Roadmap de Implementación Kinetix + title Roadmap de Implementación App dateFormat YYYY-MM-DD section Fase 0 — Diagnóstico Kickoff & Auditoría AD :2026-07-01, 7d @@ -266,7 +266,7 @@ gantt | Concepto | Descripción | Estimado | |---|---|---| -| **Licencia de Plataforma** | Uso de la plataforma Kinetix base | A negociar | +| **Licencia de Plataforma** | Uso de la plataforma App base | A negociar | | **Implementación e Integración** | Fases 0–1: Setup, SSO, infraestructura | 4–6 semanas | | **Desarrollo de Módulos Core** | Fase 2: Directorio, Espacios, Workflow | 6 semanas | | **Módulos Secundarios** | Fase 3: CMS, Ticketing | 4 semanas | @@ -282,9 +282,9 @@ gantt --- -## 10. Por Qué Kinetix sobre Alternativas +## 10. Por Qué App sobre Alternativas -| Criterio | Kinetix | SharePoint | Confluence | Desarrollo a medida desde cero | +| Criterio | App | SharePoint | Confluence | Desarrollo a medida desde cero | |---|---|---|---|---| | Integración AD nativa | ✅ | ✅ | ⚠️ Plugin | ✅ | | Personalizable 100% | ✅ | ⚠️ Limitado | ⚠️ Limitado | ✅ | @@ -321,8 +321,8 @@ gantt **Jess Miller** Arquitecta de Software Senior · Full-Stack Engineer -📧 jess@kinetix.dev -🔗 github.com/kinetix +📧 jess@App.dev +🔗 github.com/App --- diff --git a/doc/walkthrough.md b/doc/walkthrough.md index 77fc232..449c62b 100644 --- a/doc/walkthrough.md +++ b/doc/walkthrough.md @@ -1,20 +1,20 @@ # Walkthrough: Módulo de Autogestión de Espacios y Activos con Asistente IA -Se ha completado la arquitectura e implementación del módulo de gestión de reservas en el frontend de Kinetix utilizando Angular 18 (Standalone Components, Signals y enrutamiento perezoso). +Se ha completado la arquitectura e implementación del módulo de gestión de reservas en el frontend de App utilizando Angular 18 (Standalone Components, Signals y enrutamiento perezoso). ## Cambios Realizados ### Servicio de IA -- [ia-parser.service.ts](file:///d:/Jess/agent/Kinetix/frontend/src/app/features/reservas/services/ia-parser.service.ts): Servicio de comunicación NLP/IA con parseo heurístico inteligente como fallback de desarrollo para auto-llenar los formularios mediante prompts en lenguaje natural. +- [ia-parser.service.ts](file:///d:/Jess/agent/App/frontend/src/app/features/reservas/services/ia-parser.service.ts): Servicio de comunicación NLP/IA con parseo heurístico inteligente como fallback de desarrollo para auto-llenar los formularios mediante prompts en lenguaje natural. ### Componentes de Presentación e Interfaz -- [calendar-booking.component.ts](file:///d:/Jess/agent/Kinetix/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.ts): Vista del calendario interactivo a pantalla completa con soporte de vistas y filtrado reactivo de salas, escritorios y activos. -- [calendar-booking.component.html](file:///d:/Jess/agent/Kinetix/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html): Estructura visual responsiva estilizada con el **Executive Suite Design System** (paleta Ivory y tarjetas joya de alta gama). -- [reserva-form.component.ts](file:///d:/Jess/agent/Kinetix/frontend/src/app/features/reservas/reserva-form/reserva-form.component.ts): Lógica del formulario de reserva que escucha `QueryParams` para pre-seleccionar fecha/tipo de recurso y gestiona el binding con el Asistente IA. -- [reserva-form.component.html](file:///d:/Jess/agent/Kinetix/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html): Diseño elegante de dos paneles que destaca la interfaz del Asistente de IA y provee inputs completamente accesibles. +- [calendar-booking.component.ts](file:///d:/Jess/agent/App/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.ts): Vista del calendario interactivo a pantalla completa con soporte de vistas y filtrado reactivo de salas, escritorios y activos. +- [calendar-booking.component.html](file:///d:/Jess/agent/App/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html): Estructura visual responsiva estilizada con el **Executive Suite Design System** (paleta Ivory y tarjetas joya de alta gama). +- [reserva-form.component.ts](file:///d:/Jess/agent/App/frontend/src/app/features/reservas/reserva-form/reserva-form.component.ts): Lógica del formulario de reserva que escucha `QueryParams` para pre-seleccionar fecha/tipo de recurso y gestiona el binding con el Asistente IA. +- [reserva-form.component.html](file:///d:/Jess/agent/App/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html): Diseño elegante de dos paneles que destaca la interfaz del Asistente de IA y provee inputs completamente accesibles. ### Enrutamiento -- [app.routes.ts](file:///d:/Jess/agent/Kinetix/frontend/src/app/app.routes.ts): Agregado el cargado perezoso (Lazy Loading) para las rutas principales del módulo de reservas (`/reservas/calendario` y `/reservas/nuevo`). +- [app.routes.ts](file:///d:/Jess/agent/App/frontend/src/app/app.routes.ts): Agregado el cargado perezoso (Lazy Loading) para las rutas principales del módulo de reservas (`/reservas/calendario` y `/reservas/nuevo`). --- diff --git a/docker-compose.yml b/docker-compose.yml index cc872f5..b5e965f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,12 +3,12 @@ version: '3.8' services: postgres: image: postgres:15-alpine - container_name: kinetix-postgres + container_name: App-postgres restart: always environment: POSTGRES_USER: admin POSTGRES_PASSWORD: supersecretpassword123 - POSTGRES_DB: kinetix_db + POSTGRES_DB: App_db ports: - "5432:5432" volumes: @@ -16,10 +16,10 @@ services: pgadmin: image: dpage/pgadmin4 - container_name: kinetix-pgadmin + container_name: App-pgadmin restart: always environment: - PGADMIN_DEFAULT_EMAIL: admin@kinetix.com + PGADMIN_DEFAULT_EMAIL: admin@App.com PGADMIN_DEFAULT_PASSWORD: adminpassword123 ports: - "5050:80" diff --git a/frontend/angular.json b/frontend/angular.json index 9541579..af7e532 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -3,7 +3,7 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "kinetix-frontend": { + "App-frontend": { "projectType": "application", "schematics": { "@schematics/angular:component": { @@ -17,7 +17,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/kinetix-frontend", + "outputPath": "dist/App-frontend", "index": "src/index.html", "main": "src/main.ts", "polyfills": "zone.js", @@ -55,10 +55,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "kinetix-frontend:build:production" + "browserTarget": "App-frontend:build:production" }, "development": { - "browserTarget": "kinetix-frontend:build:development" + "browserTarget": "App-frontend:build:development" } }, "defaultConfiguration": "development" diff --git a/frontend/package.json b/frontend/package.json index cdde0c8..8526e39 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,5 @@ { - "name": "kinetix-frontend", + "name": "App-frontend", "version": "1.0.0", "private": true, "scripts": { @@ -28,4 +28,4 @@ "@types/node": "^18.11.12", "typescript": "~5.4.2" } -} +} \ No newline at end of file diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index e5c209b..fd83398 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -1,17 +1,17 @@ import { Component, inject } from '@angular/core'; -import { RouterOutlet, Router } from '@angular/router'; +import { RouterOutlet, Router, RouterLink } from '@angular/router'; import { CommonModule } from '@angular/common'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet, CommonModule], + imports: [RouterOutlet, CommonModule, RouterLink], styleUrls: ['./app.component.css'], template: `
- +
Consorcio · 2026
@@ -34,7 +32,7 @@ import { CommonModule } from '@angular/common';
- © 2026 Kinetix + © 2026 App Todos los derechos reservados diff --git a/frontend/src/app/core/guards/auth.guard.ts b/frontend/src/app/core/guards/auth.guard.ts index 7e1c001..a8bf23d 100644 --- a/frontend/src/app/core/guards/auth.guard.ts +++ b/frontend/src/app/core/guards/auth.guard.ts @@ -3,7 +3,7 @@ import { Router, CanActivateFn } from '@angular/router'; export const authGuard: CanActivateFn = (route, state) => { const router = inject(Router); - const token = localStorage.getItem('kinetix_token'); + const token = localStorage.getItem('App_token'); if (token) { return true; diff --git a/frontend/src/app/features/auth/login.component.html b/frontend/src/app/features/auth/login.component.html index ac16761..a51f512 100644 --- a/frontend/src/app/features/auth/login.component.html +++ b/frontend/src/app/features/auth/login.component.html @@ -10,13 +10,13 @@ -

KINETIX

+

App

@@ -28,67 +28,55 @@
- +
- +
@if (errorMsg()) { - + } @@ -102,25 +90,28 @@ @@ -130,6 +121,8 @@ + \ No newline at end of file diff --git a/frontend/src/app/features/auth/login.component.ts b/frontend/src/app/features/auth/login.component.ts index 271a314..f01c631 100644 --- a/frontend/src/app/features/auth/login.component.ts +++ b/frontend/src/app/features/auth/login.component.ts @@ -12,10 +12,10 @@ import { CommonModule } from '@angular/common'; export class LoginComponent { private router = inject(Router); - email = signal(''); + email = signal(''); password = signal(''); errorMsg = signal(''); - loading = signal(false); + loading = signal(false); getVal(event: Event): string { return (event.target as HTMLInputElement).value; @@ -39,12 +39,12 @@ export class LoginComponent { // Simulate authentication delay setTimeout(() => { - if (em.includes('admin') || em.includes('kinetix') || em.includes('@')) { - const userName = em.split('@')[0]; + if (em.includes('admin') || em.includes('App') || em.includes('@')) { + const userName = em.split('@')[0]; const displayName = userName.charAt(0).toUpperCase() + userName.slice(1); - localStorage.setItem('kinetix_token', 'local-mock-jwt-token-998822'); - localStorage.setItem('kinetix_user', JSON.stringify({ + localStorage.setItem('App_token', 'local-mock-jwt-token-998822'); + localStorage.setItem('App_user', JSON.stringify({ name: displayName, email: em, role: 'Consortium Manager', @@ -63,10 +63,10 @@ export class LoginComponent { this.loading.set(true); setTimeout(() => { - localStorage.setItem('kinetix_token', 'ad-jwt-token-microsoft-entra-id-2026'); - localStorage.setItem('kinetix_user', JSON.stringify({ + localStorage.setItem('App_token', 'ad-jwt-token-microsoft-entra-id-2026'); + localStorage.setItem('App_user', JSON.stringify({ name: 'Jess Miller', - email: 'jess.miller@kinetix-consortium.com', + email: 'jess.miller@App-consortium.com', role: 'Chief Architect & Director', avatar: 'JM' })); diff --git a/frontend/src/app/features/dashboard/dashboard.component.ts b/frontend/src/app/features/dashboard/dashboard.component.ts index de8458f..78b865e 100644 --- a/frontend/src/app/features/dashboard/dashboard.component.ts +++ b/frontend/src/app/features/dashboard/dashboard.component.ts @@ -307,7 +307,7 @@ interface UserProfile {
Social - Posteo automatizado e inmediato en las redes de comunicación interna de Kinetix. + Posteo automatizado e inmediato en las redes de comunicación interna de App.
@@ -441,7 +441,7 @@ interface UserProfile {
-

Proyección de Adopción Kinetix

+

Proyección de Adopción App

ROI +85%
@@ -503,13 +503,13 @@ interface UserProfile {

Eficiencia en Resolución de Incidencias

-

Reducción drástica del tiempo de respuesta mediante el módulo de ticketing inteligente de Kinetix.

+

Reducción drástica del tiempo de respuesta mediante el módulo de ticketing inteligente de App.

- +
- Kinetix V2 (Actual) + App V2 (Actual)
12 min @@ -587,10 +587,10 @@ interface UserProfile {
- Lanzamiento Kinetix V2 Intranet + Lanzamiento App V2 Intranet Autor: Director de Tecnología (SSO AD)
-
@@ -671,7 +671,7 @@ export class DashboardComponent implements OnInit { // Sincronized Active Directory Active Profile signal currentUser = signal({ name: 'Invitado', - email: 'guest@kinetix.com', + email: 'guest@App.com', role: 'Employee', avatar: 'G' }); @@ -749,7 +749,7 @@ export class DashboardComponent implements OnInit { ngOnInit() { // Load Active Directory profile from local storage - const userStr = localStorage.getItem('kinetix_user'); + const userStr = localStorage.getItem('App_user'); if (userStr) { try { const user = JSON.parse(userStr); @@ -815,8 +815,8 @@ export class DashboardComponent implements OnInit { } logout() { - localStorage.removeItem('kinetix_token'); - localStorage.removeItem('kinetix_user'); + localStorage.removeItem('App_token'); + localStorage.removeItem('App_user'); this.router.navigate(['/login']); } } diff --git a/frontend/src/app/features/directorio/directorio.component.ts b/frontend/src/app/features/directorio/directorio.component.ts index ad5ebbd..67e6e1b 100644 --- a/frontend/src/app/features/directorio/directorio.component.ts +++ b/frontend/src/app/features/directorio/directorio.component.ts @@ -25,71 +25,6 @@ interface Employee { template: `
- - -
@@ -246,7 +181,6 @@ interface Employee { export class DirectorioComponent implements OnInit { readonly router = inject(Router); - sidebarCollapsed = signal(false); contactToast = signal(''); searchQuery = ''; @@ -255,12 +189,6 @@ export class DirectorioComponent implements OnInit { private _searchSignal = signal(''); private _deptSignal = signal('ALL'); - navItems = [ - { label: 'Panel Principal', route: '/dashboard', icon: '⚡' }, - { label: 'Directorio AD', route: '/directorio', icon: '👤' }, - { label: 'Gestión de Espacios', route: '/reservas/calendario', icon: '📅' }, - ]; - employees = signal([]); filteredEmployees = computed(() => { @@ -282,14 +210,6 @@ export class DirectorioComponent implements OnInit { ngOnInit(): void { } - toggleSidebar(): void { - this.sidebarCollapsed.update(v => !v); - } - - isActiveRoute(route: string): boolean { - return this.router.url === route || this.router.url.startsWith(route + '/'); - } - onSearch(value: string): void { this._searchSignal.set(value); } diff --git a/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html b/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html index 6a53758..a8fbfa5 100644 --- a/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html +++ b/frontend/src/app/features/reservas/calendar-booking/calendar-booking.component.html @@ -24,16 +24,13 @@ J V S - + @for (day of calendarDays().slice(0, 35); track day.getTime()) { - - {{ day.getDate() }} - + + {{ day.getDate() }} + }
@@ -43,19 +40,23 @@

Categorías

@@ -67,7 +68,7 @@
- +
@@ -85,159 +86,149 @@
- + @if (currentView() === 'week') { -
- -
-
GMT-04
- @for (day of currentWeekDays(); track day.getTime()) { -
- {{ weekDays[day.getDay()] }} - - {{ day.getDate() }} - -
- } -
- - -
-
- @for (hour of hours; track hour) { -
- {{ formatHour(hour) }} -
- } -
- - - @for (day of currentWeekDays(); track day.getTime()) { -
- @if (isToday(day)) { -
- } - - @for (hour of hours; track hour) { -
- } - - - @for (event of getEventsForDay(day); track event.id) { -
- {{ event.start | date:'shortTime' }} - {{ event.end | date:'shortTime' }} - {{ event.title }} - {{ event.resourceName }} -
- } -
- } +
+ +
+
GMT-04
+ @for (day of currentWeekDays(); track day.getTime()) { +
+ {{ weekDays[day.getDay()] }} + + {{ day.getDate() }} +
+ }
+ + +
+
+ @for (hour of hours; track hour) { +
+ {{ formatHour(hour) }} +
+ } +
+ + + @for (day of currentWeekDays(); track day.getTime()) { +
+ @if (isToday(day)) { +
+ } + + @for (hour of hours; track hour) { +
+ } + + + @for (event of getEventsForDay(day); track event.id) { +
+ {{ event.start | date:'shortTime' }} - {{ event.end | date:'shortTime' }} + {{ event.title }} + {{ event.resourceName }} +
+ } +
+ } +
+
} @if (currentView() === 'month') { -
- -
- @for (dayName of weekDays; track $index) { -
- {{ dayName }} -
- } -
- - -
- @for (day of calendarDays(); track day.getTime()) { -
- -
- - {{ day.getDate() }} - -
- -
- @for (event of getEventsForDay(day); track event.id) { -
-
{{ event.title }}
-
{{ event.resourceName }}
-
- } -
-
- } +
+ +
+ @for (dayName of weekDays; track $index) { +
+ {{ dayName }}
+ }
+ + +
+ @for (day of calendarDays(); track day.getTime()) { +
+ +
+ + {{ day.getDate() }} + +
+ +
+ @for (event of getEventsForDay(day); track event.id) { +
+
{{ + event.title }}
+
+ {{ event.resourceName }}
+
+ } +
+
+ } +
+
} @if (currentView() === 'day') { -
- -
-
GMT-04
-
- {{ weekDays[currentDate().getDay()] }} - - {{ currentDate().getDate() }} - -
-
- - -
-
- @for (hour of hours; track hour) { -
- {{ formatHour(hour) }} -
- } -
- - -
- @if (isToday(currentDate())) { -
- } - - @for (hour of hours; track hour) { -
- } - - - @for (event of getEventsForDay(currentDate()); track event.id) { -
- {{ event.start | date:'shortTime' }} - {{ event.end | date:'shortTime' }} - {{ event.title }} - {{ event.resourceName }} -
- } -
+
+ +
+
GMT-04
+
+ {{ weekDays[currentDate().getDay()] }} + + {{ currentDate().getDate() }} +
+ + +
+
+ @for (hour of hours; track hour) { +
+ {{ formatHour(hour) }} +
+ } +
+ + +
+ @if (isToday(currentDate())) { +
+ } + + @for (hour of hours; track hour) { +
+ } + + + @for (event of getEventsForDay(currentDate()); track event.id) { +
+ {{ event.start | date:'shortTime' }} - {{ event.end | date:'shortTime' }} + {{ event.title }} + {{ event.resourceName }} +
+ } +
+
+
}
- + \ No newline at end of file diff --git a/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html b/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html index 78add73..f9b576c 100644 --- a/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html +++ b/frontend/src/app/features/reservas/reserva-form/reserva-form.component.html @@ -1,6 +1,6 @@
@@ -114,9 +103,11 @@ Personas: - -