<personal/>

Bonin

Split bill app for shared expenses

KOTLINJETPACK COMPOSESPRING BOOTPOSTGRESQLFull Stack Development

Overview

About the Project

Bonin is a full-stack split bill application designed to make managing shared expenses easier between friends or groups. The application allows users to record expenses, divide costs between multiple members, track individual balances, and manage settlements in one place.

The project is being developed as a personal full-stack project to explore how a mobile application communicates with a structured backend system. Bonin combines an Android application built with Jetpack Compose and a REST API developed using Spring Boot, with PostgreSQL used for persistent data storage.

My Role

I am developing Bonin independently as a Full Stack Developer. I work on both the Android application and backend, including application architecture, API development, database design, business logic, and communication between the mobile client and server.

Key Features

  • Create and manage expense groups
  • Record shared expenses between multiple members
  • Split expenses between selected participants
  • Support multiple payers within an expense
  • Track balances between group members
  • Manage settlements and payment history
  • View expense and transaction history
  • Maintain structured user and expense data through the backend API

Tech Stack

Kotlin · Jetpack Compose · Spring Boot · PostgreSQL · Flyway · REST API · Java 21

What I Learned

Building Bonin gives me hands-on experience in developing a full-stack application from the ground up. Through this project, I am learning how to design REST APIs, structure relational databases, manage database migrations, implement business logic for shared expenses, and connect an Android client with a backend service.

The project also helps me understand how frontend, backend, and database layers work together within a larger application architecture, while improving my experience with Kotlin and the Spring ecosystem.

View Case Study ↗