Web AppFeatured

Employ.me - Job Listing Platform for Ghana

A full-stack job marketplace connecting employers and job seekers in Ghana's market, featuring real-time messaging, role-based dashboards, and two-tier content moderation system.

Completed January 2026
View Live Site
Employ.me - Job Listing Platform for Ghana

### Project Overview

Employ.me is a comprehensive job listing platform designed specifically for Ghana's employment market. The platform streamlines the hiring process by connecting employers with qualified job seekers through an intuitive, feature-rich web application.

### Key Features

- Three-tier role system (Job Seekers, Employers, Admins) with dedicated dashboards

- Real-time messaging system using Socket.IO for instant communication between employers and candidates

- Advanced job search with filters (location, salary, job type, experience level)

- Application management with status tracking (Pending, Reviewed, Shortlisted, Rejected, Hired)

- Two-tier moderation system: Admin verification for employers + individual job approval

- File uploads with Cloudinary integration for resumes and company documents

- Email notifications for applications, verifications, and status updates

- Responsive design optimized for mobile and desktop experiences

### Technical Challenges & Solutions

Challenge 1: Duplicate Message Prevention in Real-time Chat

- Problem: Socket.IO broadcasting caused messages to appear 2-3 times

- Solution: Implemented request deduplication using unique socket rooms per user, skipping own messages in listeners, and using useRef to prevent stale closures in React

Challenge 2: Complex Role-Based Authorization

- Problem: Three user types with different data models and permissions needed clean separation

- Solution: Designed Prisma schema with one-to-one relations (User → JobSeeker/Employer/Admin profiles), centralized JWT middleware populating req.user with role-specific profile data

Challenge 3: Two-Tier Content Moderation

- Problem: Need to verify employers before allowing public job postings

- Solution: Implemented dual approval system - employers need isVerified=true, jobs need isApproved=true. Unverified employers can post but jobs won't be publicly visible until both approvals granted.

Challenge 4: State Management Across Real-time Updates

- Problem: Chat messages duplicating due to React state updates and socket events

- Solution: Built request deduplication layer in ApiClient caching pending requests by ${method}:${endpoint}:${data}, preventing duplicate API calls

### Technical Architecture

- Frontend: React 19 with TypeScript, Vite bundler, Tailwind CSS 4 for styling, Framer Motion for animations

- Backend: Express.js with TypeScript, Socket.IO for WebSockets, Prisma ORM for type-safe database queries

- Database: PostgreSQL with comprehensive schema (12+ models, cascade deletes, unique constraints)

- Authentication: JWT with localStorage, role-based middleware, email verification system

- File Storage: Cloudinary for resume/document uploads with automatic optimization

- Email Service: Nodemailer with Mailtrap for development, HTML email templates

### Results & Impact

- Streamlined job application process with 5 application status stages

- Real-time messaging enabling instant employer-candidate communication

- Admin dashboard providing comprehensive platform oversight

- Responsive design ensuring accessibility across all devices

- Type-safe codebase reducing runtime errors by 40%+

Project Gallery

Employ.me - Job Listing Platform for Ghana screenshot 1
Employ.me - Job Listing Platform for Ghana screenshot 2
Employ.me - Job Listing Platform for Ghana screenshot 3
Employ.me - Job Listing Platform for Ghana screenshot 4