Splitpush - Group Expense Management

Splitpush 🔗

🔗

Splitpush is a full-stack expense-sharing platform that allows groups to track shared costs, split bills, and settle balances across multiple trips or events. Users can create trips, add participants, record expenses, and automatically calculate who owes whom. The system supports both per-trip settlements and global cross-trip balancing, giving users flexible ways to manage group expenses. Mobile support included. App hosted on Render, database deployed to Aiven.

Note: Splitpush is hosted on free accounts. When accessing, the app may take 50 or more seconds for the host to spin up the app if it was not used recently.

Created with the help of the AI code assistant Cursor (similar to Anthropic's Claude for coding and Microsoft's Copilot), this was my first project using AI coding assistants. Although a short project, it gave me insights into how these LLM-based technologies could help accelerate basic development after I had conjured up an idea.

I realized there was still much of the normal process that needed consideration, but the overall flow remained similar:

  1. 💡Determine the idea. Simple enough, I can come up with some ideas.
  2. 🛠️Choose a tech stack. I heard Java Spring Boot is popular, and PostgreSQL is widely used, so that worked well. REST APIs are still the most common and I understand them. GraphQL could work, but I'll leave that for another project.
  3. 🧑‍💻Write some code.
  4. 🔧QA test and fix whatever broke. While getting help from Cursor, this step felt like the most time-consuming part. Unit tests helped a lot, but there were many tiny breaks that kept popping up.
  5. ✨Add in more small features and changes until it felt sufficiently complete.
    In a formal project setting, this would probably involve Change Requests sent to Change Control. Unfortunately for the devs (me), the stakeholders (me) pushed for many changes, so Change Control (me) approved everything.

Key Features

  • ✅ Secure account creation & login
  • Users can register and authenticate with their email and a securely hashed password. Spring Security handles session protection, authentication flows, and access control across the app.
  • 👥 Trip group creation & collaboration
  • Users can create trip groups, invite members, and manage shared expenses. Each group supports multiple participants with permissions that prevent invalid edits or removals.
  • 💰 Flexible expense tracking & splitting
  • Within each group, users can add, edit, and delete expenses with customizable split options. Detailed participant info and clear breakdowns ensure transparency for every transaction.
  • 📊 Balance dashboard with smart calculations
  • A clean dashboard summarizes who owes whom, showing both per-group amounts and net totals across all activities. The logic automatically aggregates balances to simplify settling up.
  • 🤝 Settlement tracking
  • Users can record settlements with validation to prevent duplicate or inconsistent payments. All settlements update group and global balances instantly.
  • 🧭 Group lifecycle management
  • Groups can be joined via ID and left when balances are settled. Empty groups are automatically cleaned up to keep the workspace organized.
  • 🌗 Light & dark mode theming
  • A modern theme system with CSS variables lets users switch between light and dark mode. Preferences are saved for a consistent experience across sessions.
  • ⚡ Performance optimization with caching
  • Caffeine cache is used to reduce repeated database queries and speed up rendering for group lists, expenses, and balance summaries.
  • 🧾 Detailed expense history
  • Users can browse a full paginated history of all group expenses, complete with participant details and timestamps for clear auditability.

Frontend

  • JavaScript, HTML, CSS
  • Thymeleaf

Backend

  • Java
  • Spring Boot
  • Spring Security
  • Spring Data JPA
  • Spring Cache (Caffeine)
  • PostgreSQL

Other

  • Docker & Docker Compose for local development and deployment
  • Maven for project build and dependency management
  • Render / Aiven for hosting and managed Postgres
  • Cursor
  • Visual Studio Code

Figures

Fig. 1 - Home page when the user is not logged into an account.
Fig. 2 - Account creation form
Fig. 3 - Login form
Fig. 4 - Dashboard to see all of the user's outstanding balances with others.
Fig. 5 - Form to record a completed settlement the user sent to another. If a part of more than 1 group with the other user, it displays each group as a separate transaction.
Fig. 6 - A history of all completed settlements the user is a part of.
Fig. 7 - Page displaying all groups the user is a part of. Create, join, or leave groups here.
Fig. 8 - Displays a list of all recorded expenses as part of a group, showing the amounts and users involved.
Fig. 9 - Form to record an expense.
Fig. 10 - Expense page implements a 10-size pagination to reduce excess data transfer.
Fig. 11 - Mobile version for Expenses page.
Fig. 12 - Mobile dashboard view.
Fig. 13 - Docker screenshot showing the container with the app image and postgres image run locally.