fairsplit
fairsplit copied to clipboard
A web application to split bills and track shared expenses in a group, with a transaction minimisation algorithm. Developed with Node and React.
FairSplit
A bill-splitting application to track shared expenses in a group, developed with Node and React.
Explanation of Transaction Minimisation Algorithm
We implemented a greedy algorithm to minimise the number of transactions required to settle the debts between all members of a group when the user toggles 'Smart Split'. The algorithm runs in O(n log n), where n is the number of users – this means that it scales well with the number of users.
A simple example of this algorithm is shown below. In this example, Alice owes Bob £10 and Bob owes Charlie £10 for a total of two transactions. The algorithm will suggest that Alice pays Charlie £10 directly, meaning only one transaction is required to settle the debts.
This may seem like a trivial problem to solve, but it becomes more complex as the number of users increases. The following diagram shows a more complex example when there are six users with six transactions between them. This is reduced to only four transactions by the algorithm.
Screenshots
Installation and Usage
Setting up the MongoDB Database
- Create a file in the
server
directory with the name:.env
- Open the file in a text editor (such as Notepad or TextEdit).
- Add the following line to the file, replacing
<uri>
with the URI of your MongoDB database:
MONGODB_URI="<uri>"
- Save the file.
Running the Server
- Open a terminal window.
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd server
- Install dependencies:
npm install
- Run the server:
node app
Running the Client
- Open a new terminal window (separate to the previous one).
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd client
- Install dependencies:
npm install
- Run the client:
npm start
- Browse to the URL provided in the terminal window.
Running Tests
Running Tests on the Server
- Open a terminal window.
- Ensure that you're in the root directory:
fairsplit
- Navigate to the server directory:
cd server
- Install dependencies:
npm install
- Run the unit tests:
npm test
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
For more information, please see the Contributing Guide.