THis is a full-stack To-Do List Web App powered entirely by AWS Serverless Architecture — built to stay within the AWS Always Free Tier and designed to showcase practical, secure, and scalable cloud development.
👉 https://simple-to-do.pages.dev/home
-
Frontend: React, TypeScript, Vite, Cloudflare Pages
-
Backend: AWS Lambda, Lambda Function URLs, DynamoDB, Cognito
-
Reminders & Messaging: EventBridge Scheduler, SNS
-
Monitoring & Security: CloudWatch, IAM Roles & Policies
-
Sign up, log in, and manage personal to-dos
-
Set email reminders for upcoming tasks
-
Secure JWT-based authentication via AWS Cognito
-
Built entirely using pay-as-you-go serverless services
-
Frontend deployed on Cloudflare Pages
-
Single-table DynamoDB design with flexible schema
-
Real-time reminder scheduling via EventBridge
- Sign up, log in, and manage personal to-dos
- Set email reminders for upcoming tasks
- Built entirely with pay-as-you-go serverless services
- Deployed frontend via Cloudflare Pages
-
Role: Handles sign-up, login, and JWT token issuance
-
Key Configuration:
- User Pool: Manages all users
- App Client: Set as public client (no secret), ideal for SPAs
-
Role: Executes app logic (CRUD, reminders, notifications)
-
Functions:
createTaskLambda
,listTasksLambda
,updateTaskLambda
,deleteTaskLambda
setTaskReminderLambda
,sendReminderNotificationLambda
- Role: Public HTTPS endpoints to invoke each Lambda
- Security: AuthType set to
NONE
; JWTs validated inside functions - CORS: Configured for Cloudflare Pages & local development
-
Role: Stores users and tasks using a single-table design
-
Schema:
PK
: e.g.,USER#<userId>
SK
: e.g.,TASK#<taskId>
-
Flexible schema enables reminder attributes without altering structure
-
Role: Schedules one-time task reminders
-
Workflow:
- Triggers
sendReminderNotificationLambda
at specified time - Deletes itself after execution to stay within free tier limits
- Triggers
-
Role: Sends reminder emails
-
Workflow:
- Lambda publishes reminder → SNS → Sends email to confirmed subscribers
- Role: Collects logs from all Lambda functions for easy debugging
-
Permissions:
- Full access to specific DynamoDB table
- CloudWatch Logs access
- EventBridge Scheduler management
- SNS publishing
- Used By: EventBridge
- Permission: Only invoke
sendReminderNotificationLambda
Each exposed function has a policy allowing public access via HTTPS:
{
"Effect": "Allow",
"Principal": "*",
"Action": "lambda:InvokeFunctionUrl",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "NONE"
}
}
}
JWT-based auth is handled inside each function.
-
User logs in via React frontend (Cloudflare Pages)
-
Frontend sends JWT + task data to
setTaskReminderLambda
-
Lambda:
- Validates JWT
- Updates DynamoDB with task & reminder
- Creates a one-time EventBridge schedule
- EventBridge fires at scheduled time
- Triggers
sendReminderNotificationLambda
- Lambda publishes message to
TaskRemindersTopic
- SNS sends email to subscribed user
- Built with React + Vite
- Hosted on Cloudflare Pages
- Authenticates via AWS Cognito
- Communicates with Lambda URLs via HTTPS + JWTs
- Clone the repo and install frontend dependencies
- Configure
.env
with AWS environment variables (Cognito IDs, Lambda URLs, etc.) - Use tools like Postman or browser for testing Function URLs