Back to projects

SplitCircle

Expense Splitting Web App

A full-stack web app for splitting expenses with friends, tracking balances, and settling up easily.

Overview

SplitCircle allows users to create groups, add friends, and split expenses in various ways (equal, unequal, or by percentage). It includes user authentication, state management with Zustand, and email notifications for expense updates. The app ensures accurate tracking of who owes whom, making group finances hassle-free.

Problem

Managing shared expenses among friends is tedious. Manually tracking who owes whom, handling unequal splits, and keeping everyone updated creates friction and often leads to awkward conversations or forgotten debts.

Solution

I built a full-stack expense management app where users create groups, add expenses, and split costs by equal shares, custom amounts, or percentages. The system automatically calculates balances, sends email notifications, and provides a clear settlement flow, eliminating the mental overhead of tracking shared finances.

Core Features

  • Create groups and add friends
  • Split expenses equally, unequally, or by percentage
  • User authentication and secure access
  • State management with Zustand for seamless UI updates
  • Email notifications for expense updates
  • Track balances and settle up easily

Key Engineering Decisions

  • Used Node.js and Express.js for a robust backend with TypeScript for type safety.
  • Integrated Prisma ORM with PostgreSQL (Neon) for efficient database management and queries.
  • Implemented Zustand for client-side state management to handle complex expense logic.
  • Deployed backend on Heroku for scalability and frontend on Vercel for fast hosting.

Tech Stack

Frontend

React.js, TypeScript, Tailwind CSS, Vite, Zustand

Backend

Node.js, TypeScript, Express.js, Prisma ORM

Database

PostgreSQL (Neon)

AI

N/A

Caching

N/A

Storage

N/A

Deployment

Heroku (Backend), Vercel (Frontend)

Demo

Play

Interested in the system design or implementation details? Check out the source code or try the live app.