Seven23 webapp

Fully manual budget app to track your expenses. Completely opensource, with privacy by design.

Seven23 Screenshot

Note

App can run on device, no account needed, but need a server instance to sync and backup your data. Server code is also open source and available as a separate repository: seven23_server .

Summary

Installation

git clone git@github.com:sebastienbarbier/seven23.git

npm install

npm install

Run devserver

npm start

Exchange rate

Seven23 webapp allows to switch currency at any point, and manage to estimate the price for each transaction. Sound great, but this is implemented in a dummy way and do not garanty exactitude on it.

Rates

Exchange rate is based on the change model. Each change has a date, two currency and two amount involved in the transaction. For each change, we can calculate the exact exchange rate.

One easy way to do is to generate what we called a changeChain which is technically an array of change order by date. We loop on the array and for each change, save the current rate for each currenty so this way for any date, we only need to access the latest change item from the chain based on its date to have all current exchange rate.

To calculate a transaction price, we look at its date, and get the earliest past change event for .

Second degree rates

One use-case we wanted to handle is the second degree rates. If you have euros, exchange them with swiss franc, them exchange swiss francs with thai baths, we wanted to be able to estimate an exchange rate between euros and thai baths.

To do so, we loop on the changeChain and for each one, we calculate what would be a two jump with the exchange we are browsing on. This might give very different result based on how we browse the chain and is a known issue, but is better than nothing.

Note

In app, we display second degree calculation with an average sign in front of each prive.

First rates

A last situation is about defining an exchange rate before any change event occured. To solve this, we store in a firstRated object each rate to use as default. This one is generated first time a rate or a secondDegree rate is changed and used as a default value if needed.

End-to-end encryption

Seven23 webapp implement end-to-end encryption to protect user’s privacy. Server only store encrypted blob and cannot access any details about encrypted components.

Encrpytion is performed using the js-jose library in JSON Web Encryption (JWE) format with A128CBC-HS256 algorithm and A256KW encrpytion key.

Encryption key currently use a md5 value of your password, so losing it means you cannot access your data anymore.

Warning

Data are encrypted/decrypted on every server request, but are stored unencrypted on your browser meaning anyone with a physical access to your machine can read those if you are still logged in.

Build and deployment

Build static files from source

This process bundles js, css, and html as static stand-alone files.

npm run build

Those can be served by any static file server without any dependencies.

Deploy using Docker

The project includes Docker and docker-compose files for deployment.

Build and run it directly with docker-compose:

docker-compose up

Or build the container…

docker build -t seven23 .

…and run it:

docker run -p 80:80 -ti seven23

Documentation

This official documentation is maintained in GitHub. The docs folder contains the documentation sources in reStructuredText format. And you can generate the docs locally with:

make docs

Output is written at docs/_build/html/index.html.

Constribution

How to contribute

Thanks for your interest in contributing to Seven23 webapp!

Note

We love community feedback and are glad to review contributions of any size - from typos in the documentation to critical bug fixes - so don’t be shy!

Report bugs

Report bugs at https://github.com/sebastienbarbier/seven23/issues/new

If you are reporting a bug, please include:

  • Any details about your local setup that might be helpful in troubleshooting.
  • Detailed steps to reproduce the bug.

Fix bugs

Check out the open bugs - anything tagged with the 😉 easy-pick label could be a good choice for newcomers.

Implement features

Look through the GitHub issues for features. Anything tagged with ✨ enhancement is open to whoever wants to implement it.

Write documentation

Seven23 could always use more documentation, whether as part of the official docs, in docstrings, or even on the Web in blog posts, articles, and such.

This official documentation is maintained in GitHub. The docs folder contains the documentation sources in reStructuredText format. And you can generate the docs locally with:

make docs

Output is written at docs/_build/html/index.html.

We obviously accept pull requests for this documentation, just as we accept them for bug fixes and features!