/public

Fighting global poverty with the help of everyday people and your coding skills. Public repository of the NGO and global initiative Social Income.

Primary LanguageTypeScriptOtherNOASSERTION

  #Tech4Good   #OpenSource   #Solidarity   #SDG1   #SDG10

Social Income Logo

Social.Income.explained.mp4

Social Income is a radically simple solution in the fight against poverty. We turn 1% of anyone's salary into an unconditional basic income for people living in poverty – sent directly to their mobile phones. The tools that make this possible are built and continuously improved upon by an open source community, who use their technical skills to take on the SDG 1 and the SDG 10.

Code Contributions

Finding a good issue: Help wanted, Good first issues, All issues

You can contribute to all three tools that run Social Income:

Admin Tool Website Mobile App
Purpose Make it simple to manage payments, contributors and recipients Raising donations and inform the public Make it simple for recipients to manage payments and surveys
Instructions Readme Readme Readme / Contributing
Localhost localhost:3000 / 4000 localhost:3001
Staging staging-admin.socialincome.org staging.socialincome.org Testflight
Production admin.socialincome.org socialincome.org* iOS / Android

The website and admin tool use cloud functions. For frontend developers: you can also develop UI components with Tailwind CSS independent of the website (Readme / Contributing). The components are all collected in our Storybook.

* The website socialincome.org is still on a private repo. In this repo, we are rebuilding the existing website with Next.js, shadcn/ui and Tailwind CSS. You can visit the website in the making on staging or production.

Basic steps to contribute

  1. Choose an issues and leave a comment that you'd like to work on it (upon we assign it to you)
  2. Clone the repo and work on it
  3. Make a PR and wait for review - it will be merged by team if approved without comment
  4. Your code is now merged into main branch and deployed on the staging environment (admin/web)
  5. Your code is then released on the production environment with the next release

Contributors who have done a few commits can deploy directly on the staging environment without approval (upon request).

Basic Development Setup

We are using Firebase as development platform. We are mainly leveraging the following tools: Firestore for data management, Firebase Authentication for user management, Firebase Hosting to serve static content like the admin app, Firebase Functions to run backend code in a serverless framework and Firebase Storage to store documents and other files.

The local development environment is based on Node.js and uses the Firebase Emulators, which are populated with dummy seed data. This ensures that no production credentials are needed for local development.

Before you can start developing, you need to install the dependencies by running. Make sure you are using Node.js 18. If you are using Homebrew, you can install it with brew install node@18 and follow this guide to switch between different versions of Node.js if need be. On MacBook Pro (Intel) there seems to be an issue if you don't use exactly the 18.15.0 Version: Download / Issue

npm install

Once the dependencies are installed, you can start the different environments:

  • First, start the Firebase emulator with npm run firebase:serve — console dashboard is available at localhost:4000.
  • To start the Admin Tool, run npm run admin:serve and open localhost:3000.
  • To start the Website, run npm run website:serve and open localhost:3001.
  • To start the Storybook, run npm run ui:serve and open localhost:6006.

The package.json file gives you a good overview of the available commands. For more information on the development environment see links in table above to tool specific Readme and Contributor files.

Data Seed

An initial set of data is imported into the Firebase emulators during startup of the Admin Tool. You can add, delete or amend data directly in your local Admin Tool (localhost:3000) or in your local Firestore Admin Interface (localhost:4000). After you have made changes, you can export the data to the seed folder with npm run firebase:export.

Format Code

We are using Prettier to format the code:

npm run format-code

Deployment

When a PR is merged into the main branch, the code is deployed to the staging environment after being authorized by a core developer. See the Github Actions for more details.

Production deployments are done manually through GitHub releases. A release that begins with release- will trigger a production deployment. The release should include the date of the release in the format YYYY-MM-DD. For example, a release for a production deployment on Feb 27th, 2021 would be release-2021-02-27. A second release on the same day would be release-2021-02-27.2.

Backup

We have a function which triggers hourly backups of our production firestore database. The exports are saved to the social-income-prod bucket with a retention period of 30 days. To restore the database you can import the most recent folder directly from the social-income-prod bucket.

Bugs & Feature Requests

You can report an issue or request a feature on our issue page. If you want to report a vulnareablity please refer to our security policy

Financial Contributions

1 Percent of Your Income

Become a contributor of Social Income (tax-deductible in Switzerland).

Sponsor Dev Community

Become a sponsor and help ensure the development of open source software for more equality and less poverty. Donations through the GitHub Sponsor program are used for building a strong developer community and organizing Social Coding Nights.

Organisation

Non-Profit Association

Social Income is a non-profit association (CHE-289.611.695) based in Zurich, Switzerland.

Twitter URL

Radical Transparency

We believe that transparency builds trust and trust builds solidarity. This is why we disclose our finances in realtime and publish our annual statements and overall carbon footprint.

Open Source Community

Open Source isn’t an exclusive club. It’s made by people just like you. You don’t need to overthink what exactly your first contribution will be, or how it will look. Thank you:

Contributors

Software & Design Donations

Thanks to Google Nonprofit, GitHub, Codemagic, Linktree, Twilio, algolia, JetBrain and 1Password. Font Unica77 by Lineto.

License

Code: MIT. The font Unica77 is licensed exclusively for the use on the website socialincome.org and on the mobile apps of Social Income.