Group Income is voluntary, decentralized, end-to-end encrypted basic income for you and your friends.
- Install Node.js (v20 minimum required)
- Install Grunt:
npm install -g grunt-cli - Clone this repo (or a fork of it if you plan on contributing) and
cdinto it. - Install dependencies:
npm install - Run
./node_modules/.bin/chel init. This generates achel.tomlconfig file in the project root (required). - Now try out the dev workflow.
- 👩🎨 Check out how Group Income will feel like by taking a look at the design files on Figma
We use standard for the code style and Github project boards for efficient project management.
We are continually improving the user experience for everyone, and applying the relevant accessibility standards. We will be conformant with WCAG 2.0 Level AA and trying our best to reach Level AAA in some areas of the application.
- 📖 CONTRIBUTING.md (required reading to send a PR!)
- 📖 Getting Started — Modern frontend concepts & project overview
- 📖 Style Guide — Our development guidelines
- 📖 Information Flow - walkthrough of the logical layer
To get started with development, follow the steps in Getting Started first.
Run all servers + watch files for changes
grunt dev- If all went well you should be able to visit http://localhost:3000
Create a tunnel to share access over the Internet:
Try ngrok (recommended), zrok, tunnl.gg, localhost.run or serveo instead, e.g.:
$ grunt dev
# then, in another terminal:
$ ngrok http http://localhost:8000
# or:
$ ssh -R 80:localhost:8000 nokey@localhost.run
Clean up files in dist/:
grunt cleanRun tests:
NOTE: You may need to first install Cypress using ./node_modules/.bin/cypress install
# all tests
grunt test
# all tests while skipping build step
grunt test --skipbuild
# unit tests only (always skips build)
grunt test:unit
# show e2e tests (Cypress) live in a browser
grunt test --browser
# run e2e tests (Cypress) in "open" mode
grunt test --browser=debug
# Developing at the same time as writing E2E tests
grunt dev
# and in another terminal run Cypress in "open" mode
npm run cy:open
# Run a specific Cypress spec against the running 'grunt dev' server:
npx cypress run -c 'baseUrl=http://localhost:8000' --spec "test/cypress/integration/group-chat.spec.js"This project is tested with BrowserStack.
You can run commands in a Docker container by using npm run docker -- <cmd> instead.
For example:
npm run docker -- npm install
npm run docker -- grunt dev
npm run docker -- grunt test --skipbuildFor details, see: Docker.md
If you run into any errors during the setup, try the suggestions in Troubleshooting.md.
The app and its contracts share one version number. The version field in
package.json is the source of truth. grunt pin copies it to appVersion
in chelonia.json and pins the selected contracts to that version. A version
is never passed on the command line.
$ npm version --no-git-tag-version 2.9.0This updates package.json and package-lock.json without committing, so the
version bump can be committed together with the pinned contracts in step 2.
Pinning freezes a built copy of each contract into
contracts/<contract>/<version>/. Old versions are kept forever so that
clients running older versions keep working.
First check which contracts changed since the last release:
$ git diff --name-only v2.8.0 master -- frontend/model/contractsFiles under frontend/model/contracts/shared/ are bundled into every contract
that imports them. A change there means every importing contract changed, even
if the contract's own file did not.
# Print usage (also shows current vs. target appVersion):
$ grunt pin
# Copy the version to chelonia.json and pin every contract:
$ NODE_ENV=production grunt pin --all
# Copy the version only (app update with no contract changes):
$ NODE_ENV=production grunt pin --none
# Copy the version and pin only the named contract:
$ NODE_ENV=production grunt pin:chatroomAdd --overwrite to replace an already-pinned version on disk.
Commit the pinned snapshot together with the files from step 1:
$ git add package.json package-lock.json chelonia.json contracts/
$ git commit -m "v2.9.0"$ git tag -u '<email>' v2.9.0 # create the tag before calling grunt deploy
$ ./scripts/dist.shdist.sh reads the version from package.json, builds the app twice (debug
and production), and writes gi-v2.9.0.tgz archives.
Donations to the okTurtles Foundation support the development of Group Income and related projects.
AGPL-3.0. See LICENSE for license details and CONTRIBUTING.md for the contribution policy.
