EvansHills Recruitment

Full-stack recruitment platform for Zimbabwean talent and global employers. Candidates browse/apply with resumes; employers request talent. Deployed (Vercel + Render).

React (Vite)React RouterTanStack Query v5React Hook Form + ZodNode.js/ExpressMongoDB Atlas

Context

  • Lead developer — architecture, frontend, API, DB, deployment, and tests
  • Timeline: ~4–6 weeks in 2025 (iterative)
  • Team: Solo (with async guidance)
  • React (Vite)
  • React Router
  • TanStack Query v5
  • React Hook Form + Zod
  • Node.js/Express
  • MongoDB Atlas
  • Multer
  • JWT

Problem → Goals

Problem

  • No streamlined way for Zimbabwean job seekers to apply to overseas roles or for employers to request vetted talent.

Goals

  • Enable end-to-end candidate application with resume upload.
  • Capture employer and contact inquiries reliably to a database.
  • Ship a responsive, fast UI and a secure API with JWT auth.
  • Make it deployable with a clear CI/CD path.

Solution

Frontend is a React (Vite) SPA using React Router and TanStack Query for server state. Forms use React Hook Form + Zod for validation. The backend is an Express API with JWT authentication, Mongoose models, and Multer for file uploads. In dev, Vite proxies /api; in production, the frontend reads an env-based API URL to hit the Render API. Deployed FE on Vercel, API on Render.

Highlights

  • Apply flow with resume upload (Multer + MongoDB persistence).
  • Validation via React Hook Form + Zod with inline errors.
  • Service package request form persisted to DB.
  • Employer & Contact inquiry intake with success/error toasts.
  • JWT auth with protected endpoints and ‘My Applications’.
  • Jest + RTL tests for key forms.
  • Env-based config for API base URL (dev vs prod).

Screenshots

EvansHills home hero
Landing page hero and nav
Jobs list
Browse jobs list view
Job detail
Single job detail with Apply CTA
Apply form
Candidate application form with validation
Service packages
Job seeker pricing and service packages
Employer inquiry form
Employer request form

Results & Impact

  • Clearer application flow; fewer steps with client-side validation.
  • Forms persist to MongoDB with reliable error states and toasts.
  • Lean Vite build with cached data reduces refetching.
  • One-click deploys to Vercel/Render with safe API switching.

What I’d improve next

  • Move resumes to S3 with signed URLs.
  • Admin UI for CRUD job + application review.
  • Cypress/Playwright tests for apply/request/auth flows.
  • Email triggers (SendGrid) for new applications/inquiries.