Dept. of Computer Science & Engineering

Project 6: Ruby on Rails Project

Ruby on Rails Tutorial

Complete chapters 2, 3, 5, and 6 of the textbook. (If time permits, try the main bits of chapters 7 and 8 too.) See the syllabus for notes on textbook access.

Everyone in the group should complete this part of the project. Collaboration is permitted and encouraged! You do not need to submit anything for this part of the project, but completing it as soon as possible is highly recommended as it will help in completing the second part (i.e. the final project, below).

Final Project: Split the Bill

Background

When a group of people go on a multi-day trip together, there are many shared expenses: gas, lodging, food, and entertainment. Keeping track of who owes whom what can be a headache. A web application could help streamline this process.

A classic example of such an app is SplitWise. But the free tier of this app is quite limited.

Required Features

  1. A user should be able to create a new trip, specifying the name of the trip, the start and end dates, and the people who are participating in the trip.

  2. Any participant should be able to add expenses to a trip. Each expense should have a description, amount, and (possibly) date or dates.

  3. The application should calculate the total cost of the trip, the amounts spent by each participant, and the net amount owed by (or to) each participant.

  4. The application should describe how participants can settle the books at the end of the trip. Ideally, this settling of the books should entail a minimal number and size of transfers between participants.

Extensions

The following list is not exhaustive. The goal is to create as useful an application as possible, so the following are some challenges that could be addressed to that end. You are encouraged to think of other improvements that would be useful.

  1. Authentication/login. The application could require a user to log in before they can create a trip or add expenses to a trip.

  2. The application could support multiple trips. A user should be able to see a list of all the trips they have created, and select a trip to view the details.

  3. The application could support multiple currencies. For example, a trip might start in the US, but end in Canada. The application should be able to convert expenses from one currency to another.

  4. The application should support multiple expense categories. For example, a trip might have expenses for gas, lodging, food, and entertainment. The application should be able to categorize expenses by these categories.

  5. The application could support multiple models of expense splitting. For example, a trip might have expenses that are shared equally by all participants, or expenses that are shared by a subset of participants. The application should calculate the net amounts owed by (or to) participants accordingly.

Submission

There are 2 separate submissions for the final project:

  1. A recorded demo/presentation. Submit a recorded presentation on Carmen describing your project. The presentation should be about 10-15 minutes long and it should give both: (i) a client-view demo (ie from the end-user perspective), and (ii) an implementer’s view description of any interesting technical details (database schemas and associations, architecture, etc).

  2. App submission. Submit by tagging on GitHub, in the usual way.

Don’t forget to also complete a peer evaluation!