Splitpush - Group Expense Management

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 is now self-hosted on an Oracle Cloud VPS, with Cloudflare in front for DNS, TLS, and caching.

The earlier deployments on Render and Aiven are no longer updated but remain accessible.

This was my first project built with an AI coding assistant (Cursor). It was a useful look at how much an LLM can accelerate the build once the idea is set - and how much of the normal engineering process (tech-stack choices, QA, and iterating on features) still needs a human driving.


Key Features

  • โœ… Secure account creation & login
  • Email/password auth with hashing, sessions, and access control via Spring Security.
  • ๐Ÿ‘ฅ Trip group creation & collaboration
  • Create groups, invite members, and manage shared expenses with permissioned, multi-participant access.
  • ๐Ÿ’ฐ Flexible expense tracking & splitting
  • Add, edit, and delete expenses with customizable split options and clear per-participant breakdowns.
  • ๐Ÿ“Š Balance dashboard with smart calculations
  • Aggregates who owes whom across groups, showing both per-group amounts and net totals.
  • ๐Ÿค Settlement tracking
  • Record settlements with validation against duplicate payments; balances update instantly.
  • ๐Ÿงญ Group lifecycle management
  • Join by ID, leave once settled, with automatic cleanup of empty groups.
  • ๐ŸŒ— Light & dark mode theming
  • CSS-variable theme system with saved preferences across sessions.
  • โšก Performance optimization with caching
  • Caffeine cache cuts repeated queries for group lists, expenses, and balance summaries.
  • ๐Ÿงพ Detailed expense history
  • Paginated history of all group expenses with participant details and timestamps.

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
  • Oracle Cloud VPS for self-hosting, with Cloudflare for DNS, TLS, and caching
  • Keycloak - shared single sign-on (OAuth2 / OIDC) across my web apps
  • Render / Aiven (legacy deployment, no longer updated)
  • 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.