fetch API) API layer Amazon API Gateway (REST API, Lambda proxy integration) Compute AWS Lambda (Python 3.x) Database Amazon DynamoDB Access control IAM roles & policies Hosting Netlify (frontend) Version control Git & GitHubPOST /expenses Add a new expense GET /expenses?userId={id} Get all expenses for a user DELETE /expenses/{expenseId}?userId={id} Delete a specific expense GET /report?userId={id} Get total spend + category-wise breakdownevent['queryStringParameters'] came back empty even though Postman showed the request going through fine.AccessDeniedException in CloudWatch until fixed.Decimal, which json.dumps() can't serialize by default. Fixed with a custom default= handler.Access-Control-Allow-Origin header in every Lambda response and enabling CORS at the API Gateway resource level for the preflight OPTIONS request to succeed.{Id} in API Gateway silently mismatched event['pathParameters']['id'] in Python, producing a KeyError that only made sense after reading the CloudWatch traceback.Posted Aug 26, 2026
Developed a serverless expense tracker using AWS services and deployed on Netlify.
1
3