Entrevistador Inteligente es una plataforma que utiliza inteligencia artificial para ayudar a los usuarios a prepararse para entrevistas laborales de manera efectiva. Los usuarios pueden cargar su currículum vitae y completar un formulario que incluye la descripción del trabajo y el nombre de la empresa a la que desean postularse.
Instrucciones sobre cómo instalar el proyecto y configurar el entorno de desarrollo.
- Prerrequisitos:
- Asegúrate de tener instalado Node.js versión 20 en adelante. Puedes descargarlo aquí.
- Además, necesitarás tener Angular CLI instalado globalmente. Si aún no lo tienes, puedes instalarlo ejecutando el siguiente comando:
npm install -g @angular/cli
.
- Clona el repositorio:
git clone https://github.com/EntrevistadorInteligente/landing-entrevistador.git
- Instala las dependencias:
npm install
- Ejecuta el proyecto:
npm start
Si deseas contribuir a este proyecto, sigue estos pasos:
- Haz un fork del repositorio
- Crea una nueva rama con tu nombre ejemplo, frailejon:
git checkout -b feature/frailejon
- Realiza tus cambios y haz commits:
git commit -m 'Añade una nueva característica'
- Sube tus cambios:
git push origin feature/frailejon
- Envía una solicitud de extracción (Pull Request)
Por favor, asegúrate de seguir nuestras pautas de contribución.
Este proyecto sigue una estructura organizativa específica para mantener una arquitectura limpia y modular. A continuación se detalla la organización de carpetas y los componentes principales en cada una:
En esta carpeta se encuentran componentes y servicios fundamentales del núcleo de la aplicación:
- alert: Componente para mostrar alertas y mensajes al usuario.
- carrusel: Componente para mostrar contenido en forma de carrusel.
- contacto: Componente que representa un formulario de contacto.
- help: Componente para proporcionar ayuda contextual a los usuarios dentro de la aplicación.
- form-empresa: Componente para formulario relacionado con la empresa.
- loader: Componente de carga para indicar procesos en curso.
- login: Componente para la funcionalidad de inicio de sesión.
- registro: Componente para el registro de usuarios.
- error: Este componente se muestra cuando ajgún error del lado del servidor.
- rutas-no-visibles: Este guard protege las rutas de los componentes de error para evitar que sean accesibles.
- HttpErrorInterceptor: Este interceptor captura las respuestas HTTP con errores y te permite manejarlas de forma personalizada.
- LoaderInterceptor: Este interceptor muestra un indicador de carga mientras se espera una respuesta HTTP.
- OfflineInterceptor: Este interceptor te permite manejar la situación cuando el usuario no tiene conexión a internet.
- signal-r: Servicio que permite la comunicación en tiempo real utilizando SignalR.
- alert: Servicio que permite gestionar alertas en toda la aplicación.
- error: Servicio que permite gestionar errores de forma global en la aplicación.
- loader: Servicio que permite mostrar un indicador de carga mientras se espera una respuesta de una operación asincrónica.
- network: Servicio que permite verificar la conexión a internet y el estado de la red.
- offline: Servicio que permite gestionar el comportamiento de la aplicación cuando el usuario no tiene conexión a internet.
Esta carpeta contiene el módulo y los componentes específicos para la página de aterrizaje:
- landing: Este es el componente padre de las landing page del usuario logueado y sin loguearse.
- home: Componentes relacionados con la página de inicio sin login.
- home-login: Componentes específicos para la página de inicio de sesión.
- zona-entrevista: Componente para la entrevista al usuario
Aquí se encuentran los componentes, modelos y servicios compartidos entre varios módulos:
- menu: Componente para la navegación principal de la aplicación.
- footer: Componente para mostrar el pie de página de la aplicación.
- perfil: Componente para mostrar y editar el perfil del usuario.
-
Definiciones de modelos y dtos utilizados en toda la aplicación.
-
formulario-dto:
export class FormularioDto { empresa: string; perfil: string; seniority: string; pais: string; descripcionVacante: string; constructor( empresa: string = '', perfil: string = '', seniority: string = '', pais: string = '', descripcionVacante: string = '') { this.empresa = empresa; this.perfil = perfil; this.seniority = seniority; this.pais = pais; this.descripcionVacante = descripcionVacante; } }
- Descripción: DTO para almacenar información de un formulario.
- Campos:
empresa
: Nombre de la empresa.perfil
: Tipo de perfil buscado.seniority
: Nivel de seniority.pais
: País de ubicación.descripcionVacante
: Descripción de la vacante.
-
vista-previa-entrevista-dto:
export class VistaPreviaEntrevistaDto { pregunta: string; constructor(pregunta: string){ this.pregunta = pregunta; } }
- Descripción: DTO para almacenar una pregunta de entrevista.
- Campos:
pregunta
: Texto de la pregunta.
-
preguntas-dto:
export class PreguntasDto { respuesta: string; pregunta: string; constructor( respuesta: string = '', pregunta: string = '') { this.respuesta = respuesta; this.pregunta = pregunta; } }
- Descripción: DTO para almacenar una pregunta y su respuesta.
- Campos:
pregunta
: Texto de la pregunta.respuesta
: Texto de la respuesta.
-
entrevista-feedback-dto:
export class EntrevistaFeedbackDto { respuesta: string; pregunta: string; feedback: string; constructor( respuesta: string = '', pregunta: string = '', feedback: string = '') { this.respuesta = respuesta; this.pregunta = pregunta; this.feedback = feedback; } }
- Descripción: DTO para almacenar una respuesta de entrevista con su correspondiente feedback.
- Campos:
respuesta
: Texto de la respuesta.pregunta
: Texto de la pregunta asociada.feedback
: Retroalimentación sobre la respuesta.
-
estado-entrevista-dto:
export class EstadoEntrevistaDto { fecha: Date; estado: string; fuente: string; error: string; constructor( fecha: Date = null, estado: string = '', fuente: string = '', error: string = '') { this.fecha = fecha; this.estado = estado; this.fuente = fuente; this.error = error; } }
- Descripción: DTO para almacenar el estado de una entrevista.
- Campos:
fecha
: Fecha y hora del estado.estado
: Estado de la entrevista.fuente
: Fuente de la información del estado.error
: Descripción del error (si lo hay).
-
feedback-dto:
import { EntrevistaFeedbackDto } from "./entrevista-feedback-dto"; export class FeedbackDto { idEntrevista: string; procesoEntrevista: EntrevistaFeedbackDto[]; constructor( idEntrevista: string = '', procesoEntrevista: EntrevistaFeedbackDto[] = []) { this.idEntrevista = idEntrevista; this.procesoEntrevista = procesoEntrevista; } }
- Descripción: DTO para almacenar el feedback de una entrevista.
- Campos:
idEntrevista
: ID de la entrevista asociada.procesoEntrevista
: Lista de respuestas de entrevista con sus correspondientes feedbacks.
-
hoja-de-vida-dto:
export class HojaDeVidaDto { uuid: string; nombre: string; perfil: string; seniority: string; tecnologiasPrincipales: Array<TecnologiasPrincipales>; experienciasLaborales: Array<ExperienciasLaborales>; habilidadesTecnicas: Array<HabilidadesTecnicas>; certificaciones: Array<Certificaciones>; proyectos: Array<Proyectos>; nivelIngles: string; otrasHabilidades: Array<OtrasHabilidades>; constructor( uuid: string = "", nombre: string = "", perfil: string = "", seniority: string = "", tecnologiasPrincipales: Array<TecnologiasPrincipales> = [], experienciasLaborales: Array<ExperienciasLaborales> = [], habilidadesTecnicas: Array<HabilidadesTecnicas> = [], certificaciones: Array<Certificaciones> = [], proyectos: Array<Proyectos> = [], nivelIngles: string = "", otrasHabilidades: Array<OtrasHabilidades> = [] ) { this.uuid = uuid; this.nombre = nombre; this.perfil = perfil; this.seniority = seniority; this.tecnologiasPrincipales = tecnologiasPrincipales; this.experienciasLaborales = experienciasLaborales; this.habilidadesTecnicas = habilidadesTecnicas; this.certificaciones = certificaciones; this.proyectos = proyectos; this.nivelIngles = nivelIngles; this.otrasHabilidades = otrasHabilidades; } }
- Descripción: DTO para almacenar información de una hoja de vida.
- Campos:
uuid
: Identificador único de la hoja de vida.nombre
: Nombre del titular de la hoja de vida.perfil
: Perfil del titular.seniority
: Nivel de seniority del titular.tecnologiasPrincipales
: Lista de tecnologías principales.experienciasLaborales
: Lista de experiencias laborales.habilidadesTecnicas
: Lista de habilidades técnicas.certificaciones
: Lista de certificaciones.proyectos
: Lista de proyectos.nivelIngles
: Nivel de inglés.otrasHabilidades
: Otras habilidades.
-
TecnologiasPrincipales:
export interface TecnologiasPrincipales { name: string; }
-
HabilidadesTecnicas:
export interface HabilidadesTecnicas { name: string; }
-
ExperienciasLaborales:
export interface ExperienciasLaborales { name: string; }
-
Certificaciones:
export interface Certificaciones { name: string; }
-
Proyectos:
export interface Proyectos { name: string; }
-
OtrasHabilidades:
export interface OtrasHabilidades { name: string; }
-
Servicios compartidos entre diferentes partes de la aplicación.
- alert-service: Servicio para mostrar alertas y mensajes de notificación en la aplicación.
- dark-mode: Servicio para gestionar el modo oscuro en la interfaz de usuario.
- feedback: Servicio para recopilar comentarios y retroalimentación de los usuarios.
- integrador: Servicio para integrar datos y funcionalidades de otros sistemas externos.
- login: Servicio para gestionar la autenticación y el inicio de sesión de los usuarios.
- message-service: Servicio para enviar y recibir mensajes dentro de la aplicación, como chat o notificaciones instantáneas.
- sse.service: Servicio para manejar la conexión a los eventos de servidor enviados (Server-Sent Events o SSE) desde dos URLs diferentes (
sseUrlOrquestador
ysseUrlFeedback
).
Esta carpeta contiene recursos estáticos como imágenes utilizadas en la aplicación.
- Angular: Framework de desarrollo de aplicaciones web.
- PrimeNG: Biblioteca de componentes de UI para Angular.
- Bootstrap 5: Framework de diseño front-end para desarrollo web moderno.
- Angular CLI: Herramienta de línea de comandos para Angular.
- PrimeIcons: Iconos adicionales para PrimeNG.
- ngx-bootstrap: Librería de componentes Bootstrap para Angular.
- angular-oauth2-oidc: Librería para la autenticación y autorización utilizando OAuth 2.0 y OpenID Connect en aplicaciones Angular.
Entrevistador Inteligente se encuentra en desarrollo activo y se están agregando nuevas funcionalidades y mejoras continuamente.
¡Apreciamos cualquier contribución al proyecto!
Este proyecto es de código abierto.
Si tienes alguna pregunta o necesitas ayuda, no dudes en ponerte en contacto con nosotros a través de Discord