{"id":20185099,"url":"https://github.com/hasferrr/wallet","last_synced_at":"2026-05-01T22:35:31.486Z","repository":{"id":154687628,"uuid":"529603228","full_name":"hasferrr/wallet","owner":"hasferrr","description":"Web app to track income and expenses with visual chart image, built using Python, Flask, and SQLite.","archived":false,"fork":false,"pushed_at":"2022-10-18T16:25:18.000Z","size":490,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-13T17:49:39.868Z","etag":null,"topics":["flask","python","sqlite3"],"latest_commit_sha":null,"homepage":"https://walletweb.pythonanywhere.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hasferrr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-27T14:08:29.000Z","updated_at":"2024-08-03T13:51:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"c9176455-da3a-41c6-b052-683e58c1c5e9","html_url":"https://github.com/hasferrr/wallet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasferrr%2Fwallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasferrr%2Fwallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasferrr%2Fwallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasferrr%2Fwallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hasferrr","download_url":"https://codeload.github.com/hasferrr/wallet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241622594,"owners_count":19992501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","python","sqlite3"],"created_at":"2024-11-14T03:11:24.279Z","updated_at":"2026-05-01T22:35:26.453Z","avatar_url":"https://github.com/hasferrr.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wallet\n#### Video Demo: https://youtu.be/5qW0vIitV0U\n#### Description: Track your income and expenses.\n\n## Details\n\n`Wallet` is a web application for **recording personal financial reports**, both income and expenses. This application will store the user's income and expenses with the date and time (when the user got or spent the money), category (what income or expense category), the amount in [Rupiah](https://en.wikipedia.org/wiki/Indonesian_rupiah), and description the user typed.\n\n![demo1](/static/img/demo1.png)\n\n![demo2](/static/img/demo2.png)\n\n## Feature\n\nThere are some features that you can use in this `Wallet`\n\n### Register and Login\n\n*Let's make an account!*\n\n### Display\n\nDisplay every record on the Home in the form of a table.\n\n1. Search\n\n     **Search** for data and display records based on the appropriate category or description.\n\n1. Filters\n\n     **Filter** the records based on date, or use the `filter button` that has been provided.\n\n### Record\n\n1. Record\n\n    **Record** income and expenses. You can also choose a category that has been provided or if the record does not match the list provided, the `Other` category is also available in the category options.\n\n1. Edit\n\n    When you realize to enter the wrong data, or *oh no I forgot to type the description*, you can **edit** the record by clicking the pencil button to the right of each row shown.\n\n1. Delete\n\n    **Delete** the record by clicking the cross button on the left of each row that is displayed.\n\n### Report\n\n1. Cash Flow\n\n    The **total income**, **total expenses**, and **the difference between the two** will be displayed in the form of a bar on a specific date.\n\n1. Income and Expenses\n\n    Income and expenses **for each category** will be displayed and their percentage for each type (income or expenses) for a specific date.\n\n1. Horizontal Bar plot\n\n    A **horizontal bar plot** of expenses will be displayed and can be used for comparison in each category.\n\n### Export\n\nAll data containing `category`, `type`, `date`, `time`, `description`, and `amount` can be exported to a ***CSV file*** and downloaded by the user.\n\n### Settings\n\n1. Change the username\n1. Change the password\n1. Delete the account and all data\n\n## Project Files Description\n\nWallet is a web application created using `Python3`, `Flask`, and `SQLite3`.\n\n**Python Files:**\n\n- **[app.py](app.py)** - contains the configuration of the Flask app; Blueprint that links to `account.py`, `export.py`, and `report.py`; and sessions. Financial data will be recorded here. Edit, Delete records route, and error handlers are also declared here.\n- **[account.py](account.py)** - contains routes for `register`, `login`, `logout`, and `settings` (which contains change username, change password, and delete account routes)\n- **[export.py](export.py)** - serves to export data where the data is based on the logged-in user, retrieved from the database using `sqlite3`, and writes a CSV file that then can be downloaded by the user.\n- **[report.py](report.py)** - contains the report page where the data is first queried from the database filtered by date. Furthermore, the data is processed and calculated in this python file such as summing and formatting total income. Then, a horizontal bar plot is created using `myplotlib.pyplot` plot and saved as an image, which is then displayed in an HTML file.\n- **[helpers.py](helpers.py)** - contains function declarations for other python files to implement abstractions and minimize the use of the same code for different implementations.\n\n**Templates:**\n\n- **[layout.html](/templates/layout.html)** - is an outline arrangement of all HTML files. All HTML files extend this file to display the same head, navbar, and other settings for all HTML files.\n- **[HTML file inside `/templates/include/` directory](/templates/include/)** - does not extend layout.html. The file is used for several other HTML files with the Jinja2 `include` keyword like `{% include \"include/record.html\" %}` in the HTML file section that wants to include this HTML file code.\n- **[Other HTML files](/templates/)** - functions like the name of the HTML file itself and will be rendered from a python file using Flask's `render_template`.\n- **[CSS](/static/light.css)** - I am using Bootstrap 5 with `Flaty` theme from [Bootswatch](https://bootswatch.com/).\n- **[JS](templates/include/record.html)** - I only use JavaScript code on [record.html](templates/include/record.html). So, I do not separate the script into a JS file in the static directory.\n\nWhy do I just replace the `username` and `hash` in the users table with the **`-`** character instead of deleting the row from the database when the user deletes the account? The reason is that the `session` I am using is the session user's id which means that the `id` of the user will be taken as a session. However, the id in the users table is ***autoincremented***. Therefore, if a row is deleted from the `users` table when the user deletes his/her account, the `id` under it will be reduced so that other users will use the session ***user minus 1*** of his/her user id, not his/her own id. That's the reason why I didn't delete the row from the `users` table.\n\n## Credit\n\nby HasFer :)\n\n\u003e This project was created to complete the Final Project on the CS50x course\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasferrr%2Fwallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhasferrr%2Fwallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasferrr%2Fwallet/lists"}