The simple, turn-based budget.
Bennedetto is a fresh, minimalist take on tracking your spending. Use the tool to
- Simplify your regular income and outcome into a single "$X per day" figure
- Track your day-to-day spending with as little overhead as possible
- Watch your progress with instant, usable feedback.
Read more about the project's inception here
To build the project, create a new virtual environment and activate it.
$ virtualenv --no-site-packages ~/.virtualenvs/bennedetto
$ source ~/.virtualenvs/bennedetto/bin/activate
Next, navigate to the source root and run the bootstrap command.
$ cd ~/git/bennedetto
$ make dev-bootstrap
This will install local dependencies, perform local database migrations, and prompt you to create a superuser.
To start the webserver, run the familiar python manage.py runserver
or use the alias provided in the Makefile
$ make run
To build the Docker image use
$ docker build -t bennedetto .
After that you may run it thus:
$ docker run -p 8000:8000 bennedetto
You can see the app now at http://localhost:8000
To run the serverside tests
$ python manage.py test
To run the clientside tests
$ grunt test
To run everything
$ make test
Keep these nitpicks in mind when submitting pull requests
- Git's recommendation of (1) a subject less than 50 characters, (2) a blank line following the subject, and (3) a body wrapped at 72 characters per line
- Present tense
- Feature in subject if applicable
Example:
Authentication: removes password hardcodes from config
Refactors authentication to allow the user to choose
their password, rather than hard coding one for them
I'd this project to follow PEP8 as closely as it can. However, in the spirit of avoiding foolish consistency, certain things are fine.
- Lines falling past 80 characters are fine, so long as they are readable
- For long lines, hanging indents are preferred
Example:
id = models.UUIDField(primary_key=True, # hanging indents
editable=False, # for long lines
default=uuid4,
unique=True)
- Django app names should be '-ing' words (e.g. tracking, authenticating)
- Address warnings raised by JSHint
- Wrap each file in an IIF that invokes strict mode
- Use named functions as often as possible
Example:
(function() {
'use strict';
function MySomething() {
/* stuff */
}
angular
.module('bennedetto')
.something('MySomething', [MySomething]);
}());
- Don't be a jagweed