EMPLEAME es una plataforma web de empleos en Bolivia que conecta buscadores con empleadores de manera eficiente y moderna. La plataforma permite a los buscadores crear perfiles profesionales detallados con experiencia laboral, educación y habilidades, buscar ofertas de trabajo con filtros avanzados, postularse a posiciones y recibir notificaciones en tiempo real sobre el estado de sus aplicaciones. Por otro lado, los empleadores pueden publicar ofertas de trabajo, revisar candidatos, gestionar múltiples publicaciones, acceder a suscripciones premium para destacar sus ofertas y acceder a funcionalidades avanzadas, entre otros aspectos.
Problema que resuelve
El mercado laboral tradicional tiene limitaciones a la hora de manejar datos vitales para la búsqueda de empleo, la eficiencia es baja y la comunicación entre empleadores y buscadores es deficiente. EMPLEAME busca modernizar este proceso ofreciendo una plataforma digital que facilite la conexión entre ambas partes, mejorando la experiencia del usuario y aumentando las oportunidades de empleo.
EMPLEAME backend
EMPLEAME Backend es la aplicación del lado del servidor que maneja la lógica de negocio, la gestión de datos y las integraciones con servicios externos. Es una API enfocada en servir datos de manera eficiente mediante GraphQL y gestionar eventos en tiempo real vía WebSockets, soportando roles complejos como administradores (ADMIN, SUPERUSER) y usuarios regulares como lo son empleadores (EMPLOYER) y buscadores de empleo (SEEKER).
Stack tecnológico
- Backend
-
TypeScript: Lenguaje principal del proyecto
-
Node.js: Entorno de ejecución del servidor
-
NestJS: Framework para estructurar el servidor
-
GraphQL: Lenguaje de consulta para APIs
-
- Base de datos
-
PostgreSQL: Base de datos relacional para almacenamiento de datos
-
TypeORM: ORM para interactuar con la base de datos
-
- Comunicación en tiempo real
-
Socket.IO (WebSockets): Comunicación en tiempo real entre cliente y servidor
-
- Autenticación y seguridad
-
JWT: JSON Web Tokens para autenticación segura
- 🔑 bcrypt: Librería para el hash de contraseñas
-
Passport.js: Middleware de autenticación
-
- Servicios externos e integraciones
-
Cloudinary: Servicio en la nube para gestión y optimización de imágenes
-
Stripe: Plataforma de pagos en línea
-
- Validación
-
class-validator: Validación de datos entrantes
-
class-transformer: Transformación de objetos
- 🥳 Joi: Validación de esquemas
-
- Utilidades
- 🕰️ Luxon: Manejo de fechas y horas
-
Sharp: Librería para procesamiento de imágenes en el servidor
- Herramientas de desarrollo
- 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
-
Commitlint: Linting de mensajes de commit para mantener un historial limpio
Funcionalidades
- Registro y autenticación diferenciada: Permite a los usuarios registrarse y usar la aplicación como
EMPLOYERoSEEKER, cada uno con flujos de registro personalizados utilizando a los guards para proteger rutas y funcionalidades según el rol. - Gestión de ofertas de trabajo (empleadores): Los empleadores pueden crear, editar y eliminar ofertas de trabajo, así como destacarlas mediante una suscripción premium.
- Gestión de ofertas de trabajo (buscadores): Los buscadores pueden buscar ofertas de trabajo utilizando filtros avanzados, postularse a las ofertas y gestionar sus postulaciones, además de marcar favoritos para revisarlos más tarde y visualizar las publicaciones destacadas primero.
- Notificaciones en tiempo real: Los usuarios reciben actualizaciones instantáneas sobre el estado de sus aplicaciones y otras actividades relevantes.
- Ecosistema de pagos: Integración con Stripe para manejar suscripciones premium y pagos de manera segura y eficiente.
- Nivel administrador: Los administradores pueden gestionar usuarios, ofertas de trabajo y acceder a estadísticas detalladas sobre la plataforma.
- Autenticación multicanal: Soporte para autenticación tradicional con email y contraseña, así como autenticación social mediante Google y Facebook.
- Sistema de confirmación y verificación: Implementación de flujos de confirmación de email para nuevos registros como también para recuperación de contraseña. Los tokens para las confirmaciones tienen fecha de expiración y son de un solo uso.
- Gestión de imágenes: Integración con Cloudinary para el almacenamiento y procesamiento de imágenes, permitiendo a los usuarios subir fotos de perfil y a los empleadores subir imágenes relacionadas con sus ofertas de trabajo.
Módulos
- User/Auth/Confirmation: Módulos para gestionar el ciclo de vida del usuario.
- Seeker: Gestión del perfil del candidato, información de experiencia laboral, educación, habilidades, postulaciones, favoritos, etc.
- Employer: Gestión de empleadores y empresas, gestión de ofertas de trabajo, información corporativa, relación con publicaciones, etc.
- Post: Gestión de las publicaciones de empleo, con toda su información relevante, filtros, etc.
- Subscription/Transaction/Stripe: Módulos para las suscripciones premium para empleadores y monetización de la plataforma.
- Notifications: Módulo para gestionar las notificaciones en tiempo real a través de WebSockets, incluyendo la creación, envío y gestión de notificaciones para los usuarios.
- Upload: Servicio agnóstico para la gestión de archivos.
- Interaction: Gestión de interacciones entre usuarios con publicaciones, incluyendo postulaciones, favoritos y visualizaciones.
- Featured: Maneja la lógica de publicaciones destacadas como la duración, costo, expiración y renovación.
- Admin: Funcionalidades exclusivas para administradores del sistema incluyendo dashboards, estadísticas y herramientas de gestión.
Modelo de datos
El modelo de datos de EMPLEAME está diseñado para soportar la complejidad de las relaciones entre usuarios, ofertas de trabajo, postulaciones y otros aspectos clave de la plataforma.
Puedes ver también el modelo de datos completo en diagrams.net: Modelo de datos de EMPLEAME.
Prerrequisitos
- NodeJS, igual o superior a la versión 18.x
- npm
- Docker (opcional, para la base de datos PostgreSQL)
Instalación y ejecución (backend)
-
Clona el repositorio:
git clone https://github.com/igidio/emplea.me-backend-services.git cd emplea.me-backend-services -
Instala las dependencias:
npm install -
Configuración del entorno: Renombra el archivo de entorno de ejemplo y configura las variables:
cp .template.env .env -
Configuración de la base de datos: Si tienes Docker instalado, configura el archivo 📄docker-compose.yaml con los datos de tu instancia de PostgreSQL. Luego, ejecuta el siguiente comando para iniciar la base de datos PostgreSQL:
docker-compose up -d -
Ejecuta migraciones y seeds: Asegúrate de que la base de datos esté corriendo y ejecuta las migraciones y seeds para preparar el esquema:
# Ejecutar migraciones de TypeORM npm run typeorm:generate # Ejecutar seeders para poblar datos iniciales npm run seed:fresh -
Inicia la aplicación:
npm run start:dev
Si todo está configurado correctamente, la aplicación debería estar corriendo en 🔗http://localhost:3000 y el playground de GraphQL en 🔗http://localhost:3000/graphql.
Extra: si quieres usar husky para hooks de git y commit lints, ejecuta:
npx husky init
EMPLEAME frontend
EMPLEAME Frontend es la aplicación del lado del cliente que proporciona la interfaz de usuario para la plataforma de búsqueda de empleo EMPLEAME. Construida con Nuxt 3 y Vue 3, esta aplicación ofrece una experiencia de usuario fluida y responsiva, permitiendo a los usuarios interactuar con las funcionalidades del backend de manera eficiente.
Stack tecnológico
- Frontend
-
TypeScript: Lenguaje principal del proyecto
-
Nuxt 3: Framework de interfaz de usuario
-
Vue 3: Framework de interfaz de usuario
-
Vite: Herramienta de construcción rápida
-
Pinia: Gestión de estado para el manejo global de datos
-
- UI
-
Tailwind 3: Framework de estilos
-
Nuxt UI: Componentes preconstruidos y reutilizables
-
Iconify: Iconos
-
- Obtención de datos
-
Apollo Client: Cliente GraphQL para la obtención de datos
-
- Comunicación en tiempo real
-
Socket.IO (WebSockets): Comunicación en tiempo real entre cliente y servidor
-
- Validación
-
Yup: Validación de esquemas para formularios
-
- Utilidades
-
Unovis: Librería de visualización de datos para gráficos y diagramas
- 📅 Date-fns: Librería para el manejo de fechas
- 📆 Vue Datepicker: Componente de calendario para selección de fechas
- ✂️ Vue Advanced Cropper: Componente para recorte avanzado de imágenes
- 🔑 Crypto-js: Librería para encriptación y hashing de datos
-
- Herramientas de desarrollo
- 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
-
Commitlint: Linting de mensajes de commit para mantener un historial limpio
Funcionalidades
-
Autenticación multicanal: La aplicación implementa un sistema completo de autenticación con múltiples opciones de inicio de sesión, incluyendo autenticación tradicional con email y contraseña, así como autenticación social mediante Google y Facebook. Los tokens de autenticación se almacenan de manera segura en las cookies con opciones de seguridad adecuadas para proteger la información del usuario.
-
Sistema de registro progresivo: El proceso de registro se divide en pasos para mejorar la experiencia del usuario. Estos pasos pueden ser distintos de acuerdo al rol seleccionado (administrador, empleador o buscador de empleo), permitiendo una personalización del proceso de registro según las necesidades de cada tipo de usuario.
-
Vista detallada de publicaciones: Las publicaciones de empleo muestran información fundamental como el título, descripción, requisitos, beneficios, ubicación y tipo de empleo pero la información de contacto solo se muestra a los usuarios autenticados que hayan postulado a la oferta o que sean empleadores, esto con el fin de mostrar las interacciones de un post, y si el empleador cuenta con una suscripción premium, también conocer los datos del postulante.
-
Dashboard de administrador: Los administradores tienen acceso a un panel de control donde pueden gestionar usuarios, ofertas de trabajo y acceder a estadísticas detalladas sobre la plataforma.
-
Suscripciones premium: Los empleadores pueden suscribirse a planes premium que les permiten destacar sus ofertas de trabajo y acceder a funcionalidades avanzadas para mejorar la visibilidad de sus publicaciones.
-
Gestión de asistentes: Los empleadores con suscripción pueden invitar asistentes para gestionar las publicaciones, este paso se realiza mediante un flujo de invitación por email.
Prerrequisitos
- Instancia de EMPLEAME backend corriendo.
- NodeJS, igual o superior a la versión 18.x
- npm
Instalación y ejecución (frontend)
-
Clona el repositorio
git clone https://github.com/igidio/emplea.me-frontend.git cd emplea.me-frontend -
Instala las dependencias
npm install -
Configura las variables de entorno
Crea un archivo 📄.env a partir de la plantilla:
cp .env.template .env -
Actualiza las variables de entorno.
-
Inicia la aplicación
npm run dev
La aplicación estará disponible en 🔗http://localhost:3000. Asegúrate de que el backend esté corriendo y configurado correctamente para que la aplicación frontend pueda comunicarse con él.
Datos de prueba
Desde el servidor se incluyen un conjunto de datos por defecto que se pueden cargar mediante los seeders. Estos datos incluyen usuarios de prueba, ofertas de trabajo, postulaciones y otros elementos necesarios para probar las funcionalidades de la plataforma. Algunos de los usuarios de prueba disponibles en el seeder de usuarios incluyen:
| Rol | Username | Contraseña | |
|---|---|---|---|
SUPERUSER | salva123 | salva@example.com | password123 |
ADMIN | mariana | mariana@example.com | passW0RD222 |
EMPLOYER | pamela | pamela@example.com | passW0RD333 |
SEEKER | juan | juan@example.com | passW0RD444 |
Algunas de las tarjetas de crédito / débito de prueba disponibles para Stripe son:
| Tipo de tarjeta | Número de tarjeta |
|---|---|
| Visa | 4242424242424242 |
| Visa (débito) | 4000056655665556 |
| Mastercard | 5555555555554444 |
| Mastercard (débito) | 5200828282828210 |
| American Express | 378282246310005 |
| UnionPay | 6200000000000005 |
| UnionPay | 6200000000000047 |
| Discover | 6011111111111117 |
| Discover | 6011981111111113 |
La fecha de expiración de las tarjetas de prueba puede ser cualquier fecha futura, y el código de seguridad (CVC) puede ser cualquier número de tres dígitos (o cuatro dígitos para American Express).
Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo 📄LICENSE.md de los proyectos para más detalles.