Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
okTurtles/group-income: A decentralized and private (end-to-end encrypted) financial safety net for you and your friends.

okTurtles/group-income: A decentralized and private (end-to-end encrypted) financial safety net for you and your friends.

13 hours ago

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

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 [email protected]

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

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

Chat with me