← /projectsCase study · Internship project at DawoodTech · 2026
DawoodTech NextGen logoDawoodTech NextGen

SmartHire AI — Job Portal

A MERN job portal where AI reviews resumes and drafts job descriptions, with role-based dashboards for students, recruiters, and admins.

Full-stack engineer — AI integration, backend, frontend

User roles
3 (student/recruiter/admin)
AI features
Resume review + JD generation
Realtime
Socket.IO notifications
Deployment
Vercel + Azure App Service
ReactRedux ToolkitNode.jsExpressMongoDBSocket.IOGemini APIOpenAI APICloudinaryAzure
Demo & preview

See it running.

A recorded product walkthrough plus screenshots taken from the project report.

Problem

Campus hiring portals usually do one thing well — listings, applications, or messaging — and leave the AI work to ChatGPT in another tab. Students don't get real feedback on their resumes, and recruiters spend hours writing job descriptions from scratch for roles they post repeatedly.

  • Give students AI-driven, role-aware resume feedback inside the portal.
  • Let recruiters generate solid first-draft job descriptions in seconds.
  • Keep students, recruiters, and admins in separate, permission-scoped experiences.
Approach

How I built it.

01

Architecture

Classic MERN stack with JWT auth and role-based middleware on every protected route. Frontend state is managed with Redux Toolkit; Socket.IO handles realtime notifications for new applications and status changes. File uploads (resumes, company logos) go through Multer and land in Cloudinary.

  • Express + Mongoose models per domain (User, Job, Application, Internship).
  • Role-based middleware gates routes per student/recruiter/admin.
  • Socket.IO rooms scoped per user for targeted notifications.
02

AI integration

Resume review and job description generation are abstracted behind a single AI service layer so the provider (Gemini or OpenAI) can be swapped without touching the rest of the codebase. Prompts are templated server-side — clients never send raw prompts — and outputs are validated before being returned.

  • Server-side prompt templates keyed off job role + resume content.
  • Provider abstraction so Gemini / OpenAI are interchangeable.
  • Response validation to catch malformed or unsafe model output.
03

Delivery

Frontend deployed on Vercel, backend on Azure App Service, MongoDB Atlas as the managed database. Environment-scoped secrets, CORS locked to known origins, and structured logging on the API so issues are debuggable in production.

Results

Shipped a working three-role portal with end-to-end flows: students apply and get AI resume feedback, recruiters post AI-assisted listings and review applicants in real time, and admins manage the platform. The AI layer is provider-agnostic, so swapping models is a config change, not a rewrite.

  • Three fully separated role experiences with shared auth.
  • AI resume review and JD generation live in production flows.
  • Realtime notifications wired across application lifecycle events.
Learnings

What I'd carry forward.

  • Hiding the AI provider behind a service interface paid for itself the first time we swapped models.
  • Role-based middleware is much easier to reason about than per-route guard checks scattered through controllers.
  • Socket.IO rooms scoped per user beat broadcasting + client-side filtering for both correctness and bandwidth.

More case studies

Browse other deep-dives or jump back to the full project list.