A full-stack HR management system built with Next.js, TypeScript, and Node.js API routes.
This project demonstrates role-based authentication, employee management, HR request handling, and live deployment on Vercel.
Project Objective
The goal of this project is to build a basic internal HR system that enables a company to manage employees efficiently.
The system supports Admin and Employee roles, offering features for CRUD operations, dashboards, and HR requests.
##Requirements vs Implementation
- ✔️ Sign-in & Sign-out functionality
- ✔️ JWT-based sessions
- ✔️ Role-based access control (Admin & Employee)
- ✔️ Admin can:
- Add employees (Name, Email, Department, Position, Salary)
- Edit employee details
- Delete employees
- ✔️ Linked login account created automatically for each employee
- ✔️ Demo account:
admin / password123
- Frontend: React, TypeScript, Next.js
- Styling: CSS Modules + Bootstrap 5
- Backend: Node.js via Next.js API routes
- Database (Demo): In-memory store (
/lib/store.ts)- (Production-ready to swap with PostgreSQL/MySQL/MongoDB)
- Cloud Hosting: Vercel
- CI/CD via GitHub → auto deploy to production
- ✔️ Upload employee profile pictures (local storage in
/public/uploads) - ✔️ Dashboard with employee statistics
- ✔️ Deployment via Vercel (cloud demo live)
- ⚡ CI/CD (GitHub → Vercel integration)
- ✔️ Clean, modular code (React components, API routes, typed models)
- ✔️ Fully functional system with Admin & Employee flows
- ✔️ Demonstrated full-stack skills (frontend, backend, APIs, auth)
- ✔️ Live deployment (Vercel link below)
| Layer | Technology Used |
|---|---|
| Frontend | React 18, Next.js 15, TypeScript |
| Backend | Next.js API Routes (Node.js) |
| Styling | Bootstrap 5 + CSS Modules |
| Charts | Recharts (Radial & Bar Charts) |
| Auth | JWT (jwt-decode) |
| Data Store | In-memory demo store (/lib/store.ts) |
| Cloud | Vercel (serverless deployment) |
hr-system/ │── app/ # Next.js App Router pages │ ├── api/ # API routes (employees, hr, stats, leave, etc.) │ └── dashboard/ # Admin & Employee dashboards │── lib/ # Shared in-memory store and type models │── public/ # Static assets (avatars, uploads) │── server.js # Local Express server (for cPanel Node hosting) │── package.json │── next.config.ts │── tsconfig.json │── .env.local # Environment variables (ignored in repo)
Built with ❤️ by Alexander Milligan
🌐 saltirewebsites.com
© 2025 Alexander Milligan. All rights reserved.
This project is provided exclusively for technical assessment purposes.
It may not be copied, modified, distributed, or used outside of the assessment without prior written consent.
🔗 See LICENSE and COPYRIGHT.md for details.