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.
Finding a good issue: ↗
Help wanted,
↗
Good first issues,
↗
All issues
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.
- Choose an issues and leave a comment that you'd like to work on it (upon we assign it to you)
- Clone the repo and work on it
- Make a PR and wait for review - it will be merged by team if approved without comment
- Your code is now merged into
main
branch and deployed on the staging environment (admin/web) - 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).
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.
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
.
We are using Prettier to format the code:
npm run format-code
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
.
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.
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
Become a contributor of Social Income (tax-deductible in Switzerland).
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.
Social Income is a non-profit association (CHE-289.611.695) based in Zurich, Switzerland.
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 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:
Thanks to Google Nonprofit, GitHub, Codemagic, Linktree, Twilio, algolia, JetBrain and 1Password. Font Unica77 by Lineto.
Code: MIT. The font Unica77 is licensed exclusively for the use on the website socialincome.org and on the mobile apps of Social Income.