{"id":297759,"name":"Social Income","description":"Fighting global poverty with the help of everyday people and your coding skills.","url":"https://github.com/socialincome-san/public","last_synced_at":"2026-08-14T14:31:26.574Z","repository":{"id":59102020,"uuid":"524712019","full_name":"socialincome-san/public","owner":"socialincome-san","description":"Fighting global poverty with the help of everyday people and your coding skills. Public repository of the NGO and global initiative Social Income.","archived":false,"fork":false,"pushed_at":"2026-08-08T22:06:39.000Z","size":671324,"stargazers_count":153,"open_issues_count":147,"forks_count":47,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-08-09T00:58:23.183Z","etag":null,"topics":["css","firebase","firestore","open-source","opensourceforgood","react","storybook","vite"],"latest_commit_sha":null,"homepage":"https://socialincome.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/socialincome-san.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"socialincome-san","custom":"socialincome.org"}},"created_at":"2022-08-14T15:40:39.000Z","updated_at":"2026-08-08T22:03:55.000Z","dependencies_parsed_at":"2026-08-08T23:39:53.650Z","dependency_job_id":null,"html_url":"https://github.com/socialincome-san/public","commit_stats":{"total_commits":823,"total_committers":27,"mean_commits":30.48148148148148,"dds":0.7496962332928311,"last_synced_commit":"55b7607ee2eab51791d415e7a23f9356a91b40e4"},"previous_names":[],"tags_count":187,"template":false,"template_full_name":null,"purl":"pkg:github/socialincome-san/public","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/socialincome-san","download_url":"https://codeload.github.com/socialincome-san/public/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36430542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-08T02:00:08.763Z","response_time":96,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"socialincome-san","name":"Social Income","uuid":"62818972","kind":"organization","description":"Fighting global poverty with the help of everyday people.","email":"hello@socialincome.org","website":"https://socialincome.org","location":"Zurich","twitter":"so_income","company":null,"icon_url":"https://avatars.githubusercontent.com/u/62818972?v=4","repositories_count":1,"last_synced_at":"2024-05-01T09:30:12.102Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/socialincome-san","funding_links":["https://github.com/sponsors/socialincome-san"],"total_stars":67,"followers":9,"following":0,"created_at":"2024-04-20T15:51:02.440Z","updated_at":"2024-05-01T09:30:12.533Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/socialincome-san","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/socialincome-san/repositories"},"packages":[],"commits":{"id":1641672,"full_name":"socialincome-san/public","default_branch":"main","total_commits":1843,"total_committers":47,"total_bot_commits":308,"total_bot_committers":2,"mean_commits":39.212765957446805,"dds":0.8475311991318503,"past_year_total_commits":869,"past_year_total_committers":23,"past_year_total_bot_commits":281,"past_year_total_bot_committers":2,"past_year_mean_commits":37.78260869565217,"past_year_dds":0.6846950517836594,"last_synced_at":"2026-08-13T14:02:24.111Z","last_synced_commit":"b63afb233b9c488e5c01dbdc3b5a74325c6e6c3d","created_at":"2024-08-04T00:12:37.014Z","updated_at":"2026-08-13T14:02:23.730Z","committers":[{"name":"Raphael Wirth","email":"37732078+rawi96","login":"rawi96","count":281},{"name":"renovate[bot]","email":"29139614+renovate[bot]","login":"renovate[bot]","count":274},{"name":"Michael Kündig","email":"michael@socialincome.org","login":"mkue","count":233},{"name":"Sandino Scheidegger","email":"sandino@socialincome.org","login":"ssandino","count":225},{"name":"Mikolaj","email":"mdemkow@gmail.com","login":"MDikkii","count":134},{"name":"András Heé","email":"andrashee","login":"andrashee","count":94},{"name":"Verena Zaiser","email":"development@verena-zaiser.de","login":"novas1r1","count":89},{"name":"fabricem90","email":"fabrice@smartive.ch","login":"fabricem90","count":83},{"name":"Karin Berg","email":"KarinBerg","login":"KarinBerg","count":67},{"name":"PM","email":"3749956+CluEleSsUK","login":"CluEleSsUK","count":55},{"name":"ManuM","email":"manuel.mumenthaler@gmail.com","login":"MumenthalerManuel","count":39},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":34},{"name":"René Stalder","email":"rene@socialincome.org","login":"renestalder","count":32},{"name":"Nando Schär","email":"118849757+nschaer92","login":"nschaer92","count":26},{"name":"Kevin Walker","email":"kevin@smartive.ch","login":"Walkeezy","count":24},{"name":"Pranav Chatur","email":"pranavchatur@gmail.com","login":"DarkMenacer","count":18},{"name":"Marco Bohler","email":"triggertoo@gmail.com","login":"triggertoo","count":14},{"name":"Gavriil","email":"gavriiltzortzakis@gmail.com","login":"Gavriil-Tzortzakis","count":13},{"name":"hashbot","email":"hashbot@noemail.com","login":null,"count":11},{"name":"Cheryl Oberholzer","email":"cheryl.oberholzer@gmx.ch","login":"cheryloberholzer","count":8},{"name":"Copilot","email":"198982749+Copilot","login":"Copilot","count":8},{"name":"brennerthomas","email":"tommy.brenner@gmx.net","login":"brennerthomas","count":8},{"name":"Social Income Dev","email":"62838956+socialincome-dev","login":"socialincome-dev","count":8},{"name":"Michael Kündig","email":"michael@cradle.bio","login":null,"count":7},{"name":"Nhan Doan","email":"2561973+dnhn","login":"dnhn","count":6},{"name":"Alexey Shestakov","email":"shestakov.alex@gmail.com","login":"almsh","count":5},{"name":"Anthony Reinette","email":"anthonyray","login":"anthonyray","count":5},{"name":"levi499","email":"levi@smartive.ch","login":"levi499","count":5},{"name":"mdumond","email":"48355472+mdumond","login":"mdumond","count":5},{"name":"Debajyoti Karmakar","email":"debkarma97@gmail.com","login":"debkarma","count":4},{"name":"anamjaved1594","email":"22038322+anamjaved1594","login":"anamjaved1594","count":3},{"name":"thomasbrenner-ch","email":"thomasbrenner88@gmail.com","login":"thomasbrenner-ch","count":3},{"name":"Akinpelu Abiodun","email":"59386529+Matthabbey","login":"Matthabbey","count":3},{"name":"Sean Marcia","email":"seanmarcia@github.com","login":"seanmarcia","count":2},{"name":"Sean John Camara","email":"camara.sean13@gmail.com","login":"sean-camara","count":2},{"name":"Micha","email":"42565366+micharied","login":"micharied","count":2},{"name":"Jess Lim","email":"101371613+jeslyw","login":"jeslyw","count":2},{"name":"Inna Abdrakhmanova","email":"innaspbsu@gmail.com","login":"IPogorelova","count":2},{"name":"Damilola Oladele","email":"98895460+activus-d","login":"activus-d","count":1},{"name":"Emmanuel Adeyemi","email":"91387021+nueladeyemi1","login":"nueladeyemi1","count":1},{"name":"Florian Schmitz","email":"59688267+floodoo","login":"floodoo","count":1},{"name":"Harshil Jani","email":"harshiljani2002@gmail.com","login":"Harshil-Jani","count":1},{"name":"Kerrin","email":"101990148+kerrrin","login":"kerrrin","count":1},{"name":"Ntokozo","email":"ntkzwane@proton.me","login":"ntkzwane","count":1},{"name":"Stoica Claudiu","email":"130805782+llr3v0ll","login":"llr3v0ll","count":1},{"name":"Suryanarayanan","email":"144770284+SuryaNarayananDev","login":"SuryaNarayananDev","count":1},{"name":"Yatharth Jain","email":"93596535+Yatharth-Jain","login":"Yatharth-Jain","count":1}],"past_year_committers":[{"name":"renovate[bot]","email":"29139614+renovate[bot]","login":"renovate[bot]","count":274},{"name":"Raphael Wirth","email":"37732078+rawi96","login":"rawi96","count":271},{"name":"fabricem90","email":"fabrice@smartive.ch","login":"fabricem90","count":83},{"name":"Sandino Scheidegger","email":"sandino@socialincome.org","login":"ssandino","count":44},{"name":"Karin Berg","email":"karin@karinberg.de","login":"KarinBerg","count":44},{"name":"ManuM","email":"manuel.mumenthaler@gmail.com","login":"MumenthalerManuel","count":39},{"name":"Nando Schär","email":"118849757+nschaer92","login":"nschaer92","count":26},{"name":"Kevin Walker","email":"kevin@smartive.ch","login":"Walkeezy","count":24},{"name":"PM","email":"3749956+CluEleSsUK","login":"CluEleSsUK","count":14},{"name":"Cheryl Oberholzer","email":"cheryl.oberholzer@gmx.ch","login":"cheryloberholzer","count":8},{"name":"Copilot","email":"198982749+Copilot","login":"Copilot","count":8},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":7},{"name":"Gavriil","email":"gavriiltzortzakis@gmail.com","login":"Gavriil-Tzortzakis","count":5},{"name":"levi499","email":"levi@smartive.ch","login":"levi499","count":5},{"name":"Debajyoti Karmakar","email":"debkarma97@gmail.com","login":"debkarma","count":4},{"name":"anamjaved1594","email":"22038322+anamjaved1594","login":"anamjaved1594","count":3},{"name":"Michael Kündig","email":"michael@socialincome.org","login":"mkue","count":2},{"name":"Sean John Camara","email":"camara.sean13@gmail.com","login":"sean-camara","count":2},{"name":"Marco Bohler","email":"marco@smartive.ch","login":"triggertoo","count":2},{"name":"Kerrin","email":"101990148+kerrrin","login":"kerrrin","count":1},{"name":"Pranav Chatur","email":"pranavchatur@gmail.com","login":"DarkMenacer","count":1},{"name":"Suryanarayanan","email":"144770284+SuryaNarayananDev","login":"SuryaNarayananDev","count":1},{"name":"Verry","email":"development@verena-zaiser.de","login":"novas1r1","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-14T00:00:06.241Z","repositories_count":6660468,"commits_count":942247605,"contributors_count":40030436,"owners_count":1338593,"committers_count":3308403,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"socialincome-san/public","html_url":"https://github.com/socialincome-san/public","last_synced_at":"2026-08-13T14:01:26.478Z","status":null,"issues_count":294,"pull_requests_count":852,"avg_time_to_close_issue":19418684.194117647,"avg_time_to_close_pull_request":702088.2019230769,"issues_closed_count":170,"pull_requests_closed_count":728,"pull_request_authors_count":42,"issue_authors_count":21,"avg_comments_per_issue":0.9659863945578231,"avg_comments_per_pull_request":1.8732394366197183,"merged_pull_requests_count":612,"bot_issues_count":1,"bot_pull_requests_count":165,"past_year_issues_count":55,"past_year_pull_requests_count":193,"past_year_avg_time_to_close_issue":611891.4444444445,"past_year_avg_time_to_close_pull_request":172784.23076923078,"past_year_issues_closed_count":18,"past_year_pull_requests_closed_count":143,"past_year_pull_request_authors_count":20,"past_year_issue_authors_count":9,"past_year_avg_comments_per_issue":0.45454545454545453,"past_year_avg_comments_per_pull_request":0.7253886010362695,"past_year_bot_issues_count":1,"past_year_bot_pull_requests_count":96,"past_year_merged_pull_requests_count":135,"created_at":"2024-04-20T15:17:49.291Z","updated_at":"2026-08-13T14:01:26.478Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/socialincome-san%2Fpublic/issues","issue_labels_count":{"website":73,"feature":57,"admintool":40,"mobileapp":24,"flutter":20,"bug":19,"Website":17,"admin tool":17,"mobile":16,"Portal":13,"Help wanted":8,"longlist":6,"hacktoberfest":5,"Longlist":4,"surveys":4,"good first issue":4,"Good first issue":4,"help wanted":3,"Weekend":3,"Journal":2,"ui":2,"devop":2,"github dpg":2,"survey":2,"admin":1,"dependencies":1,"documentation":1,"Dependencies":1,"setup":1},"pull_request_labels_count":{"javascript":82,"dependencies":76,"mobile":24,"website":22,"Dependencies":13,"feature":8,"mobileapp":7,"ui":4,"fundraisers":3,"Mobile":3,"flutter":2,"GitHub DPG":2,"surveys":1},"issue_author_associations_count":{"MEMBER":190,"CONTRIBUTOR":97,"NONE":7},"pull_request_author_associations_count":{"CONTRIBUTOR":615,"MEMBER":206,"NONE":31},"issue_authors":{"ssandino":190,"rawi96":30,"mkue":19,"novas1r1":13,"KarinBerg":9,"andrashee":8,"renestalder":7,"triggertoo":4,"fabricem90":2,"levi499":1,"renovate[bot]":1,"kerrrin":1,"alphachart":1,"chojuninengu":1,"almsh":1,"DarkMenacer":1,"MumenthalerManuel":1,"MDikkii":1,"Walkeezy":1,"cheryloberholzer":1,"RAJVEER42":1},"pull_request_authors":{"ssandino":196,"dependabot[bot]":87,"mkue":85,"renovate[bot]":78,"CluEleSsUK":72,"KarinBerg":57,"rawi96":43,"andrashee":29,"DarkMenacer":24,"triggertoo":21,"novas1r1":18,"Gavriil-Tzortzakis":16,"dnhn":14,"mdumond":10,"MDikkii":9,"almsh":8,"renestalder":8,"activus-d":7,"fabricem90":7,"brennerthomas":7,"MumenthalerManuel":6,"cheryloberholzer":6,"levi499":5,"debkarma":5,"nschaer92":4,"socialincome-dev":4,"IPogorelova":4,"sean-camara":2,"floodoo":2,"pranathi006":2,"ntkzwane":2,"svrmnk":2,"micharied":2,"anthonyray":2,"llr3v0ll":1,"elizabeth-agada":1,"azhang4216":1,"jesslyw":1,"awais1019":1,"anamjaved1594":1,"MoarCoding":1,"SubinoyKarmakar":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-14T00:00:05.923Z","repositories_count":16033374,"issues_count":40421015,"pull_requests_count":130821114,"authors_count":11449147,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"Website":17,"Portal":13,"Help wanted":8,"Longlist":4,"Good first issue":4,"Journal":2,"Dependencies":1,"website":1},"past_year_pull_request_labels_count":{"javascript":16,"Dependencies":13,"dependencies":7,"mobile":5,"Mobile":3},"past_year_issue_author_associations_count":{"MEMBER":35,"CONTRIBUTOR":19,"NONE":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":174,"MEMBER":16,"NONE":2},"past_year_issue_authors":{"ssandino":35,"rawi96":12,"fabricem90":2,"cheryloberholzer":1,"kerrrin":1,"levi499":1,"MumenthalerManuel":1,"renovate[bot]":1,"Walkeezy":1},"past_year_pull_request_authors":{"renovate[bot]":78,"rawi96":26,"dependabot[bot]":18,"ssandino":16,"KarinBerg":8,"fabricem90":7,"cheryloberholzer":6,"MumenthalerManuel":6,"debkarma":5,"levi499":5,"nschaer92":4,"novas1r1":3,"sean-camara":2,"CluEleSsUK":2,"triggertoo":1,"mkue":1,"Gavriil-Tzortzakis":1,"azhang4216":1,"awais1019":1,"anamjaved1594":1},"maintainers":[{"login":"ssandino","count":386,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ssandino"},{"login":"dnhn","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dnhn"},{"login":"activus-d","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/activus-d"}],"active_maintainers":[{"login":"ssandino","count":51,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ssandino"}]},"events":{"total":{"ReleaseEvent":35,"DeleteEvent":509,"PullRequestEvent":558,"ForkEvent":10,"IssuesEvent":332,"WatchEvent":45,"IssueCommentEvent":723,"PushEvent":3284,"PullRequestReviewCommentEvent":1106,"PullRequestReviewEvent":1216,"CreateEvent":608},"last_year":{"ReleaseEvent":3,"DeleteEvent":357,"PullRequestEvent":224,"IssuesEvent":184,"WatchEvent":7,"IssueCommentEvent":164,"PushEvent":2246,"PullRequestReviewEvent":442,"PullRequestReviewCommentEvent":432,"CreateEvent":394}},"keywords":["css","firebase","firestore","open-source","opensourceforgood","react","storybook","vite"],"dependencies":[{"ecosystem":"pub","filepath":"recipients_app/pubspec.lock","sha":null,"kind":"lockfile","created_at":"2022-09-11T23:01:57.795Z","updated_at":"2022-09-11T23:01:57.795Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/pubspec.lock","dependencies":[{"id":4538744131,"package_name":"animations","ecosystem":"pub","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":4538744132,"package_name":"args","ecosystem":"pub","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":4538744133,"package_name":"asn1lib","ecosystem":"pub","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744134,"package_name":"async","ecosystem":"pub","requirements":"2.8.2","direct":false,"kind":"runtime","optional":false},{"id":4538744135,"package_name":"boolean_selector","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744136,"package_name":"characters","ecosystem":"pub","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":4538744137,"package_name":"charcode","ecosystem":"pub","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":4538744138,"package_name":"clock","ecosystem":"pub","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744139,"package_name":"cloud_firestore","ecosystem":"pub","requirements":"2.5.4","direct":false,"kind":"runtime","optional":false},{"id":4538744140,"package_name":"cloud_firestore_platform_interface","ecosystem":"pub","requirements":"5.4.13","direct":false,"kind":"runtime","optional":false},{"id":4538744141,"package_name":"cloud_firestore_web","ecosystem":"pub","requirements":"2.6.8","direct":false,"kind":"runtime","optional":false},{"id":4538744142,"package_name":"collection","ecosystem":"pub","requirements":"1.16.0","direct":false,"kind":"runtime","optional":false},{"id":4538744143,"package_name":"convert","ecosystem":"pub","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":4538744144,"package_name":"crypto","ecosystem":"pub","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":4538744145,"package_name":"cupertino_icons","ecosystem":"pub","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":4538744146,"package_name":"encrypt","ecosystem":"pub","requirements":"5.0.1","direct":false,"kind":"runtime","optional":false},{"id":4538744147,"package_name":"equatable","ecosystem":"pub","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":4538744148,"package_name":"fake_async","ecosystem":"pub","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":4538744149,"package_name":"ffi","ecosystem":"pub","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":4538744150,"package_name":"file","ecosystem":"pub","requirements":"6.1.2","direct":false,"kind":"runtime","optional":false},{"id":4538744151,"package_name":"firebase","ecosystem":"pub","requirements":"9.0.2","direct":false,"kind":"runtime","optional":false},{"id":4538744152,"package_name":"firebase_auth","ecosystem":"pub","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":4538744153,"package_name":"firebase_auth_platform_interface","ecosystem":"pub","requirements":"4.3.1","direct":false,"kind":"runtime","optional":false},{"id":4538744154,"package_name":"firebase_auth_web","ecosystem":"pub","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":4538744155,"package_name":"firebase_core","ecosystem":"pub","requirements":"1.12.0","direct":false,"kind":"runtime","optional":false},{"id":4538744156,"package_name":"firebase_core_platform_interface","ecosystem":"pub","requirements":"4.2.4","direct":false,"kind":"runtime","optional":false},{"id":4538744157,"package_name":"firebase_core_web","ecosystem":"pub","requirements":"1.5.4","direct":false,"kind":"runtime","optional":false},{"id":4538744158,"package_name":"firebase_database","ecosystem":"pub","requirements":"6.1.2","direct":false,"kind":"runtime","optional":false},{"id":4538744159,"package_name":"flutter","ecosystem":"pub","requirements":"0.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744160,"package_name":"flutter_page_indicator","ecosystem":"pub","requirements":"0.0.3","direct":false,"kind":"runtime","optional":false},{"id":4538744161,"package_name":"flutter_swiper","ecosystem":"pub","requirements":"1.1.6","direct":false,"kind":"runtime","optional":false},{"id":4538744162,"package_name":"flutter_test","ecosystem":"pub","requirements":"0.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744163,"package_name":"flutter_web_plugins","ecosystem":"pub","requirements":"0.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744164,"package_name":"http","ecosystem":"pub","requirements":"0.13.4","direct":false,"kind":"runtime","optional":false},{"id":4538744165,"package_name":"http_parser","ecosystem":"pub","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744166,"package_name":"intl","ecosystem":"pub","requirements":"0.17.0","direct":false,"kind":"runtime","optional":false},{"id":4538744167,"package_name":"intl_phone_number_input","ecosystem":"pub","requirements":"0.7.0+2","direct":false,"kind":"runtime","optional":false},{"id":4538744168,"package_name":"js","ecosystem":"pub","requirements":"0.6.4","direct":false,"kind":"runtime","optional":false},{"id":4538744170,"package_name":"libphonenumber","ecosystem":"pub","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":4538744171,"package_name":"libphonenumber_platform_interface","ecosystem":"pub","requirements":"0.3.1","direct":false,"kind":"runtime","optional":false},{"id":4538744172,"package_name":"libphonenumber_plugin","ecosystem":"pub","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":4538744173,"package_name":"libphonenumber_web","ecosystem":"pub","requirements":"0.2.0+1","direct":false,"kind":"runtime","optional":false},{"id":4538744175,"package_name":"matcher","ecosystem":"pub","requirements":"0.12.11","direct":false,"kind":"runtime","optional":false},{"id":4538744177,"package_name":"material_color_utilities","ecosystem":"pub","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":4538744179,"package_name":"menu_button","ecosystem":"pub","requirements":"1.4.2+1","direct":false,"kind":"runtime","optional":false},{"id":4538744180,"package_name":"meta","ecosystem":"pub","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":4538744181,"package_name":"nested","ecosystem":"pub","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744182,"package_name":"password_strength","ecosystem":"pub","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":4538744183,"package_name":"path","ecosystem":"pub","requirements":"1.8.1","direct":false,"kind":"runtime","optional":false},{"id":4538744184,"package_name":"path_provider_linux","ecosystem":"pub","requirements":"2.1.5","direct":false,"kind":"runtime","optional":false},{"id":4538744185,"package_name":"path_provider_platform_interface","ecosystem":"pub","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":4538744186,"package_name":"path_provider_windows","ecosystem":"pub","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":4538744187,"package_name":"platform","ecosystem":"pub","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744188,"package_name":"plugin_platform_interface","ecosystem":"pub","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":4538744189,"package_name":"pointycastle","ecosystem":"pub","requirements":"3.5.1","direct":false,"kind":"runtime","optional":false},{"id":4538744190,"package_name":"process","ecosystem":"pub","requirements":"4.2.4","direct":false,"kind":"runtime","optional":false},{"id":4538744191,"package_name":"provider","ecosystem":"pub","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744192,"package_name":"rounded_loading_button","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744193,"package_name":"rxdart","ecosystem":"pub","requirements":"0.27.3","direct":false,"kind":"runtime","optional":false},{"id":4538744194,"package_name":"shared_preferences","ecosystem":"pub","requirements":"2.0.13","direct":false,"kind":"runtime","optional":false},{"id":4538744195,"package_name":"shared_preferences_android","ecosystem":"pub","requirements":"2.0.11","direct":false,"kind":"runtime","optional":false},{"id":4538744196,"package_name":"shared_preferences_ios","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744197,"package_name":"shared_preferences_linux","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744198,"package_name":"shared_preferences_macos","ecosystem":"pub","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":4538744199,"package_name":"shared_preferences_platform_interface","ecosystem":"pub","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744200,"package_name":"shared_preferences_web","ecosystem":"pub","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":4538744201,"package_name":"shared_preferences_windows","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744202,"package_name":"sky_engine","ecosystem":"pub","requirements":"0.0.99","direct":false,"kind":"runtime","optional":false},{"id":4538744203,"package_name":"source_span","ecosystem":"pub","requirements":"1.8.2","direct":false,"kind":"runtime","optional":false},{"id":4538744204,"package_name":"stack_trace","ecosystem":"pub","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":4538744205,"package_name":"step_progress_indicator","ecosystem":"pub","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":4538744206,"package_name":"stream_channel","ecosystem":"pub","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744207,"package_name":"string_scanner","ecosystem":"pub","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":4538744208,"package_name":"term_glyph","ecosystem":"pub","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":4538744209,"package_name":"test_api","ecosystem":"pub","requirements":"0.4.9","direct":false,"kind":"runtime","optional":false},{"id":4538744210,"package_name":"transformer_page_view","ecosystem":"pub","requirements":"0.1.6","direct":false,"kind":"runtime","optional":false},{"id":4538744211,"package_name":"typed_data","ecosystem":"pub","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":4538744212,"package_name":"url_launcher","ecosystem":"pub","requirements":"6.0.20","direct":false,"kind":"runtime","optional":false},{"id":4538744213,"package_name":"url_launcher_android","ecosystem":"pub","requirements":"6.0.15","direct":false,"kind":"runtime","optional":false},{"id":4538744214,"package_name":"url_launcher_ios","ecosystem":"pub","requirements":"6.0.15","direct":false,"kind":"runtime","optional":false},{"id":4538744215,"package_name":"url_launcher_linux","ecosystem":"pub","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744216,"package_name":"url_launcher_macos","ecosystem":"pub","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744217,"package_name":"url_launcher_platform_interface","ecosystem":"pub","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":4538744218,"package_name":"url_launcher_web","ecosystem":"pub","requirements":"2.0.9","direct":false,"kind":"runtime","optional":false},{"id":4538744219,"package_name":"url_launcher_windows","ecosystem":"pub","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744220,"package_name":"vector_math","ecosystem":"pub","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":4538744221,"package_name":"webview_flutter","ecosystem":"pub","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":4538744222,"package_name":"webview_flutter_android","ecosystem":"pub","requirements":"2.8.3","direct":false,"kind":"runtime","optional":false},{"id":4538744223,"package_name":"webview_flutter_platform_interface","ecosystem":"pub","requirements":"1.8.1","direct":false,"kind":"runtime","optional":false},{"id":4538744224,"package_name":"webview_flutter_wkwebview","ecosystem":"pub","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":4538744225,"package_name":"win32","ecosystem":"pub","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":4538744226,"package_name":"xdg_directories","ecosystem":"pub","requirements":"0.2.0+1","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"pub","filepath":"recipients_app/pubspec.yaml","sha":null,"kind":"manifest","created_at":"2022-09-11T23:01:58.059Z","updated_at":"2022-09-11T23:01:58.059Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/pubspec.yaml","dependencies":[{"id":4538744402,"package_name":"flutter","ecosystem":"pub","requirements":"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nsdk: flutter\n","direct":true,"kind":"runtime","optional":false},{"id":4538744403,"package_name":"flutter_swiper","ecosystem":"pub","requirements":"^1.1.6","direct":true,"kind":"runtime","optional":false},{"id":4538744404,"package_name":"menu_button","ecosystem":"pub","requirements":"^1.4.2+1","direct":true,"kind":"runtime","optional":false},{"id":4538744405,"package_name":"intl","ecosystem":"pub","requirements":"^0.17.0","direct":true,"kind":"runtime","optional":false},{"id":4538744406,"package_name":"encrypt","ecosystem":"pub","requirements":"^5.0.0","direct":true,"kind":"runtime","optional":false},{"id":4538744407,"package_name":"intl_phone_number_input","ecosystem":"pub","requirements":"^0.7.0+2","direct":true,"kind":"runtime","optional":false},{"id":4538744408,"package_name":"password_strength","ecosystem":"pub","requirements":"^0.2.0","direct":true,"kind":"runtime","optional":false},{"id":4538744409,"package_name":"provider","ecosystem":"pub","requirements":"^5.0.0","direct":true,"kind":"runtime","optional":false},{"id":4538744410,"package_name":"shared_preferences","ecosystem":"pub","requirements":"^2.0.6","direct":true,"kind":"runtime","optional":false},{"id":4538744411,"package_name":"step_progress_indicator","ecosystem":"pub","requirements":"^1.0.0","direct":true,"kind":"runtime","optional":false},{"id":4538744412,"package_name":"animations","ecosystem":"pub","requirements":"^2.0.0","direct":true,"kind":"runtime","optional":false},{"id":4538744413,"package_name":"firebase","ecosystem":"pub","requirements":"^9.0.1","direct":true,"kind":"runtime","optional":false},{"id":4538744414,"package_name":"firebase_core","ecosystem":"pub","requirements":"^1.2.0","direct":true,"kind":"runtime","optional":false},{"id":4538744415,"package_name":"firebase_database","ecosystem":"pub","requirements":"^6.1.2","direct":true,"kind":"runtime","optional":false},{"id":4538744416,"package_name":"cloud_firestore","ecosystem":"pub","requirements":"^2.2.0","direct":true,"kind":"runtime","optional":false},{"id":4538744417,"package_name":"firebase_auth","ecosystem":"pub","requirements":"^1.3.0","direct":true,"kind":"runtime","optional":false},{"id":4538744418,"package_name":"cupertino_icons","ecosystem":"pub","requirements":"^1.0.2","direct":true,"kind":"runtime","optional":false},{"id":4538744419,"package_name":"webview_flutter","ecosystem":"pub","requirements":"^3.0.0","direct":true,"kind":"runtime","optional":false},{"id":4538744420,"package_name":"rounded_loading_button","ecosystem":"pub","requirements":"^2.0.8","direct":true,"kind":"runtime","optional":false},{"id":4538744421,"package_name":"url_launcher","ecosystem":"pub","requirements":"^6.0.20","direct":true,"kind":"runtime","optional":false},{"id":4538744422,"package_name":"flutter_test","ecosystem":"pub","requirements":"--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nsdk: flutter\n","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/auto-approve-renovate.yml","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:34.667Z","updated_at":"2026-07-02T17:03:34.667Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/auto-approve-renovate.yml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/deploy-terraform-to-gcp-prod.yml","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:34.840Z","updated_at":"2026-07-02T17:03:34.840Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/deploy-terraform-to-gcp-prod.yml","dependencies":[{"id":25878665048,"package_name":"actions/checkout","ecosystem":"actions","requirements":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","direct":true,"kind":"composite","optional":false},{"id":25878665049,"package_name":"google-github-actions/auth","ecosystem":"actions","requirements":"7c6bc770dae815cd3e89ee6cdf493a5fab2cc093","direct":true,"kind":"composite","optional":false},{"id":25878665050,"package_name":"hashicorp/setup-terraform","ecosystem":"actions","requirements":"dfe3c3f87815947d99a8997f908cb6525fc44e9e","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"website/Dockerfile","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:36.401Z","updated_at":"2026-07-02T17:03:36.401Z","repository_link":"https://github.com/socialincome-san/public/blob/main/website/Dockerfile","dependencies":[{"id":25878665054,"package_name":"node","ecosystem":"docker","requirements":"24-alpine@sha256","direct":true,"kind":"build","optional":false},{"id":25878665055,"package_name":"base","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"website/docker-compose.yml","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:36.775Z","updated_at":"2026-07-02T17:03:36.775Z","repository_link":"https://github.com/socialincome-san/public/blob/main/website/docker-compose.yml","dependencies":[{"id":25878665056,"package_name":"postgres","ecosystem":"docker","requirements":"18-alpine@sha256","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/aikido-scan.yml","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:34.102Z","updated_at":"2026-07-02T17:03:34.102Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/aikido-scan.yml","dependencies":[{"id":25878665047,"package_name":"actions/checkout","ecosystem":"actions","requirements":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/deploy-terraform-to-gcp-staging.yml","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:35.925Z","updated_at":"2026-07-02T17:03:35.925Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/deploy-terraform-to-gcp-staging.yml","dependencies":[{"id":25878665051,"package_name":"actions/checkout","ecosystem":"actions","requirements":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","direct":true,"kind":"composite","optional":false},{"id":25878665052,"package_name":"google-github-actions/auth","ecosystem":"actions","requirements":"7c6bc770dae815cd3e89ee6cdf493a5fab2cc093","direct":true,"kind":"composite","optional":false},{"id":25878665053,"package_name":"hashicorp/setup-terraform","ecosystem":"actions","requirements":"dfe3c3f87815947d99a8997f908cb6525fc44e9e","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"maven","filepath":"recipients_app/android/app/build.gradle.kts","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:36.977Z","updated_at":"2026-07-02T17:03:36.977Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/android/app/build.gradle.kts","dependencies":[]},{"ecosystem":"maven","filepath":"recipients_app/android/build.gradle.kts","sha":null,"kind":"manifest","created_at":"2026-07-02T17:03:37.062Z","updated_at":"2026-07-02T17:03:37.062Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/android/build.gradle.kts","dependencies":[]},{"ecosystem":"npm","filepath":"website/package-lock.json","sha":null,"kind":"lockfile","created_at":"2026-07-02T17:03:37.187Z","updated_at":"2026-07-02T17:03:37.187Z","repository_link":"https://github.com/socialincome-san/public/blob/main/website/package-lock.json","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/codeql-analysis.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:30:47.708Z","updated_at":"2023-02-18T08:30:47.708Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/codeql-analysis.yml","dependencies":[{"id":7757469641,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7757469643,"package_name":"github/codeql-action/init","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757469645,"package_name":"github/codeql-action/autobuild","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757469646,"package_name":"github/codeql-action/analyze","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/rules.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:30:47.873Z","updated_at":"2023-02-18T08:30:47.873Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/rules.yml","dependencies":[{"id":7757469909,"package_name":"fkirc/skip-duplicate-actions","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":7757469910,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/website.yml","sha":null,"kind":"manifest","created_at":"2023-02-18T08:30:48.007Z","updated_at":"2023-02-18T08:30:48.007Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/website.yml","dependencies":[{"id":7757470039,"package_name":"fkirc/skip-duplicate-actions","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":7757470040,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7757470041,"package_name":"rossjrw/pr-preview-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"npm","filepath":"website/package.json","sha":null,"kind":"manifest","created_at":"2023-02-18T08:30:54.413Z","updated_at":"2023-02-18T08:30:54.413Z","repository_link":"https://github.com/socialincome-san/public/blob/main/website/package.json","dependencies":[{"id":7757486003,"package_name":"@socialincome/shared","ecosystem":"npm","requirements":"^0.1.0","direct":true,"kind":"runtime","optional":false},{"id":7757486004,"package_name":"@types/node","ecosystem":"npm","requirements":"18.11.9","direct":true,"kind":"runtime","optional":false},{"id":7757486005,"package_name":"@types/react","ecosystem":"npm","requirements":"18.0.25","direct":true,"kind":"runtime","optional":false},{"id":7757486006,"package_name":"@types/react-dom","ecosystem":"npm","requirements":"18.0.9","direct":true,"kind":"runtime","optional":false},{"id":7757486007,"package_name":"eslint","ecosystem":"npm","requirements":"8.28.0","direct":true,"kind":"runtime","optional":false},{"id":7757486008,"package_name":"eslint-config-next","ecosystem":"npm","requirements":"13.0.4","direct":true,"kind":"runtime","optional":false},{"id":7757486009,"package_name":"firebase-admin","ecosystem":"npm","requirements":"^11.5.0","direct":true,"kind":"runtime","optional":false},{"id":7757486010,"package_name":"firebase-functions","ecosystem":"npm","requirements":"^4.1.0","direct":true,"kind":"runtime","optional":false},{"id":7757486011,"package_name":"i18next","ecosystem":"npm","requirements":"^22.4.9","direct":true,"kind":"runtime","optional":false},{"id":7757486012,"package_name":"next","ecosystem":"npm","requirements":"13.0.4","direct":true,"kind":"runtime","optional":false},{"id":7757486013,"package_name":"next-i18next","ecosystem":"npm","requirements":"^13.1.4","direct":true,"kind":"runtime","optional":false},{"id":7757486014,"package_name":"next-transpile-modules","ecosystem":"npm","requirements":"^10.0.0","direct":true,"kind":"runtime","optional":false},{"id":7757486015,"package_name":"react","ecosystem":"npm","requirements":"18.2.0","direct":true,"kind":"runtime","optional":false},{"id":7757486016,"package_name":"react-cookie","ecosystem":"npm","requirements":"^4.1.1","direct":true,"kind":"runtime","optional":false},{"id":7757486017,"package_name":"react-dom","ecosystem":"npm","requirements":"18.2.0","direct":true,"kind":"runtime","optional":false},{"id":7757486018,"package_name":"react-i18next","ecosystem":"npm","requirements":"^12.1.5","direct":true,"kind":"runtime","optional":false},{"id":7757486019,"package_name":"typescript","ecosystem":"npm","requirements":"4.9.3","direct":true,"kind":"runtime","optional":false},{"id":7757486020,"package_name":"@playwright/test","ecosystem":"npm","requirements":"^1.30.0","direct":true,"kind":"development","optional":false},{"id":7757486021,"package_name":"@testing-library/jest-dom","ecosystem":"npm","requirements":"^5.16.5","direct":true,"kind":"development","optional":false},{"id":7757486022,"package_name":"@testing-library/react","ecosystem":"npm","requirements":"^13.4.0","direct":true,"kind":"development","optional":false},{"id":7757486023,"package_name":"i18next-parser","ecosystem":"npm","requirements":"^7.6.0","direct":true,"kind":"development","optional":false},{"id":7757486024,"package_name":"isomorphic-fetch","ecosystem":"npm","requirements":"^3.0.0","direct":true,"kind":"development","optional":false},{"id":7757486025,"package_name":"jest","ecosystem":"npm","requirements":"^29.4.1","direct":true,"kind":"development","optional":false},{"id":7757486026,"package_name":"jest-environment-jsdom","ecosystem":"npm","requirements":"^29.4.1","direct":true,"kind":"development","optional":false},{"id":7757486027,"package_name":"ts-mockito","ecosystem":"npm","requirements":"^2.6.1","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/actions/init/action.yml","sha":null,"kind":"manifest","created_at":"2023-10-22T20:28:07.178Z","updated_at":"2023-10-22T20:28:07.178Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/actions/init/action.yml","dependencies":[{"id":14271063998,"package_name":"actions/setup-node","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":14271063999,"package_name":"jsdaniell/create-json","ecosystem":"actions","requirements":"v1.2.2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/deployment.yml","sha":null,"kind":"manifest","created_at":"2023-10-22T20:28:07.363Z","updated_at":"2023-10-22T20:28:07.363Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/deployment.yml","dependencies":[{"id":14271064006,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":14271064007,"package_name":"./.github/workflows/actions/init","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false},{"id":14271064075,"package_name":"FirebaseExtended/action-hosting-deploy","ecosystem":"actions","requirements":"v0","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/production-deployment.yml","sha":null,"kind":"manifest","created_at":"2023-10-22T20:28:09.501Z","updated_at":"2023-10-22T20:28:09.501Z","repository_link":"https://github.com/socialincome-san/public/blob/main/.github/workflows/production-deployment.yml","dependencies":[{"id":14271064161,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":14271064162,"package_name":"./.github/workflows/actions/init","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"swiftpm","filepath":"recipients_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved","sha":null,"kind":"lockfile","created_at":"2026-08-08T23:39:51.633Z","updated_at":"2026-08-08T23:39:51.633Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved","dependencies":[{"id":25981399199,"package_name":"github.com/google/abseil-cpp-binary","ecosystem":"swiftpm","requirements":"1.2024072200.0","direct":false,"kind":"runtime","optional":false},{"id":25981399200,"package_name":"github.com/google/app-check","ecosystem":"swiftpm","requirements":"11.3.0","direct":false,"kind":"runtime","optional":false},{"id":25981399201,"package_name":"github.com/firebase/firebase-ios-sdk","ecosystem":"swiftpm","requirements":"12.15.0","direct":false,"kind":"runtime","optional":false},{"id":25981399202,"package_name":"github.com/googleads/google-ads-on-device-conversion-ios-sdk","ecosystem":"swiftpm","requirements":"3.6.0","direct":false,"kind":"runtime","optional":false},{"id":25981399203,"package_name":"github.com/google/GoogleAppMeasurement","ecosystem":"swiftpm","requirements":"12.15.0","direct":false,"kind":"runtime","optional":false},{"id":25981399204,"package_name":"github.com/google/GoogleDataTransport","ecosystem":"swiftpm","requirements":"10.1.0","direct":false,"kind":"runtime","optional":false},{"id":25981399205,"package_name":"github.com/google/GoogleUtilities","ecosystem":"swiftpm","requirements":"8.1.1","direct":false,"kind":"runtime","optional":false},{"id":25981399206,"package_name":"github.com/google/grpc-binary","ecosystem":"swiftpm","requirements":"1.69.1","direct":false,"kind":"runtime","optional":false},{"id":25981399207,"package_name":"github.com/google/gtm-session-fetcher","ecosystem":"swiftpm","requirements":"5.3.0","direct":false,"kind":"runtime","optional":false},{"id":25981399208,"package_name":"github.com/google/interop-ios-for-google-sdks","ecosystem":"swiftpm","requirements":"101.0.0","direct":false,"kind":"runtime","optional":false},{"id":25981399209,"package_name":"github.com/firebase/leveldb","ecosystem":"swiftpm","requirements":"1.22.5","direct":false,"kind":"runtime","optional":false},{"id":25981399210,"package_name":"github.com/firebase/nanopb","ecosystem":"swiftpm","requirements":"2.30910.1","direct":false,"kind":"runtime","optional":false},{"id":25981399211,"package_name":"github.com/google/promises","ecosystem":"swiftpm","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":25981399212,"package_name":"github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk","ecosystem":"swiftpm","requirements":"18.9.1","direct":false,"kind":"runtime","optional":false},{"id":25981399233,"package_name":"github.com/getsentry/sentry-cocoa","ecosystem":"swiftpm","requirements":"8.58.3","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"swiftpm","filepath":"recipients_app/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved","sha":null,"kind":"lockfile","created_at":"2026-08-08T23:39:52.096Z","updated_at":"2026-08-08T23:39:52.096Z","repository_link":"https://github.com/socialincome-san/public/blob/main/recipients_app/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved","dependencies":[{"id":25981399474,"package_name":"github.com/google/abseil-cpp-binary","ecosystem":"swiftpm","requirements":"1.2024072200.0","direct":false,"kind":"runtime","optional":false},{"id":25981399476,"package_name":"github.com/google/app-check","ecosystem":"swiftpm","requirements":"11.3.0","direct":false,"kind":"runtime","optional":false},{"id":25981399478,"package_name":"github.com/firebase/firebase-ios-sdk","ecosystem":"swiftpm","requirements":"12.15.0","direct":false,"kind":"runtime","optional":false},{"id":25981399481,"package_name":"github.com/googleads/google-ads-on-device-conversion-ios-sdk","ecosystem":"swiftpm","requirements":"3.6.0","direct":false,"kind":"runtime","optional":false},{"id":25981399482,"package_name":"github.com/google/GoogleAppMeasurement","ecosystem":"swiftpm","requirements":"12.15.0","direct":false,"kind":"runtime","optional":false},{"id":25981399484,"package_name":"github.com/google/GoogleDataTransport","ecosystem":"swiftpm","requirements":"10.1.0","direct":false,"kind":"runtime","optional":false},{"id":25981399485,"package_name":"github.com/google/GoogleUtilities","ecosystem":"swiftpm","requirements":"8.1.1","direct":false,"kind":"runtime","optional":false},{"id":25981399486,"package_name":"github.com/google/grpc-binary","ecosystem":"swiftpm","requirements":"1.69.1","direct":false,"kind":"runtime","optional":false},{"id":25981399488,"package_name":"github.com/google/gtm-session-fetcher","ecosystem":"swiftpm","requirements":"5.3.0","direct":false,"kind":"runtime","optional":false},{"id":25981399489,"package_name":"github.com/google/interop-ios-for-google-sdks","ecosystem":"swiftpm","requirements":"101.0.0","direct":false,"kind":"runtime","optional":false},{"id":25981399491,"package_name":"github.com/firebase/leveldb","ecosystem":"swiftpm","requirements":"1.22.5","direct":false,"kind":"runtime","optional":false},{"id":25981399493,"package_name":"github.com/firebase/nanopb","ecosystem":"swiftpm","requirements":"2.30910.1","direct":false,"kind":"runtime","optional":false},{"id":25981399495,"package_name":"github.com/google/promises","ecosystem":"swiftpm","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":25981399496,"package_name":"github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk","ecosystem":"swiftpm","requirements":"18.9.1","direct":false,"kind":"runtime","optional":false},{"id":25981399497,"package_name":"github.com/getsentry/sentry-cocoa","ecosystem":"swiftpm","requirements":"8.58.3","direct":false,"kind":"runtime","optional":false}]}],"score":9.55393007636626,"created_at":"2024-08-04T00:12:02.463Z","updated_at":"2026-08-14T14:31:26.578Z","avatar_url":"https://github.com/socialincome-san.png","language":"TypeScript","category":"Sustainable Development","sub_category":"Population and Poverty","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Social Income\n\n#### #Tech4Good \u0026nbsp;\u0026nbsp;#OpenSource \u0026nbsp;\u0026nbsp;#Solidarity\n\n![Social Income Logo](https://github.com/socialincome-san/public/assets/6095849/e33d03b3-7502-46cc-bfe8-f70ff4374a0e)\n\nSocial Income is a radically simple solution in the fight against poverty.\nThe open-source initiative converts donations into an unconditional basic\nincome, sent directly to the mobile phones of people living in poverty in the\nGlobal South.\n\nhttps://user-images.githubusercontent.com/6095849/191377786-10cdb4a1-5b25-4512-ade9-2cc0e153d947.mp4\n\n## What Is In This Repository?\n\nThis repository contains the public website, internal tools, local development\nseed data, infrastructure code, and the recipient mobile app.\n\n```text\n/\n├─ recipients_app/        Mobile app for Social Income recipients\n├─ seed/                  Firebase emulator seed data\n└─ website/               Next.js app, APIs, database, infra, and tests\n```\n\n### `website/`\n\nThe main Next.js application. It contains:\n\n- Public website: the public Social Income website. Parts are still hardcoded,\n  while more content is being moved to Storyblok CMS.\n- Portal: internal operations tool for program management, payments,\n  recipients, contributors, and admin functionality.\n- Dashboard: contributor self-service area for payments, subscriptions, and\n  personal details.\n- Partner Space: local partner self-service area for recipients, candidates,\n  and partner profile data.\n- API routes: backend endpoints used by the website and the recipient mobile\n  app.\n- Database layer: Prisma ORM with PostgreSQL.\n- Infrastructure: Terraform configuration under `website/infra`.\n- Tests: unit tests and Playwright end-to-end tests.\n\n### `recipients_app/`\n\nMobile app for recipients. Recipients can log in, view payment history, and\ncomplete surveys. See `recipients_app/README.md` for mobile setup details.\n\n### `seed/`\n\nSeed data for the local Firebase emulators. Firebase Auth users are imported\nautomatically when the local development environment starts.\n\n## Local Development Setup\n\n### Requirements\n\nInstall these tools before starting:\n\n- [mise](https://mise.jdx.dev)\n- Docker\n- Node.js and npm through mise\n\nOn macOS, install mise with:\n\n```bash\nbrew install mise\n```\n\n### 1. Install Tool Versions And Dependencies\n\n```bash\ncd website\nmise install\nnpm ci\n```\n\nThe web app keeps its Node dependencies, mise tasks, formatting config, Prisma\nsetup, and most local tooling inside `website/`.\n\n### 2. Prepare Environment Variables\n\nCopy the local env template:\n\n```bash\ncd website\ncp .env.local.sample .env.local\n```\n\nFor most external contributors, the only required CMS value is:\n\n```bash\nSTORYBLOK_PREVIEW_TOKEN=\"\u003cpublic-content-delivery-api-token\u003e\"\n```\n\nDespite the name, `STORYBLOK_PREVIEW_TOKEN` is used by the website to load\nStoryblok content through the Content Delivery API. A public token is enough\nfor frontend and UI work against published content.\n\nIf you need this token, ask a maintainer or contact\n`support@socialincome.org`. Do not commit real API keys or secrets.\n\nMaintainers may also need these Storyblok values for preview mode, webhooks,\nor schema/type generation:\n\n- `STORYBLOK_PREVIEW_SECRET`\n- `STORYBLOK_WEBHOOK_SECRET`\n- `STORYBLOK_PERSONAL_ACCESS_TOKEN`\n- `STORYBLOK_SPACE_ID`\n\n### 3. Start The Local Environment\n\n```bash\ncd website\nmise dev\n```\n\nThis starts:\n\n- PostgreSQL in Docker\n- Firebase emulators for Auth and Firestore\n- Next.js at `http://localhost:3000`\n- Storybook at `http://localhost:6006`\n\nWe use Storybook for reusable website UI components. It is started locally by\n`mise dev` and is available on staging and production at\n`https://staging.socialincome.org/storybook` and\n`https://socialincome.org/storybook`.\n\nThe Firebase emulator UI is available at:\n\n```text\nhttp://localhost:4000\n```\n\nAuth users can be inspected at:\n\n```text\nhttp://localhost:4000/auth\n```\n\n### 4. Seed The Local Database\n\nFirebase Auth users are imported automatically from `seed/auth_export` when\nthe emulator starts. The PostgreSQL database needs to be seeded once manually:\n\n```bash\ncd website\nnpm run db:seed\n```\n\nThis fills the local database with representative test data from\n`website/src/lib/database/seed`.\n\n## Local Login\n\nOpen the website at:\n\n```text\nhttp://localhost:3000\n```\n\nClick `Login` in the top navigation and enter one of these local test users:\n\n| Area | Purpose | Email |\n| --- | --- | --- |\n| Portal | Internal operations and admin tool | `power@portal.test` |\n| Dashboard | Contributor self-service area | `coreh@dashboard.test` |\n| Partner Space | Local partner self-service area | `sl@partner.test` |\n\nIn staging and production, login sends a magic link by email. Locally, the\nFirebase emulator logs the magic link instead. Copy it from the terminal\nrunning `mise dev`, or open:\n\n```text\nhttp://localhost:4000/logs\n```\n\n## Development Flow\n\nThe main integration branch for active development is `main`.\n\n1. Create your feature branch from `main`.\n2. Keep your changes focused on one issue or feature.\n3. Run the relevant checks locally.\n4. Open a pull request back into `main`.\n5. Wait for CI and review.\n\nExample:\n\n```bash\ngit checkout main\ngit pull\ngit checkout -b fix/issue-2064-short-description\n```\n\nWebsite checks run for pull requests and for pushes to `main`.\nStaging deployment is connected to `main`; production releases are handled\nby maintainers.\n\nUseful local checks for website changes:\n\n```bash\ncd website\nnpm run lint\nnpm run typecheck\nnpm run test:unit\nnpm run test:e2e\n```\n\nFor many small UI or content changes, `lint` and `typecheck` are a good\nminimum before opening a PR. Run the broader test suite when touching shared\nlogic, authentication, database behavior, or user flows.\n\n## Storyblok Development\n\nWe use [Storyblok](https://www.storyblok.com/docs) as CMS for parts of the\npublic website.\n\nFor normal local development, set the public Content Delivery API token in\n`website/.env.local`:\n\n```bash\nSTORYBLOK_PREVIEW_TOKEN=\"\u003cpublic-content-delivery-api-token\u003e\"\n```\n\nUse local HTTPS if you are working with Storyblok live preview:\n\n```bash\ncd website\nmise run dev-ssl\n```\n\n### Storyblok Type Generation\n\nIf you changed the Storyblok schema, regenerate the generated TypeScript\ntypes. This requires maintainer-level Storyblok credentials:\n\n```bash\ncd website\nnpm run storyblok:generate\n```\n\nThe command logs into Storyblok, pulls component schemas, and writes generated\ntypes to `website/src/generated/storyblok/types`.\n\n### Anonymous Campaign Submissions\n\nVisitors can submit campaigns from the public `/campaigns` page. Submissions:\n\n- create an inactive, non-public database `Campaign` with a server-generated slug\n- upload a primary image and create an unpublished Storyblok `Campaign` story\n- link database and CMS entries through `Campaign.slug` ↔ `Storyblok.content.portalSlug`\n\nPublication happens manually in Storyblok. Published Storyblok stories are the\nsole public visibility gate for campaign pages (detail load and overview join).\n\nPublic **active** vs **inactive** is derived from campaign end date and goal\nprogress (not the database `isActive` flag): a campaign is inactive when its\nfinish date has passed or its goal amount has been reached. The overview filter\nand card linkability use that derived state; deep links to published stories\nstill work after a campaign becomes inactive.\n\nServer-only configuration lives in\n`website/src/lib/config/campaign-submission.config.ts`. Set the Management API\ntoken in `website/.env.local`:\n\n```bash\nSTORYBLOK_MANAGEMENT_TOKEN=\"\u003cstoryblok-personal-access-token\u003e\"\n```\n\nThe token must be able to create draft stories under `pages/campaigns` and\nupload assets in the configured asset folder. If a submission fails after partial\nprogress, the API attempts compensating cleanup of the created Storyblok asset,\nStoryblok story, and database row.\n\nFuture hardening (not part of the first version): Cloudflare Turnstile and\ndistributed rate limiting on `POST /api/campaign-submissions`.\n\n## Mobile API\n\nThe `recipients_app` communicates with the Next.js API routes. The public API\ndocumentation is available at:\n\nhttps://socialincome.org/v1/api-docs\n\n## Troubleshooting\n\n### Translations Or Generated Content Look Stale\n\n```bash\nrm -rf website/.next\ncd website\nmise dev\n```\n\n### Firebase Seed Data Did Not Update\n\nThe Firebase emulators load seed data from `seed/`. If you changed the seed\ndata and want a fresh start:\n\n```bash\ndocker compose -f website/docker-compose.yml down --remove-orphans --volumes\ncd website\nmise dev\n```\n\n### Docker Or Database State Looks Broken\n\nIf Prisma migrations fail, old containers are hanging around, or the local DB\nis in a strange state, reset the website Docker environment:\n\n```bash\ndocker compose -f website/docker-compose.yml down --remove-orphans --volumes\n```\n\nThis removes the website Docker containers and named volumes, including local\nPostgreSQL data. Run `mise dev` and `npm run db:seed` again afterwards.\n\n### E2E Checks Look Stuck\n\nThe Playwright CI job may update screenshots and commit them back into a PR.\nThat creates a new commit. GitHub sometimes does not start a fresh workflow\nrun for commits made by `github-actions`, so checks can appear stale even\nthough the previous run passed. Ask a maintainer if this happens.\n\n## Useful Commands\n\n### Database\n\n```bash\ncd website\nnpm run db:seed\nnpm run db:studio\nnpm run db:migrate:dev\n```\n\n### Dump Local Database\n\n```bash\npg_dump -Fc --no-owner \"postgresql://social-income:social-income@localhost:5432/social-income\" \u003e local.dump\n```\n\n### Restore A Dump\n\n```bash\npg_restore --clean --if-exists --no-owner -d \"\u003cdatabase-url\u003e\" local.dump\n```\n\n## Financial Contributions\n\n### Donate 1 Percent Of Your Income\n\n[Become a contributor](https://socialincome.org/get-involved) of Social\nIncome. Donations are tax-deductible in Switzerland.\n\n### Sponsor Dev Community\n\n[Become a sponsor](https://github.com/sponsors/socialincome-san) and help\nbuild open-source software for more equality and less poverty. Donations\nthrough the GitHub Sponsor program support the developer community.\n\n## Social Income NGO\n\n### Non-Profit Organization\n\nSocial Income is a non-profit association\n([CHE-289.611.695](https://www.uid.admin.ch/Detail.aspx?uid_id=CHE-289.611.695))\nbased in Zurich, Switzerland. Connect with us on\n[X](https://twitter.com/so_income),\n[Instagram](https://instagram.com/so_income),\n[LinkedIn](https://www.linkedin.com/company/socialincome),\n[Facebook](https://facebook.com/socialincome.org), or by\n[email](mailto:hello@socialincome.org).\n\n### Radical Transparency\n\nWe believe that transparency builds trust and trust builds solidarity. This is\nwhy we disclose our\n[finances](https://socialincome.org/transparency/finances/usd) to the public.\n\n### Open Source Community\n\nOpen source is made by people like you. These individuals, among many others,\nhave contributed to Social Income:\n\n[![Contributors](https://contrib.rocks/image?repo=socialincome-san/public\u0026columns=10)](https://github.com/socialincome-san/public/graphs/contributors)\n\n### Software And IP Contributions\n\nWe receive in-kind donations from\n[Google Nonprofit](https://www.google.com/nonprofits/),\n[GitHub](https://socialimpact.github.com),\n[Codemagic](https://codemagic.io/start/),\n[Linktree](https://linktr.ee),\n[Twilio](https://twilio.org),\n[Algolia](https://www.algolia.com),\n[JetBrains](https://www.jetbrains.com),\n[Storyblok](https://www.storyblok.com),\n[1Password](https://1password.com),\n[Mux](https://www.mux.com),\n[Sentry](https://sentry.io), and\n[Lineto](https://www.lineto.com). Our tools also use open-source technologies\nsuch as [FireCMS](https://firecms.co),\n[Storybook](https://storybook.js.org), and\n[Tailwind CSS](https://tailwindcss.com).\n\n## License\n\nThis project is licensed under [MIT](LICENSE), with the exception of the\n[Unica77 font](https://lineto.com/typefaces/unica77), which is exclusively\nlicensed to Social Income.\n","funding_links":["https://github.com/sponsors/socialincome-san","socialincome.org"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["measur","archiving","optimize","transforms","projection","productivity","generic","compose","observation","animals"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/297759","html_url":"https://ost.ecosyste.ms/projects/297759"}