Skip to content

About

A decentralized and private (end-to-end encrypted) financial safety net for you and your friends.

Topics

Resources

Contributing

Stars

350 stars

Watchers

23 watching

Forks

Repository files navigation

Group Income (Simple Edition)

Ask DeepWiki

About

Group Income is voluntary, decentralized, end-to-end encrypted basic income for you and your friends.

Getting Started

  1. Install Node.js (v20 minimum required)
  2. Install Grunt: npm install -g grunt-cli
  3. Clone this repo (or a fork of it if you plan on contributing) and cd into it.
  4. Install dependencies: npm install
  5. Run ./node_modules/.bin/chel init. This generates a chel.toml config file in the project root (required).
  6. Now try out the dev workflow.

Contributing

We use standard for the code style and Github project boards for efficient project management.

js-standard-style

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.

Level Double-A conformance, W3C WAI Web Content Accessibility Guidelines 2.0

Read first

Basic workflow

To get started with development, follow the steps in Getting Started first.

Run all servers + watch files for changes

grunt dev

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 clean

Run 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.

Using Docker for extra security

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 --skipbuild

For details, see: Docker.md

Troubleshooting

If you run into any errors during the setup, try the suggestions in Troubleshooting.md.

Try also: Ask DeepWiki

Making a release

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.

1. Bump the version

$ npm version --no-git-tag-version 2.9.0

This updates package.json and package-lock.json without committing, so the version bump can be committed together with the pinned contracts in step 2.

2. Pin the contracts

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/contracts

Files 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:chatroom

Add --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"

3. Tag and build

$ git tag -u '<email>' v2.9.0  # create the tag before calling grunt deploy
$ ./scripts/dist.sh

dist.sh reads the version from package.json, builds the app twice (debug and production), and writes gi-v2.9.0.tgz archives.

Donating

Donations to the okTurtles Foundation support the development of Group Income and related projects.

License

AGPL-3.0. See LICENSE for license details and CONTRIBUTING.md for the contribution policy.

About

A decentralized and private (end-to-end encrypted) financial safety net for you and your friends.

Topics

Resources

Contributing

Stars

350 stars

Watchers

23 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages