🛒 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

Architecture Overview

Architecture Overview

🧱 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

Share this project:

Updates