{"id":30569303,"url":"https://github.com/snehit221/cloud-native-task-manager","last_synced_at":"2026-04-11T11:02:45.229Z","repository":{"id":311999642,"uuid":"1045827853","full_name":"snehit221/Cloud-Native-Task-Manager","owner":"snehit221","description":"AWS Cloud Native Task Management Web app served via CloudFront","archived":false,"fork":false,"pushed_at":"2025-09-05T00:37:33.000Z","size":15109,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-05T02:28:59.651Z","etag":null,"topics":["angular","angularmaterial","apigateway","apigateway-proxy","aws","elasticbeanstalk","eventbridge","java","lambda","s3","s3-website","springboot"],"latest_commit_sha":null,"homepage":"https://youtu.be/kqYI2u-pEm8","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snehit221.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-27T19:13:29.000Z","updated_at":"2025-09-05T00:37:36.000Z","dependencies_parsed_at":"2025-08-28T07:39:44.250Z","dependency_job_id":null,"html_url":"https://github.com/snehit221/Cloud-Native-Task-Manager","commit_stats":null,"previous_names":["snehit221/cloud-native-task-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/snehit221/Cloud-Native-Task-Manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snehit221%2FCloud-Native-Task-Manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snehit221%2FCloud-Native-Task-Manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snehit221%2FCloud-Native-Task-Manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snehit221%2FCloud-Native-Task-Manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snehit221","download_url":"https://codeload.github.com/snehit221/Cloud-Native-Task-Manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snehit221%2FCloud-Native-Task-Manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31677819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","angularmaterial","apigateway","apigateway-proxy","aws","elasticbeanstalk","eventbridge","java","lambda","s3","s3-website","springboot"],"created_at":"2025-08-28T20:01:33.273Z","updated_at":"2026-04-11T11:02:45.222Z","avatar_url":"https://github.com/snehit221.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud-Native Task Manager\n\nA full-stack cloud-native application demonstrating modern software development practices with Spring Boot, Angular, and AWS services.\n\n## Cloud Native Project Architecture:\n\n![Architecture Diagram](arc-assets/cloud-arch.png)\n---\n## WATCH THE DEMO VIDEO:\n[AWS Cloud Full Stack Architecture and Demo](https://www.youtube.com/watch?v=kqYI2u-pEm8)\n\n[Swagger Demo for Documentation](https://drive.google.com/file/d/1ZJ1Fie5GHxv4gOC5dujcfX-Gl5JInIfc/view?usp=drive_link)\n\n---\n## URLs when app was deployed to AWS\n**Live Demo**: [https://d3eohu6f5v8xz9.cloudfront.net/](https://d3eohu6f5v8xz9.cloudfront.net/)\n\n**API Documentation**: [http://cloud-task-manager-env.eba-jrrbb8xa.us-east-1.elasticbeanstalk.com/swagger-ui/index.html#/](http://cloud-task-manager-env.eba-jrrbb8xa.us-east-1.elasticbeanstalk.com/swagger-ui/index.html#/)\n\n## Architecture Overview\n\n## Alternative Architecture tradeoffs on Cloud:\n\nInstead of triggering an EventBridge event on task completion, an alternative approach could have been to use Amazon SQS to enqueue completed task events. This would allow downstream services to consume the messages reliably, with built-in retry and dead-letter queue support for fault tolerance. Such a design is well-suited when guaranteed processing of every completed task is critical, and broad event distribution is not required.\n\nAnother option would be to use Amazon SNS, which is ideal when multiple services need to react in parallel to a completed task. For example, one subscriber could update analytics, another could send notifications, and a third could archive historical data. This event-driven, decoupled architecture ensures scalability, flexibility, and aligns with AWS best practices for building resilient cloud-native systems.\n\n\nThis project consists of three main components:\n- **Spring Boot REST API** - Backend service for task management\n- **Angular Frontend** - Responsive web application \n- **AWS Lambda Function** - Event-driven serverless task processing, **used API Gateway as HTTPS proxy**\n\n## Working Web App ScreenShots: \n\n![HomePage via Cloufront](arc-assets/homepage-cloudfront.png)\n\n**Home Page Served via CloudFront**\n\n![New Task Form](arc-assets/new-task-form.png)\n\n**New Task Form**\n\n![S3 objects stored by EventBridge events and Lambda execution](arc-assets/s3-objects.png)\n\n**S3 Objects stored by EventBridge events and Lambda Excecution**\n\n![Swagger REST API Documentation Page](arc-assets/swagger-on-eb.png)\n\n**Swagger REST API Documentation**\n\n## Future Enhancements\n\n- User authentication and authorization\n- Mobile application with React Native\n- Adding a VPC, public and private subnets where I will store the public serving applications in public subnet and the RDS Aurora (it will be better if application is globally scaled) or PostgreSQL database in a private subnet for security.\n- I will automate the Infrastrucure using IaC best practises with Terraform, SAM and CloudFormation for all resources.\n- I will also add AWS CodeBuild and Pipeline flow for automated CI/CD.\n\n## Project Structure\n\n```\ncloud-native-task-manager/\n├── springboot-task-api/         # Java Spring Boot backend\n├── angular-task-ui/             # Angular frontend application\n├── aws-lambda-task-handler/     # Python Lambda function\n├── deployment/                  # Deployment configurations\n└── README.md                   # Project documentation\n```\n\n## Features\n\n### Backend (Spring Boot)\n- RESTful API with full CRUD operations\n- Input validation and error handling\n- Pagination and filtering capabilities\n- Swagger/OpenAPI documentation\n- Comprehensive unit tests\n- CORS configuration for frontend integration\n\n### Frontend (Angular)\n- Responsive user interface with Angular Material\n- Reactive forms with validation\n- Task management CRUD (create, read, update, delete)\n- Pagination and status filtering\n- Real-time validation feedback\n- Success/error message handling\n\n### AWS Lambda\n- Event-driven task completion processing\n- AWS SDK integration with S3\n- Structured logging and error handling\n- Simulated cloud-native workflow\n\n## Technologies Used\n\n- **Backend**: Java 17, Spring Boot 3.x, Spring Data JPA, Maven\n- **Frontend**: Angular 16+, Angular Material, TypeScript, RxJS\n- **Cloud**: AWS Lambda, S3, EC2/Elastic Beanstalk, CloudFront\n- **Database**: H2 (development), PostgreSQL (production)\n- **Testing**: JUnit 5, Mockito, Jasmine, Karma\n\n## Quick Start\n\n\n### 1. Spring Boot Backend\n\n```bash\ncd springboot-task-api\nmvn clean install\nmvn spring-boot:run\n```\n\nThe API will be available at `http://localhost:8080`\n- Swagger UI: `http://localhost:8080/swagger-ui.html`\n- API Docs: `http://localhost:8080/v3/api-docs`\n\n### 2. Angular Frontend\n\n```bash\ncd angular-task-ui\nnpm install\nng serve\n```\n\nThe application will be available at `http://localhost:4200`\n\n### 3. AWS Lambda Function\n\n```bash\ncd aws-lambda-task-handler\npip install -r requirements.txt\n# Deploy using AWS CLI or SAM CLI (see deployment section)\n```\n\n## API Endpoints\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | `/api/tasks` | Get all tasks with pagination |\n| GET | `/api/tasks/{id}` | Get task by ID |\n| POST | `/api/tasks` | Create new task |\n| PUT | `/api/tasks/{id}` | Update existing task |\n| DELETE | `/api/tasks/{id}` | Delete task |\n\n### Query Parameters\n- `page`: Page number (default: 0)\n- `size`: Page size (default: 10)\n- `status`: Filter by status (TODO, IN_PROGRESS, COMPLETED)\n- `sort`: Sort field and direction (e.g., `dueDate,desc`)\n\n## Testing\n\n### Backend Tests\n```bash\ncd springboot-task-api\nmvn test\n```\n\n### Frontend Tests\n```bash\ncd angular-task-ui\nnpm test\nnpm run e2e\n```\n\n## Deployment\n\n### AWS Deployment Architecture\n\n1. **Frontend**: Deployed to S3 with CloudFront distribution\n2. **Backend**: Deployed to EC2/Elastic Beanstalk with RDS\n3. **Lambda**: Event-driven processing with S3 integration\n\n### Deploy Frontend to S3/CloudFront\n\n```bash\ncd angular-task-ui\nnpm run build\naws s3 sync dist/ s3://your-bucket-name\naws cloudfront create-invalidation --distribution-id YOUR_ID --paths \"/*\"\n```\n\n### Deploy Backend to Elastic Beanstalk\n\n```bash\ncd springboot-task-api\nmvn clean package\neb init\neb create\neb deploy\n```\n\n### Deploy Lambda Function\n\n```bash\ncd aws-lambda-task-handler\nsam build\nsam deploy --guided\n```\n\n## Configuration\n\n### Environment Variables\n\n#### Spring Boot\n```properties\nserver.port=5000, // I have given this port after nginx 502 bad gateway debug for Elastic Beanstalk.\nspring.datasource.url=${DATABASE_URL:jdbc:h2:mem:taskdb}\naws.region=${AWS_REGION:us-east-1}\ncors.allowed.origins=${CORS_ORIGINS:http://localhost:4200}\n```\n\n#### Angular\n```typescript\nexport const environment = {\n  production: true,\n  apiUrl: 'https://my-elastic-beanstak-domain/api'\n};\nThe apiUrl is my Elastic Beanstalk backend URL that will serve content to front end\n```\n\n#### Lambda\n```python\nimport os\nS3_BUCKET = os.environ.get('S3_BUCKET', 'task-completion-logs')\nAWS_REGION = os.environ.get('AWS_REGION', 'us-east-1')\n```\n\n## Performance \u0026 Monitoring\n\n- **Backend**: Actuator endpoints for health checks and metrics\n- **Frontend**: Angular DevTools and performance budgets\n- **Lambda**: CloudWatch logs and X-Ray tracing enabled\n\n## Security Features\n\n- CORS configuration for secure cross-origin requests\n- Input validation and sanitization\n- AWS IAM roles and policies while following the princple of least privilege\n- Environment-based configuration management\n\n## Development Workflow\n\n1. **Local Development**: Use H2 database and mock AWS services\n2. **Testing**: Comprehensive unit tests implemented with 88% test coverage for service class\n4. **Monitoring**: CloudWatch dashboards and alerts implemented\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnehit221%2Fcloud-native-task-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnehit221%2Fcloud-native-task-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnehit221%2Fcloud-native-task-manager/lists"}