Social bill tracker and civil engagement platform.
The project is organized as followed:
- clients contains various client implementations for the app.
- browser a browser-based client application, built with React/Typescript.
- model defines the data model provided by the server. It is a Rust crate.
- server implements the server application which makes the data queryable for clients.
git clone [email protected]:jbearer/bill-tracker.git
cd bill-tracker
This project consists of both a Rust project and a React project, each with their own dependencies. It uses Nix as a one-stop shop for managing the complexity of these dependencies. While it is possible to develop on this project without Nix, by manually installing Cargo, Node.js, and related dependencies, we highly recommend using Nix to get everything in one shot and be sure you are using the same versions as other developers.
If you don't already have Nix on your system, install it by following the instructions
here. Once installed, you can enter a shell with up-to-date
versions of all the necessary dependencies in scope simply by running nix shell
from the project
root.
Optionally, you can also install direnv, which will automatically drop you into the Nix
shell whenever you enter the project directory. Use direnv allow
to enable this convenience after
installing. Once in the Nix shell, you can use direnv deny
if you ever need to drop out of it.
The whole project is a Cargo workspace, so to build everything you can simply run
cargo build --workspace
Use cargo clippy
to run the linter and cargo test
to run unit tests.
There is a browser client for the app in clients/browser
. This is a React Typescript project. To
use it you should first cd in to the directory and make sure the required NPM packages are
installed:
cd clients/browser
npm install
Then you can use various npm
scripts to develop:
npm start
will build a development version of the project, open it in your browser, and watch your local directory for code changesnpm test
runs unit testsnpx eslint --fix
finds and fixes formatting and style issues