EMPLEAME is a web job platform from Bolivia that connects job seekers with employers in an efficient and modern way. The platform allows job seekers to create detailed professional profiles with work experience, education and skills, search job listings using advanced filters, apply to positions and receive real-time notifications about the status of their applications. Employers can post job openings, review candidates, manage multiple posts, access premium subscriptions to highlight their listings and use advanced features, among other capabilities.

Job listings with options in the sidebar
Job listings with options in the sidebar

Problem it solves

The traditional job market has limitations when it comes to handling vital data for job searching: efficiency is low and communication between employers and job seekers is poor. EMPLEAME aims to modernize this process by offering a digital platform that facilitates the connection between both parties, improving the user experience and increasing employment opportunities.

'Mis Negocios' view showing a company's profile
'Mis Negocios' view showing a company's profile

EMPLEAME backend

EMPLEAME Backend is the server-side application that handles business logic, data management and integrations with external services. It is an API focused on serving data efficiently via GraphQL and managing real-time events via WebSockets, supporting complex roles such as administrators (ADMIN, SUPERUSER) and regular users like employers (EMPLOYER) and job seekers (SEEKER).

Technology stack

  • Backend
    • stack/typescript icon TypeScript: Main language of the project
    • stack/nodejs icon Node.js: Server runtime environment
    • stack/nest icon NestJS: Framework to structure the server
    • stack/graphql icon GraphQL: Query language for APIs
  • Database
    • stack/postgres icon PostgreSQL: Relational database for data storage
    • stack/typeorm icon TypeORM: ORM used to interact with the database
  • Real-time communication
    • stack/socketio icon Socket.IO (WebSockets): Real-time communication between client and server
  • Authentication and security
    • stack/jwt icon JWT: JSON Web Tokens for secure authentication
    • 🔑 bcrypt: Library for password hashing
    • stack/passport icon Passport.js: Authentication middleware
  • External services and integrations
    • stack/cloudinary icon Cloudinary: Cloud service for image management and optimization
    • stack/stripe icon Stripe: Online payment platform
  • Validation
    • stack/typestack icon class-validator: Validation for incoming data
    • stack/typestack icon class-transformer: Object transformation utilities
    • 🥳 Joi: Schema validation
  • Utilities
    • 🕰️ Luxon: Date and time handling
    • stack/sharp_js icon Sharp: Library for image processing on the server
  • Development tools
    • 🐶 Husky: Git hooks to automate development tasks
    • stack/commitlint icon Commitlint: Linting commit messages to keep a clean history

Features

  • Differentiated registration and authentication: Allows users to register and use the app as EMPLOYER or SEEKER, each with customized registration flows, utilizing route guards to protect features based on user roles.
  • Job posting management (employers): Employers can create, edit and remove job postings, as well as promote them via a premium subscription.
  • Job search and applications (job seekers): Job seekers can search job listings with advanced filters, apply to openings and manage their applications, bookmark favorites to review later and see highlighted posts first.
  • Real-time notifications: Users receive instant updates about their application status and other relevant activities.
  • Payments ecosystem: Stripe integration for secure and efficient handling of premium subscriptions and payments.
  • Admininstrator level: Administrators can manage users, job postings and access detailed platform statistics.
  • Multichannel authentication: Support for traditional email/password authentication as well as social login with Google and Facebook.
  • Confirmation and verification system: Implemented flows for email confirmation for new registrations and password recovery. Tokens for confirmations are single-use and time-limited.
  • Image handling: Cloudinary integration for image storage and processing, allowing users to upload profile photos and employers to upload images related to job postings.
Registration form with Google sign-in and personal fields
Registration form with Google sign-in and personal fields

Modules

  • User/Auth/Confirmation: Modules to manage the user lifecycle.
  • Seeker: Management of candidate profiles, work experience, education, skills, applications, favorites, etc.
  • Employer: Management of employers and companies, job postings, corporate information and post relations.
  • Post: Management of job postings with all relevant information and filters.
  • Subscription/Transaction/Stripe: Modules for premium subscriptions for employers and platform monetization.
  • Notifications: Module to handle real-time notifications via WebSockets, including creation, delivery and management.
  • Upload: Storage-agnostic service for file management.
  • Interaction: Manages interactions between users and posts, including applications, favorites and views.
  • Featured: Handles logic for featured posts such as duration, cost, expiration and renewal.
  • Admin: Admin-exclusive features including dashboards, statistics and management tools.
Listings view
Listings view

Data model

EMPLEAME’s data model is designed to support complex relationships between users, job listings, applications and other core aspects of the platform.

EMPLEAME data model
EMPLEAME data model

You can also see the complete data model in diagrams.net: EMPLEAME data model.

Prerequisites

  • NodeJS version 18.x or higher
  • npm
  • Docker (optional, for PostgreSQL)

Installation and running (backend)

  1. Clone the repository:

    git clone https://github.com/igidio/emplea.me-backend-services.git
    cd emplea.me-backend-services
  2. Install dependencies:

    npm install
  3. Environment configuration: Rename the example env file and set the variables:

    cp .template.env .env
  4. Database setup: If you have Docker installed, configure the 📄docker-compose.yaml file with your PostgreSQL settings. Then run the following command to start the PostgreSQL database:

    docker-compose up -d
  5. Run migrations and seeds: Make sure the database is running and execute migrations and seeds to prepare the schema:

    # Run TypeORM migrations
    npm run typeorm:generate
    # Run seeders to populate initial data
    npm run seed:fresh
  6. Start the application:

    npm run start:dev

If everything is configured correctly, the app should be running at 🔗http://localhost:3000 and the GraphQL playground at 🔗http://localhost:3000/graphql.

Extra: if you want to use husky for git hooks and commit lints, run:

npx husky init

EMPLEAME frontend

EMPLEAME Frontend is the client-side application that provides the user interface for the EMPLEAME job platform. Built with Nuxt 3 and Vue 3, this app offers a smooth and responsive user experience, allowing users to interact with backend features efficiently.

Employer premium posting with job details
Employer premium posting with job details

Technology stack

  • Frontend
    • stack/typescript icon TypeScript: Main language of the project
    • stack/nuxt icon Nuxt 3: User interface framework
    • stack/vue icon Vue 3: UI framework
    • stack/vite icon Vite: Fast build tool
    • stack/pinia icon Pinia: State management for global data handling
  • UI
    • stack/tailwind icon Tailwind 3: Styling framework
    • stack/nuxt icon Nuxt UI: Prebuilt and reusable components
    • stack/iconify icon Iconify: Icon library
  • Data fetching
    • stack/apollo icon Apollo Client: GraphQL client for data fetching
  • Real-time communication
    • stack/socketio icon Socket.IO (WebSockets): Real-time communication between client and server
  • Validation
    • stack/yup icon Yup: Schema validation for forms
  • Utilities
    • stack/unovis icon Unovis: Data visualization library for charts and diagrams
    • 📅 Date-fns: Librería for date handling
    • 📆 Vue Datepicker: Calendar component for date selection
    • ✂️ Vue Advanced Cropper: Component for advanced image cropping
    • 🔑 Crypto-js: Library for data encryption and hashing
  • Development tools
    • 🐶 Husky: Git hooks to automate development tasks
    • stack/commitlint icon Commitlint: Linting commit messages to keep a clean history
Payment form with card fields and plan summary
Payment form with card fields and plan summary

Features

  • Multichannel authentication: Implements a full authentication system with multiple login options, including traditional email/password and social login with Google and Facebook. Authentication tokens are securely stored in cookies with appropriate security options to protect user information.
  • Progressive registration: The registration process is divided into steps to improve user experience. These steps may differ depending on the selected role (admin, employer or job seeker), allowing customization of the registration flow for each user type.
  • Detailed job view: Job listings display key information such as title, description, requirements, benefits, location and job type. Contact information is only shown to authenticated users who have applied to the job or to employers, so interactions are secure; if the employer has a premium subscription, they can also see applicant contact details.
  • Admin dashboard: Administrators have access to a control panel to manage users, job posts and detailed platform metrics.
  • Premium subscriptions: Employers can subscribe to premium plans that allow them to highlight listings and access advanced features to improve visibility.
  • Assistant management: Employers with subscriptions can invite assistants to help manage postings via an email invitation flow.
Admin dashboard with metrics and charts
Admin dashboard with metrics and charts

Prerequisites

  • Running EMPLEAME backend instance.
  • NodeJS version 18.x or higher
  • npm

Installation & running (frontend)

  1. Clone the repository

    git clone https://github.com/igidio/emplea.me-frontend.git
    cd emplea.me-frontend
  2. Install dependencies

    npm install
  3. Configure environment variables

    Create a 📄.env file from the template:

    cp .env.template .env
  4. Update environment variables.

  5. Start the app

    npm run dev

The app will be available at 🔗http://localhost:3000. Ensure the backend is running and configured so the frontend can communicate with it.

Test data

The server includes a set of default data that can be loaded via seeders. These include test users, job posts, applications and other elements needed to test platform features. Some sample users available in the user seeder include:

RoleUsernameEmailPassword
SUPERUSERsalva123salva@example.compassword123
ADMINmarianamariana@example.compassW0RD222
EMPLOYERpamelapamela@example.compassW0RD333
SEEKERjuanjuan@example.compassW0RD444

Some test credit/debit cards for Stripe are:

Card typeCard number
Visa4242424242424242
Visa (debit)4000056655665556
Mastercard5555555555554444
Mastercard (debit)5200828282828210
American Express378282246310005
UnionPay6200000000000005
UnionPay6200000000000047
Discover6011111111111117
Discover6011981111111113

The test card expiration date can be any future date, and the security code (CVC) can be any three digits (or four digits for American Express).

Sign in with traditional and social login options
Sign in with traditional and social login options
Premium plans with comparison cards
Premium plans with comparison cards

License

This project is licensed under the MIT License. See the 📄LICENSE.md file in the projects for details.

© 2026 igidio