A complete serverless full-stack application built with AWS Lambda, DynamoDB, API Gateway, and React. This project demonstrates modern web development practices with a scalable serverless architecture, responsive design, and automated CI/CD pipelines.
This application was built as a comprehensive coding challenge showcasing:
- Complete CRUD functionality for task management
- Serverless backend with AWS Lambda and DynamoDB
- Modern React frontend with Material-UI
- Responsive design for all device sizes
- CI/CD pipelines with GitHub Actions
- Infrastructure as Code with Serverless Framework
- Comprehensive testing and documentation
- Framework: Serverless Framework
- Runtime: Node.js 18.x
- Database: AWS DynamoDB with Global Secondary Index
- API: AWS API Gateway (REST) with CORS
- Functions: 5 AWS Lambda functions for CRUD operations
- Validation: Joi schema validation
- Testing: Jest with comprehensive test coverage
- Framework: React 18 with hooks and context
- UI Library: Material-UI (MUI) v5
- State Management: React Context + useReducer
- HTTP Client: Axios with interceptors
- Routing: React Router v6
- Date Handling: date-fns
- Notifications: Notistack for user feedback
- Version Control: Git with feature branch workflow
- CI/CD: GitHub Actions for multi-stage deployments
- Infrastructure: Infrastructure as Code with Serverless Framework
- Hosting: Netlify for frontend, AWS for backend
- Monitoring: AWS CloudWatch for logs and metrics
task-manager/
βββ backend/ # Serverless backend
β βββ src/
β β βββ handlers/ # Lambda function handlers
β β β βββ createTask.js
β β β βββ getTasks.js
β β β βββ getTask.js
β β β βββ updateTask.js
β β β βββ deleteTask.js
β β βββ models/ # Data models and validation
β β β βββ Task.js
β β βββ utils/ # Utility functions
β β βββ dynamodb.js
β β βββ response.js
β βββ serverless.yml # Infrastructure configuration
β βββ package.json
β βββ README.md
βββ frontend/ # React frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β β βββ Layout/
β β βββ pages/ # Page components
β β β βββ TaskList.js
β β β βββ TaskDetail.js
β β β βββ CreateTask.js
β β β βββ EditTask.js
β β β βββ NotFound.js
β β βββ services/ # API services
β β β βββ api.js
β β β βββ taskService.js
β β βββ context/ # State management
β β β βββ TaskContext.js
β β βββ config/ # Configuration
β β βββ environment.js
β βββ public/
β βββ package.json
β βββ README.md
βββ .github/
β βββ workflows/ # CI/CD pipelines
β βββ backend-deploy.yml
β βββ frontend-deploy.yml
βββ docs/ # Documentation
β βββ API.md # API documentation
β βββ DEPLOYMENT.md # Deployment guide
βββ scripts/ # Development scripts
β βββ setup.sh # Automated setup script
βββ README.md # This file
- β Create Tasks: Rich form with validation and date picker
- β View Tasks: Detailed task information with status tracking
- β Update Tasks: In-place editing with real-time validation
- β Delete Tasks: Safe deletion with confirmation dialogs
- β List Tasks: Paginated list with advanced filtering
- π± Responsive Design: Optimized for mobile, tablet, desktop, and large screens
- π¨ Modern UI: Clean, intuitive Material Design interface
- β‘ Real-time Updates: Live status updates and notifications
- π Advanced Filtering: Filter by status, priority, and search text
- π Performance: Optimized loading states and error handling
- π Input Validation: Comprehensive client and server-side validation
- π‘οΈ Error Handling: Graceful error handling with user-friendly messages
- π State Management: Efficient state management with React Context
- π API Integration: Robust API layer with retry logic and caching
- π§ͺ Testing: Unit and integration tests for critical functionality
# Clone the repository
git clone <repository-url>
cd task-manager
# Run automated setup
./scripts/setup.sh
# Start development environment
./start-dev.sh- Node.js 18+ and npm
- AWS CLI configured
- Serverless Framework CLI (
npm install -g serverless)
cd backend
npm install
npm run dynamodb:install
npm run dynamodb:start &
npm run offlinecd frontend
npm install
# Create .env.local with REACT_APP_API_URL=http://localhost:3000/dev
npm start- Production Frontend: https://taskmanager.netlify.app (will be available after deployment)
- Development API: Available after running
./deploy.sh dev - Production API: Available after running
./deploy.sh prod
- Complete CRUD operations for tasks
- Responsive design demonstration across device sizes
- Real-time filtering and search
- Modern Material-UI interface
- Error handling and loading states
| Method | Endpoint | Description |
|---|---|---|
| GET | /tasks |
List all tasks with optional filtering |
| GET | /tasks/{id} |
Get specific task by ID |
| POST | /tasks |
Create new task |
| PUT | /tasks/{id} |
Update existing task |
| DELETE | /tasks/{id} |
Delete task |
# Get all tasks
curl -X GET "https://api-url/tasks"
# Create task
curl -X POST "https://api-url/tasks" \
-H "Content-Type: application/json" \
-d '{"title": "New Task", "priority": "high"}'
# Update task status
curl -X PUT "https://api-url/tasks/task-id" \
-H "Content-Type: application/json" \
-d '{"status": "completed"}'For complete API documentation, see docs/API.md.
The application uses GitHub Actions for automated deployments:
- Development: Push to
developbranch β Auto-deploy to dev environment - Production: Push to
mainbranch β Auto-deploy to production environment
# Deploy to development
./deploy.sh dev
# Deploy to production
./deploy.sh prodFor detailed deployment instructions, see docs/DEPLOYMENT.md.
./run-tests.sh# Backend tests
cd backend && npm test
# Frontend tests
cd frontend && npm test- Backend: Unit tests for Lambda handlers and utilities
- Frontend: Component tests and integration tests
- API: Endpoint testing with various scenarios
The application is optimized for multiple device sizes:
- Collapsible navigation drawer
- Single-column task layout
- Touch-friendly interface
- Floating action button for quick access
- Adaptive navigation
- Two-column task grid
- Optimized spacing
- Persistent side navigation
- Three-column task grid
- Full feature set
- Maximum width container
- Enhanced visual hierarchy
- Optimized content spacing
npm run offline # Start local development server
npm run deploy:dev # Deploy to development
npm run deploy:prod # Deploy to production
npm test # Run tests
npm run lint # Run ESLintnpm start # Start development server
npm run build # Build for production
npm test # Run tests
npm run lint # Run ESLintTASKS_TABLE: DynamoDB table nameSTAGE: Deployment stage (dev/prod)REGION: AWS region
REACT_APP_API_URL: Backend API URLREACT_APP_STAGE: Environment stage
- Serverless Functions: 5 optimized Lambda functions
- Database Design: DynamoDB with GSI for efficient queries
- Validation: Joi schemas for robust input validation
- Error Handling: Consistent error responses with proper HTTP codes
- Logging: Structured logging for monitoring and debugging
- Component Structure: Reusable, composable React components
- State Management: Efficient global state with Context API
- Performance: Code splitting and lazy loading
- UX: Loading states, error boundaries, and optimistic updates
- Accessibility: ARIA labels and keyboard navigation support
- Infrastructure as Code: Complete infrastructure defined in code
- Multi-stage Deployments: Separate dev and production environments
- Automated Testing: CI/CD pipeline includes automated testing
- Monitoring: CloudWatch integration for logs and metrics
- Security: Input validation, CORS configuration, and secure deployments
- API Documentation - Complete API reference
- Deployment Guide - Step-by-step deployment instructions
- Backend README - Backend-specific documentation
- Frontend README - Frontend-specific documentation
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- AWS for providing excellent serverless infrastructure
- Material-UI for the comprehensive React component library
- Serverless Framework for simplifying AWS deployments
- React Team for the amazing frontend framework
- GitHub Actions for reliable CI/CD pipelines
Built with β€οΈ as a comprehensive full-stack coding challenge demonstrating modern web development practices.