A modern, serverless web application for managing employee records, built entirely on AWS. This project demonstrates a full CRUD operational system using a static frontend hosted on S3 and a serverless backend powered by Lambda and DynamoDB.
I have documented the entire process of building this application, from setting up the AWS resources to writing the code, in my Hashnode blog.
👉 Read the Full Guide on Hashnode
The application follows a serverless architecture pattern:
- Frontend: Hosted on S3 and distributed via CloudFront for global low latency.
- API: API Gateway REST API handles HTTP requests and routes them to Lambda.
- Backend: Node.js Lambda functions execute business logic (Create, List, Update, Delete).
- Database: DynamoDB provides fast, scalable NoSQL storage for employee data.
- Storage: S3 is used for storing employee profile photos (uploaded via secure presigned URLs).
Frontend:
- HTML5, CSS3, JavaScript (Vanilla)
- Bootstrap 5 (UI Framework)
- Glassmorphism & Modern UI Animations
AWS Services:
- AWS Lambda: Serverless compute for backend logic.
- Amazon DynamoDB: NoSQL database.
- Amazon S3: Static hosting and object storage.
- Amazon API Gateway: RESTful API endpoints.
- Amazon CloudFront: Content Delivery Network (CDN).
- AWS IAM: Security and permission management.
Here is the proof of the deployed application and the AWS resources configured.
The fully functional employee management dashboard running on the web.

Four Node.js functions handle the CRUD operations: CreateEmployee, ListEmployees, UpdateEmployee, and DeleteEmployee.

REST API resources configured to trigger the respective Lambda functions.

Two buckets were created: one for hosting the static website code and another for storing uploaded employee photos.

Screenshot not available, but here is the configuration used:
- Table Name:
Employees - Partition Key:
id(String) - Billing Mode: Pay-per-request (On-demand)
This table stores all employee metadata including name, role, email, and the S3 URL for their photo.
CloudFront is set up to serve the static website from the S3 bucket with HTTPS and low latency.

An IAM role (EmpManagerLambdaRole) was created to grant the Lambda functions permission to access DynamoDB, S3, and CloudWatch Logs.

