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
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.