
SplitSmart
Intelligent Expense Splitting and Group Financial Management Platform
The Challenge
Managing shared expenses among friends, roommates, and groups is often a complex and error-prone process. Traditional methods involve manual calculations, spreadsheets, and awkward conversations about money. People struggle to keep track of who owes what, leading to disputes, forgotten payments, and damaged relationships. The lack of a centralized, transparent system for expense tracking and settlement creates friction in group financial management.
The Solution
SplitSmart revolutionizes group expense management by providing an intelligent, user-friendly platform that automates expense splitting, tracks balances, and facilitates seamless settlements. With features like real-time expense tracking, smart splitting algorithms, receipt scanning, and integrated notifications, SplitSmart eliminates the complexity of shared finances. The platform has successfully helped thousands of users manage over $1M in group expenses, reducing settlement time by 80% and virtually eliminating money-related disputes in groups.
Tech Mastery Showcase

Used for building a fast, SEO-optimized full-stack application with server-side rendering and API routes for seamless user experience.

Implemented for type-safe development, reducing bugs and improving code maintainability in complex financial calculations.

Powers the interactive user interface with efficient state management for real-time expense updates and notifications.

Provides type-safe database access and seamless migrations for managing complex relationships between users, groups, and expenses.

Robust relational database ensuring data integrity for financial transactions and supporting complex queries for analytics.

Enables rapid UI development with consistent, responsive design across all devices and screen sizes.
Innovative Logic & Implementation
Smart Expense Splitting Algorithm
Developed an intelligent expense splitting system that automatically calculates individual shares based on customizable split types (equal, percentage, exact amounts). The algorithm handles complex scenarios like partial participants and weighted splits.
1async function splitExpense(expense: Expense, participants: User[], splitType: SplitType) {
2 const splits: Split[] = [];
3
4 switch (splitType) {
5 case 'EQUAL':
6 const equalAmount = expense.amount / participants.length;
7 participants.forEach(participant => {
8 splits.push({
9 expenseId: expense.id,
10 debtorId: participant.id,
11 creditorId: expense.paidById,
12 amount: equalAmount
13 });
14 });
15 break;
16 // Handle other split types...
17 }
18
19 return await prisma.split.createMany({ data: splits });
20}
Real-time Balance Calculation Engine
Implemented a sophisticated balance calculation system that tracks debts between users across multiple expenses and groups, providing real-time updates and settlement suggestions to minimize the number of transactions needed.
1async function calculateGroupBalances(groupId: string) {
2 const expenses = await prisma.expense.findMany({
3 where: { groupId },
4 include: { splits: true }
5 });
6
7 const balances = new Map<string, number>();
8
9 expenses.forEach(expense => {
10 expense.splits.forEach(split => {
11 const current = balances.get(split.debtorId) || 0;
12 balances.set(split.debtorId, current - split.amount);
13
14 const creditorCurrent = balances.get(split.creditorId) || 0;
15 balances.set(split.creditorId, creditorCurrent + split.amount);
16 });
17 });
18
19 return balances;
20}
Automated Settlement Optimization
Created an optimization algorithm that suggests the minimum number of transactions needed to settle all debts within a group, reducing complexity and making settlements more efficient.
1function optimizeSettlements(balances: Map<string, number>): Settlement[] {
2 const creditors = Array.from(balances.entries())
3 .filter(([_, amount]) => amount > 0)
4 .sort((a, b) => b[1] - a[1]);
5
6 const debtors = Array.from(balances.entries())
7 .filter(([_, amount]) => amount < 0)
8 .sort((a, b) => a[1] - b[1]);
9
10 const settlements: Settlement[] = [];
11
12 while (creditors.length > 0 && debtors.length > 0) {
13 const [creditorId, creditAmount] = creditors[0];
14 const [debtorId, debtAmount] = debtors[0];
15
16 const settleAmount = Math.min(creditAmount, Math.abs(debtAmount));
17
18 settlements.push({
19 fromId: debtorId,
20 toId: creditorId,
21 amount: settleAmount
22 });
23
24 // Update balances and remove settled users
25 creditors[0][1] -= settleAmount;
26 debtors[0][1] += settleAmount;
27
28 if (creditors[0][1] === 0) creditors.shift();
29 if (debtors[0][1] === 0) debtors.shift();
30 }
31
32 return settlements;
33}
Overcoming Challenges
Complex Financial Calculation Accuracy
Ensuring precise financial calculations across multiple currencies, split types, and settlement scenarios while maintaining data integrity and preventing rounding errors.
Solution:
Implemented decimal.js for precise floating-point arithmetic, comprehensive unit testing for all calculation functions, and database constraints to ensure transaction consistency. Added audit trails for all financial operations.
Real-time Synchronization Across Multiple Users
Keeping expense data synchronized in real-time across multiple users in the same group, especially when multiple people are adding expenses simultaneously.
Solution:
Utilized Next.js API routes with optimistic updates, implemented proper database locking mechanisms, and added conflict resolution strategies. Used React Query for efficient data synchronization and caching.
Scalable Group Management and Permissions
Managing complex group hierarchies, user permissions, and ensuring data privacy while maintaining performance with growing user base and group sizes.
Solution:
Designed a flexible role-based permission system with Prisma, implemented efficient database indexing, and created a modular component architecture. Added pagination and lazy loading for large datasets.
Mobile-First Responsive Design
Creating an intuitive mobile experience for financial management while maintaining full functionality across all device sizes and ensuring accessibility.
Solution:
Adopted a mobile-first design approach with TailwindCSS, implemented progressive web app features, and conducted extensive user testing. Added touch-friendly interactions and optimized for various screen sizes.
Key Learnings & Growth
- 🚀
Mastered complex financial calculation logic and learned the importance of precision in monetary applications, implementing proper decimal handling and audit trails.
- 🚀
Gained deep expertise in real-time data synchronization patterns and optimistic UI updates for collaborative financial applications.
- 🚀
Developed advanced understanding of database design for financial applications, including proper indexing, constraints, and transaction management.
- 🚀
Enhanced skills in building responsive, accessible interfaces that work seamlessly across mobile and desktop platforms.
- 🚀
Learned the intricacies of group management systems, including permission hierarchies and data privacy considerations in multi-user environments.