🛒 The Problem
4 friends order groceries from Weee, Instacart or DoorDash.
One skips snacks 🍪, one avoids milk 🥛, another only wants oranges 🍊...
Guess who’s stuck splitting the bill manually? Yup—you. 🙃
🤖 The Fix
Upload invoice image to the app
AI (Claude via Amazon Bedrock) extracts items
Friends choose which items they consumed
The creator finalizes the split on Splitwise
No more spreadsheets. No more guesswork. No more group chat wars.
💻 How We Built It
Frontend: ReactJS + TailwindCSS (deployed on Netlify)
Backend: ExpressJS API (deployed on Render)
🔁 The Architectural MasterMind
Upload Invoice: Frontend sends metadata → receives a signed S3 URL from Lambda → uploads image directly to Amazon S3
S3 Triggers: On upload, S3 triggers s3-to-sqs-dispatcher Lambda → pushes a message to SQS Queue (decouples upload from parsing)
AI Parsing: Another Lambda (invoice-processor) polls SQS, fetches the image from S3, and invokes Claude 3 via Amazon Bedrock
Parsed response is stored in MongoDB, marking the job as "Done" so users can interact with the results in real time
📦 Lambda Layers
🔗 MongoDB Layer: Used to connect to MongoDB Atlas securely and reuse DB logic
🤖 Bedrock SDK Layer: Handles Bedrock client logic and Claude inference with image + prompt payloads
🖼️ Architecture Diagrams


🧱 Challenges We Ran Into
Understanding Bedrock payload format for Claude with image inputs
S3 event conflict errors when multiple Lambdas tried to listen on the same bucket
CloudFormation rollbacks from non-empty bucket deletion and invalid config overlaps
📦 Accomplishments that we're proud of
Built a fully functional MVP that solves a real-life pain point
Integrated Claude Vision API with a polished serverless pipeline
Achieved clean modularity with separate Lambdas for upload, dispatch, and parsing
Enabled real-time preference selection for group members with backend persistence
📦 What we learned
How to structure and deploy event-driven serverless architectures using S3, SQS, and Lambda
Best practices for secure secret management and multi-region compatibility
Real-world usage of Amazon Bedrock with Claude for image + text parsing
💻 What's next for SplitMate - AI Powered Expense Splitter
📱 Build a mobile version with camera-based invoice uploads
Built With
- amazon-web-services
- bedrock
- daisy
- express.js
- lambda
- nextjs
- node.js
- s3
- shadcn
- sqs
Log in or sign up for Devpost to join the conversation.