summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md85
1 files changed, 85 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..29eebfc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,85 @@
+# TOTAL EXPENSE
+
+## Introduction
+
+This is my final project for Harvard University's online course CS50x.
+
+I created Total Expense in December 2021 and this repo only serves as a "historical archive".
+
+All code as well as the content of the Readme below are in their original state, only this introduction and the License was added.
+
+#### Video Demo: (https://youtu.be/gh2tL8mPyMc)
+pw54fegood1
+#### Description:
+
+Total Expense is a web-based financial assistant.
+
+##### Purpose:
+
+The original idea was to create an app that allows users to set their individual budget, register each new expense and review past expenses.
+
+Later on another feature was added: a simple web scraper to search for cheap sales offers online.
+
+Overall the goal of the app is to provide a useful tool to anybody who wants to
+- monitor their spending habits
+- cut down on unnecessary or excessive expenses
+- keep track of their available budget
+- avoid sliding into debt
+- shift the amount of money spent on a certain area towards another one
+- consider buying cheaper second-hand products for the sake of saving money and sustainability
+
+##### Components:
+
+A user has to register a new account and/or log in first in order to use the app.
+Once registered, users are allowed to change their passwords again in the "Account" section.
+
+After signing in, the user can set their budget. All expenses registered thereafter will be deducted from the budget.
+However, setting a budget is optional, expenses can be submitted regardless.
+In that case, the budget balance will simply show the total amount of money spent.
+
+To register a new expense, the user has to use a form where they can name the specific expense.
+Naming the expense is optional, but the user is required to give the amount of money spent,
+the date of the expense as well to choose an overall category for it.
+
+Once an expense is submitted, the user can review it and all previous (and following) expenses in the Spending History section.
+A table displays the name of the expense ("Unspecified" if left blank by the user), category, amount and date.
+The user can also use a search field combined with radio buttons to filter for something specific,
+like a certain date, or to display all entries from one category, etc.
+Finally, a pie chart on the main page will display the total amount of expenses in each category,
+useful for comparisons between e.g. how much is spent on hobbies vs. investment.
+
+Last but not least, the web scraping feature called "Bargain Finder" allows the user to search for any item
+and receive a list of the cheapest offers for that item on Ebay.com.
+These offers are sorted by cheapest first, each offering the exact name of the offer on Ebay,
+the current price and a link that takes the user directly to the respective page.
+
+##### The Code:
+
+The app relies on Python, SQL and JavaScript to run, while the view-component was styled with HTML & CSS, utilizing Jinja templates.
+Essential components of the code are Flask as web framework and Beautiful Soup for the web scraping/crawling.
+
+Two JavaScript files handle matters of visualizing data for the user.
+First, piechart.js takes care of the implementation of the pie chart, as well as dynamically
+changing the background of the budget display, depending on the user going into debt or not.
+Second, filter.js implements the filter-search option for the table in history.html.
+
+application.py contains all the main code for users registering, logging in & logging out,
+passing data between the database (spending.db) and the webpage.
+spending.db contains two tables, one for the users storing their username, hashed password and cash/budget.
+The second table stores all expenses for each individual user.
+Table data meant for display is integerated into the HTML mostly by Jinja loops.
+
+helpers.py contains helper functions, e.g. for rendering an apology message in case of errors
+and for handling the log-in requirement for most pages.
+It also contains the function for web scraping which gets called in application.py's "/bargain" route.
+
+##### Sources:
+
+Apart from the knowledge gained from CS50's lectures, shorts, labs and problem sets - especially pset9 "finance" - the following sources were used:
+- Flask documentation: (https://flask.palletsprojects.com/en/2.0.x/)
+- Beautiful Soup documentation: (https://www.crummy.com/software/BeautifulSoup/bs4/doc/)
+- Chart.js documentation: (https://www.chartjs.org/docs/latest/)
+- W3 Schools Tutorials, especially on JavaScript: (https://www.w3schools.com/js/default.asp)
+- Corey Schafer's "Python Tutorial: Web Scraping with BeautifulSoup and Requests": (https://www.youtube.com/watch?v=ng2o98k983k)
+- Tech with Tim's "Beautiful Soup 4 Tutorial" Playlist: (https://www.youtube.com/watch?v=gRLHr664tXA&list=PLzMcBGfZo4-lSq2IDrA6vpZEV92AmQfJK)
+- Stack Overflow for reading up on smaller issues encountered here and there during coding