IHateToBudget logo

IHateToBudget

  •  0 ratings
In category: Money & Budgeting & Management

About IHateToBudget

A simple web app to understand and control your expenses.

  •   375  
  •   0  
  •   0  
  •   0  
Github stats:
  •  Commits: N/A  
  •   N/A  
  •   N/A  
  •  Latest commit: N/A  

Deploy this app to Linode with a free $100 credit!

Languages/Platforms/Technologies:
Lincenses:

More about IHateToBudget

IHateToBudget is now archived. See #26.


IHateToBudget logo

IHateToBudget

GitHub Pipenv locked Python version GitHub Pipenv locked dependency version GitHub Code style: black GitHub tag (latest by date) GitHub commits since latest release (by date)

A simple web app to understand and control your expenses.
Designed to be self-hosted.
Inspired by OnTrack.

Table of contents

About

Mentioned in Awesome Selfhosted

It is important to control your budget and know where your money goes. I've tried lots of different apps and methods, but none have really convinced me. So I designed and developed IHateToBudget, a simple and efficient application that meets my needs.

And it's also available for you.

Features

A basic authorization system exists but this application is not intended to be hosted on a public network (yet?). It is designed to be self-hosted locally (e.g. on a Raspberry Pi) and used by a few users within the same household.

1. Categories

Define categories, and their color.

Categories

2. Sheet

Add dated and categorized expenses. They are automatically grouped by month (i.e. sheet).

Sheet

3. Overview

Analyze the overall statistics.

Overview

4. History

Explore and filter all expenses.

History

Installation & Configuration

Docker method

The following instructions are guidelines. You're free to adapt these to your needs.

  1. Install Docker and docker-compose, if you haven't already.

  2. Clone the repository:

git clone https://github.com/bminusl/ihatetobudget.git
cd ihatetobudget
  1. Create a copy of:

  2. docker-compose.yml.example as docker-compose.yml

  3. docker-compose.env.example as docker-compose.env
  4. Caddyfile.example as Caddyfile
cp docker-compose.yml.example docker-compose.yml
cp docker-compose.env.example docker-compose.env
cp Caddyfile.example Caddyfile

Note: Making copies ensures that you can git pull (or equivalent) to receive updates without risking merge conflicts with upstream changes.

  1. Edit docker-compose.env and adapt the following environment variables:

  2. DJANGO_SECRET_KEY: This is the secret key used by Django.

    See https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-SECRET_KEY for more information.

Currency formatting

In IHateToBudget, money is represented by positive decimals of the form "xxxxxxxx.yy". The user is free to change the formatting to use the currency of their choice, by setting the following environment variables:

  • CURRENCY_GROUP_SEPARATOR: A single character which separates the whole number into groups of 3 digits.1
  • CURRENCY_DECIMAL_SEPARATOR: A single character that separates the whole part from the decimal part.1
  • CURRENCY_PREFIX: A string placed in front of the number.1
  • CURRENCY_SUFFIX: A string placed behind the number.1

By default, it formats money as French euros. For instance, here's how to format as US dollars:

CURRENCY_GROUP_SEPARATOR=,
CURRENCY_DECIMAL_SEPARATOR=.
CURRENCY_PREFIX=$
CURRENCY_SUFFIX=

1: Note: If it contains spaces, make sure to use non-breaking spaces. This is simply to prevent visual "glitches".

  1. Run docker-compose up -d. This will build the main image, and create and start the necessary containers.

  2. Start cron inside the container:

docker-compose exec ihatetobudget service cron start
  1. To be able to login, you will need a (super) user. To create it, execute the following commands:
docker-compose run --rm ihatetobudget pipenv run python manage.py migrate
docker-compose run --rm ihatetobudget pipenv run python manage.py createsuperuser

This will prompt you to set a username, an optional e-mail address and finally a password.

  1. You should now be able to visit your IHateToBudget instance at http://127.0.0.1:80. You can login with the username and password you just created.

Updating

Docker method

The following instructions are guidelines. You're free to adapt these to your needs.

  1. Navigate to the root of the repository.

  2. Run docker-compose down -v. This will stop all containers.

Note: Volumes are also removed (-v), see why.

  1. Create a backup of the database—just in case—, e.g. run cp db.sqlite3 db.sqlite3.bak.

  2. Upgrade the codebase to the desired revision, e.g. run git pull.

  3. Rebuild the image:

docker-compose build
  1. Migrate the database:
docker-compose run --rm ihatetobudget pipenv run python manage.py migrate

This action will synchronize the database state with the current set of models and migrations.

  1. Run docker-compose up -d. This will create and start the necessary containers.

  2. Start cron inside the container:

docker-compose exec ihatetobudget service cron start

License

Distributed under the GPLv3 License. See COPYING for more information.

Contributing

I maintain this project primarily for my own use. If you can think of any relevant changes that should be incorporated into the code, you can contribute by opening an issue or submitting a pull request.

See the Developer documentation section below for more information.

Developer documentation

This section is WIP

The development environment

Set up

  1. Install Pipenv, if you haven't already.

Pipenv is used to manage dependencies and the virtual environment. Note: IHateToBudget currently targets Python 3.8, so make sure it is installed too.

  1. Set up the virtual environment by executing the following command:
pipenv install --dev

This action will install both develop and default packages.

Usage

When you start a new development session, run the following command:

pipenv shell

This action spawns a shell within the virtualenv.


You should now be able to work.

Since IHateToBudget is primarily a Django project, you should read Django's documentation if you are not familiar with it already.

Code quality

pre-commit hooks are used to keep the code clean, namely: * black * flake8 * isort

Execute the following command to run pre-commit against all files:

pre-commit run --all-files

Testing

  • To run tests, execute the following command:
python manage.py test
  • Alternatively, coverage can be used to measure code coverage:
coverage run --source='.' manage.py test

Comments (0)

Please login to join the discussion on this project.

IHateToBudget Reviews (0)

Overall Rating

None

based on 0 ratings

Please login to review this project.

No reviews for this project yet.

↑ back to top

pCloud Lifetime

Popular Projects

FluxBB

in Social Networks and Forums
 33k    0    0    0  

Nextcloud

in File Transfer & Synchronization
 20k    1    1    0  

Libreddit

in Social Networks and Forums
 7k    0    1    0  

CasaOS

in Self-hosting Solutions
 5k    0    0    0  

Dashboard

in Personal Dashboards
 5k    0    0    0  

Audiobookshelf

in Audio Streaming
 5k    0    1    0  

Mediagoblin

in Photo and Video Galleries
 4k    0    0    0  

Most Discussed

Nextcloud

in File Transfer & Synchronization
 20k    1    1    0  

Tube Archivist

in Automation
 3k    0    1    0  

OneDev

in Project Management
 2k    0    0    0  

iodine

in Proxy
 2k    0    0    0  

Alf.io

in Booking and Scheduling
 2k    0    0    0  

sysPass

in Password Managers
 1k    0    0    0  

Misskey

in Social Networks and Forums
 2k    0    0    0  
Linux VPS from $11/yr.
RackNerd VPS for $11.38/mo

Top Rated Projects

Gitea

 1 rating
in Project Management

Bagisto

 1 rating
in E-commerce

LinkAce

 1 rating
in Bookmarks and Link Sharing

Pydio

 1 rating
in File Transfer & Synchronization

Audiobookshelf

 1 rating
in Audio Streaming

Nextcloud

 1 rating
in File Transfer & Synchronization

Seafile

 1 rating
in File Transfer & Synchronization

Categories

You May Also Be Interested In

IHateMoney logo
IHateMoney cover

IHateMoney

Manage your shared expenses, easily.

Inventree logo
Inventree cover

Inventree

InvenTree is an open-source inventory management system whi…

Inventaire logo
Inventaire cover

Inventaire

Collaborative resources mapper project, while yet only focu…