From 2f7d311fc21c5ee9d60d6a07e8aad658b4e3533b Mon Sep 17 00:00:00 2001 From: Sandino Scheidegger Date: Sat, 9 Nov 2024 15:58:34 +0100 Subject: [PATCH] feature (website): new page for recipient selection (#919) --- package-lock.json | 1 + shared/locales/de/website-faq.json | 55 ++++- .../de/website-recipient-selection.json | 54 ----- shared/locales/de/website-selection.json | 121 +++++++++++ shared/locales/en/website-faq.json | 50 +++++ .../en/website-recipient-selection.json | 54 ----- shared/locales/en/website-selection.json | 118 +++++++++++ shared/locales/fr/website-faq.json | 51 +++++ .../fr/website-recipient-selection.json | 54 ----- shared/locales/fr/website-selection.json | 115 +++++++++++ shared/locales/it/website-faq.json | 50 +++++ .../it/website-recipient-selection.json | 54 ----- shared/locales/it/website-selection.json | 118 +++++++++++ ui/src/components/button.tsx | 4 +- ui/src/components/card.tsx | 2 +- ui/src/globals.css | 6 +- website/package.json | 1 + .../(components)/hero-video-overlay.tsx | 1 + .../(home)/(components)/mux-video.tsx | 29 +-- .../(website)/(home)/(sections)/faq.tsx | 2 +- .../[lang]/[region]/(website)/faq/page.tsx | 3 +- .../app/[lang]/[region]/(website)/layout.tsx | 2 +- .../[region]/(website)/legal/privacy/page.tsx | 2 +- .../(website)/partners/(sections)/ngocard.tsx | 2 +- .../finances/[currency]/section-1.tsx | 2 +- .../recipient-selection/(assets)/globe.svg | 11 + .../(assets)/transparency.svg | 10 + .../(components)/draw-card.tsx | 74 +++++++ .../(components)/scroll-to-chevron.tsx | 32 +++ .../recipient-selection/(sections)/faq.tsx | 37 ++++ .../(sections)/hero-section.tsx | 67 +++++++ .../(sections)/past-rounds.tsx | 60 ++++++ .../(sections)/resources.tsx | 78 ++++++++ .../(sections)/selection-process.tsx | 188 ++++++++++++++++++ .../{ => (sections)}/state.ts | 0 .../recipient-selection/draw-card.tsx | 74 ------- .../transparency/recipient-selection/page.tsx | 115 ++--------- .../faq/faq-section.tsx | 10 +- .../components/{ => faq}/prose-accordion.tsx | 0 .../src/components/navbar/navbar-client.tsx | 5 +- website/src/components/navbar/navbar.tsx | 4 +- .../navbar/useNavbarBackgroundColor.ts | 17 -- .../providers/context-providers.tsx | 5 +- .../providers/global-state-provider.tsx | 26 +++ 44 files changed, 1321 insertions(+), 443 deletions(-) delete mode 100644 shared/locales/de/website-recipient-selection.json create mode 100644 shared/locales/de/website-selection.json delete mode 100644 shared/locales/en/website-recipient-selection.json create mode 100644 shared/locales/en/website-selection.json delete mode 100644 shared/locales/fr/website-recipient-selection.json create mode 100644 shared/locales/fr/website-selection.json delete mode 100644 shared/locales/it/website-recipient-selection.json create mode 100644 shared/locales/it/website-selection.json create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(assets)/globe.svg create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(assets)/transparency.svg create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(components)/draw-card.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(components)/scroll-to-chevron.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(sections)/faq.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(sections)/hero-section.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(sections)/past-rounds.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(sections)/resources.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/(sections)/selection-process.tsx rename website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/{ => (sections)}/state.ts (100%) delete mode 100644 website/src/app/[lang]/[region]/(website)/transparency/recipient-selection/draw-card.tsx rename website/src/{app/[lang]/[region]/(website) => components}/faq/faq-section.tsx (91%) rename website/src/components/{ => faq}/prose-accordion.tsx (100%) delete mode 100644 website/src/components/navbar/useNavbarBackgroundColor.ts create mode 100644 website/src/components/providers/global-state-provider.tsx diff --git a/package-lock.json b/package-lock.json index 4725cdb29..8e21918a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34163,6 +34163,7 @@ "i18next": "^23.15.2", "js-cookie": "^3.0.5", "lodash": "^4.17.21", + "luxon": "^3.5.0", "next": "14.2.14", "react": "18.3.1", "react-dom": "18.3.1", diff --git a/shared/locales/de/website-faq.json b/shared/locales/de/website-faq.json index 36aa81856..c85a6f2f3 100644 --- a/shared/locales/de/website-faq.json +++ b/shared/locales/de/website-faq.json @@ -2,6 +2,8 @@ "metadata": { "title": "FAQ | Social Income" }, + "title": "FAQ", + "title-long": "Oft gestellte Fragen", "fighting-poverty": { "title": "Armut bekämpfen", "questions": [ @@ -135,8 +137,8 @@ "title": "Freiwilliges Engagement", "questions": [ { - "question": "Wie kann ich mich als Volontär*in beteiligen?", - "answer": " Wenn du eine sinnstiftende Aufgabe mit Social Impact suchst, besuche das Portal Idealist für mehr Informationen zu offenen Stellen oder schreib uns.", + "question": "Wie kann ich mich als Volontär:in beteiligen?", + "answer": "Wenn du eine sinnstiftende Aufgabe mit Social Impact suchst, besuche das Portal Idealist für mehr Informationen zu offenen Stellen oder schreib uns.", "links": [ { "title": "Idealist", @@ -146,6 +148,55 @@ } ] }, + "selection": { + "title": "Selektion der Empfänger:innen", + "questions": [ + { + "question": "Warum wählen wir zufällig aus einem Pool qualifizierter Empfänger:innen aus?", + "answer": "Der Zweck der Anwendung dieser Zufallsauswahlmethode besteht darin, mehrere Ziele zu erreichen. Erstens hilft es, Voreingenommenheit bei der Auswahl der Empfänger:innen zu verhindern und sicherzustellen, dass Angehörige oder Bekannte von Personen, die am Prozess beteiligt sind, keine bevorzugte Behandlung erhalten. Zweitens zielt es darauf ab, Spannungen zwischen Empfänger:innen und Nicht-Empfänger:innen sowie potenzielle Konflikte zwischen Empfänger:innen und unserer Organisation zu vermeiden. Schliesslich streben wir danach, Technologie dort einzubeziehen, wo dies sinnvoll und vorteilhaft für den Prozess ist." + }, + { + "question": "Wer kann den Auswahlprozess beeinflussen?", + "answer": "Indem wir uns auf einen unvorhersehbaren Zufallswert von drand verlassen, der in der Zukunft erzeugt wird, ist es für niemanden möglich, die Ergebnisse des Auswahlprozesses zu beeinflussen. Diese inhärente Zufälligkeit kann genutzt werden, um die Integrität der Auswahl zu bestätigen. Um für Social Income zu qualifizieren, muss eine Person zunächst auf einer Liste einer NGO stehen. Obwohl dies eine vorläufige Bedingung darstellt, steht es im Einklang mit unserem grundlegenden Prinzip: sicherzustellen, dass Social Income diejenigen erreicht, die es am dringendsten benötigen." + }, + { + "question": "Wie vermeiden wir Voreingenommenheit und Spannungen?", + "answer": "Um sicherzustellen, dass wir nicht unbeabsichtigt eine bestimmte ethnische Gruppe, Geschlecht oder Berufsgruppe priorisieren, arbeiten wir mit vielfältigen NGOs zusammen, die unterschiedliche Missionen haben. Im Einklang mit unserer 'keinem Schaden zufügen'-Politik streben wir danach, Spannungen zwischen Empfänger:innen, Nicht-Empfänger:innen, Gemeinschaften und den NGOs zu verhindern. Unsere zufällige Auswahl spielt dabei eine entscheidende Rolle. Sie stellt sicher, dass Personen, die mit Personen im Prozess verwandt oder bekannt sind, keine Bevorzugung erfahren, die zu Konflikten führen könnte." + }, + { + "question": "Was passiert während des Auswahlprozesses?", + "answer": "Wir nutzen die von drand bereitgestellte Zufallszahl, die öffentlich zugänglich ist, um eine bestimmte Anzahl von Personen aus unserer Liste auszuwählen. So wird es gemacht: Wir ordnen zunächst die gehashte Liste der Empfänger:innen. Dann verwenden wir das Zufallselement von drand, um es mithilfe einer Schlüsselableitung in eine Position auf der Liste umzuwandeln. Für diejenigen, die an den technischen Details interessiert sind, sind die Funktion und ihre zugehörigen Prozesse in unserem GitHub-Repository dokumentiert.", + "links": [ + { + "title": "GitHub-Repository", + "href": "https://github.com/socialincome-san/public/tree/main/recipients_selection" + }, + { + "title": "Schlüsselableitungsverfahren", + "href": "https://de.wikipedia.org/wiki/Schl%C3%BCsselableitung" + } + ] + }, + { + "question": "Was ist drand und wer steckt dahinter?", + "answer": "Das drand-Projekt generiert Zufallszahlen, denen jeder vertrauen kann. Es kann angewendet werden, um wirklich zufällige und überprüfbare Auslosungen zu erstellen. Das Projekt wurde 2017 am EPFL von Nicolas Gailly initiiert und erhielt Unterstützung von Philipp Jovanovic. Es wurde von Bryan Ford geleitet. Es ist seitdem unabhängig verwaltet worden und betreibt ein Netzwerk namens League of Entropy mit EPFL, UCL, Cloudflare, Kudelski Security, der Universität von Chile und Protocol Labs. Aktuelle Kernbetreuer des Open-Source-Projekts ist Erick Watson, Yolan Romailler und Patrick McClurg von Randamu.", + "links": [ + { + "title": "League of Entropy", + "href": "https://www.cloudflare.com/leagueofentropy/" + }, + { + "title": "Randamu", + "href": "https://randa.mu" + }, + { + "title": "Drand", + "href": "https://drand.love" + } + ] + } + ] + }, "campaign": { "title": "Fragen und Antworten", "questions": [ diff --git a/shared/locales/de/website-recipient-selection.json b/shared/locales/de/website-recipient-selection.json deleted file mode 100644 index cb4ed509d..000000000 --- a/shared/locales/de/website-recipient-selection.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "title": "Selektion der Empfänger:innen", - "introduction": "Social Income, wie jedes UBI-Projekt, verfügt über begrenzte finanzielle Ressourcen. Die Auswahl, wer Unterstützung erhält und wer nicht, ist schwierig. Wir möchten, dass jeder versteht, wie wir unsere Empfänger:innen auswählen. Seit November 2023 setzen wir eine neue Methode ein, um zufällig Menschen aus armen Gemeinschaften auszuwählen, dank unserer Partnerschaft mit drand.", - "selection-process": { - "step-1": { - "title": "Schritt 1: Ermittlung potenzieller Empfänger:innen", - "text": "Wir arbeiten mit einer Vielzahl internationaler und lokaler NGOs zusammen, die marginalisierte Gemeinschaften unterstützen und mit Armut auf lokaler Ebene vertraut sind. Nach dem Besuch und der positiven Bewertung dieser NGOs - sowie der Gebiete und Gemeinschaften, die sie unterstützen - können wir sie bitten, uns eine Liste aller potenziellen Empfänger:innen zur Verfügung zu stellen. Potenzielle Empfänger:innen sind Menschen in Armut, mit denen sie direkten Kontakt pflegen. Abhängig von den unterstützten Gemeinschaften können diese Listen 100 bis 1000 Namen enthalten." - }, - "step-2": { - "title": "Schritt 2: Zufällige Auswahl und grösstmögliche Transparenz", - "text": "Die Listen, mit denen wir während der Auswahl arbeiten, enthalten minimale Informationen über potenzielle Empfänger:innen. Sie werden anschließend anonymisiert (gehasht) und in unser Open-Source-Repository hochgeladen. Mithilfe einer zufällig generierten und von drand veröffentlichten Nummer wird ein Mechanismus eingerichtet, um eine vorbestimmte Anzahl von Personen aus der Liste auszuwählen. Dieser Prozess kann mathematisch zurückverfolgt und überprüft werden, ohne die Daten der Empfänger:innen zu gefährden.", - "card": "\uD83D\uDD0E Bald verfügbar: Jeder kann leicht überprüfen, ob er auf einer der Listen der NGOs steht oder ob er ausgewählt wurde." - }, - "step-3": { - "title": "Schritt 3: Transparente Kommunikation", - "text": "Nach einer Auslosung informieren wir sowohl die NGO als auch die Gemeinschaft direkt über die Ergebnisse. Die ausgewählten Begünstigten - nach Bestätigung ihrer Teilnahme - geben dann zusätzliche Informationen an und werden für unser 3-jähriges Programm aufgenommen." - } - }, - "faq": { - "title": "Häufig gestellte Fragen", - "questions": [ - { - "question": "Warum wählen wir zufällig aus einem Pool qualifizierter Empfänger:innen aus?", - "answer": "Der Zweck der Anwendung dieser Zufallsauswahlmethode besteht darin, mehrere Ziele zu erreichen. Erstens hilft es, Voreingenommenheit bei der Auswahl der Empfänger:innen zu verhindern und sicherzustellen, dass Angehörige oder Bekannte von Personen, die am Prozess beteiligt sind, keine bevorzugte Behandlung erhalten. Zweitens zielt es darauf ab, Spannungen zwischen Empfänger:innenn und Nicht-Empfänger:innenn sowie potenzielle Konflikte zwischen Empfänger:innenn und unserer Organisation zu vermeiden. Schließlich streben wir danach, Technologie dort einzubeziehen, wo dies sinnvoll und vorteilhaft für den Prozess ist." - }, - { - "question": "Wer kann den Auswahlprozess beeinflussen?", - "answer": "Indem wir uns auf einen unvorhersehbaren Zufallswert von drand verlassen, der in der Zukunft erzeugt wird, ist es für niemanden möglich, die Ergebnisse des Auswahlprozesses zu beeinflussen. Diese inhärente Zufälligkeit kann genutzt werden, um die Integrität der Auswahl zu bestätigen. Um für Social Income zu qualifizieren, muss eine Person zunächst auf einer Liste einer NGO stehen. Obwohl dies eine vorläufige Bedingung darstellt, steht es im Einklang mit unserem grundlegenden Prinzip: sicherzustellen, dass Social Income diejenigen erreicht, die es am dringendsten benötigen." - }, - { - "question": "Wie vermeiden wir Voreingenommenheit und Spannungen?", - "answer": "Um sicherzustellen, dass wir nicht unbeabsichtigt eine bestimmte ethnische Gruppe, Geschlecht oder Berufsgruppe priorisieren, arbeiten wir mit vielfältigen NGOs zusammen, die unterschiedliche Missionen haben. Im Einklang mit unserer 'keinem Schaden zufügen'-Politik streben wir danach, Spannungen zwischen Empfänger:innenn, Nicht-Empfänger:innenn, Gemeinschaften und den NGOs zu verhindern. Unsere zufällige Auswahl spielt dabei eine entscheidende Rolle. Sie stellt sicher, dass Personen, die mit Personen im Prozess verwandt oder bekannt sind, keine Bevorzugung erfahren, die zu Konflikten führen könnte." - }, - { - "question": "Was passiert während des Auswahlprozesses?", - "answer": "Wir nutzen die von drand bereitgestellte Zufallszahl, die öffentlich zugänglich ist, um eine bestimmte Anzahl von Personen aus unserer Liste auszuwählen. So wird es gemacht: Wir ordnen zunächst die gehashte Liste der Empfänger:innen. Dann verwenden wir das Zufallselement von drand, um es mithilfe einer Schlüsselableitung in eine Position auf der Liste umzuwandeln. Für diejenigen, die an den technischen Details interessiert sind, sind die Funktion und ihre zugehörigen Prozesse in unserem GitHub-Repository dokumentiert." - }, - { - "question": "Was ist drand und wer steckt dahinter?", - "answer": "Das drand-Projekt generiert Zufallszahlen, denen jeder vertrauen kann. Es kann angewendet werden, um wirklich zufällige und überprüfbare Auslosungen zu erstellen. Das Projekt wurde 2017 am EPFL von Nicolas Gailly initiiert und erhielt Unterstützung von Philipp Jovanovic. Es wurde von Bryan Ford geleitet.

Es ist seitdem unabhängig verwaltet worden und betreibt ein Netzwerk namens League of Entropy mit EPFL, UCL, Cloudflare, Kudelski Security, der Universität von Chile und Protocol Labs. Aktuelle Kernbetreuer des Open-Source-Projekts sind der CEO, CSO und CTO von Randamu, Erick Watson, Yolan Romailler und Patrick McClurg." - } - ] - }, - "past-draws": "Vergangene Auslosungen", - "past-draws-description": "Die folgende Liste zeigt die vergangenen Auslosungen, die stattgefunden haben, um Empfänger:innen für Social Income auszuwählen.", - "draw-card": { - "summary": "{{ count }} von {{ total }} ausgewählt", - "random-number": "Zufallszahl", - "confirm-drand": "Bestätigen auf drand", - "confirm-github": "Bestätigen auf Github", - "long-list": "{{ total }} Personen auf der Longlist, {{ count }} ausgewählt", - "people": "Personen" - } -} diff --git a/shared/locales/de/website-selection.json b/shared/locales/de/website-selection.json new file mode 100644 index 000000000..6141ae207 --- /dev/null +++ b/shared/locales/de/website-selection.json @@ -0,0 +1,121 @@ +{ + "section-1": { + "subtitle": "Unser Bestreben", + "title": [ + { + "text": "Im Sinne des bedingungslosen Grundeinkommens " + }, + { + "text": "wollen wir allen ", + "color": "accent" + }, + { + "text": "ein Social Income ermöglichen." + } + ], + "target": [ + { + "text": "8,104,666,773", + "color": "accent" + }, + { + "text": "potential", + "color": "accent" + } + ], + "population": "8,104,666,773", + "potential": "potenzielle", + "scope": "Empfänger:innen leben auf der Erde.", + "continue": "Jedoch" + }, + "section-2": { + "subtitle": "Unsere Realität", + "title": [ + { + "text": "Da unsere Mittel begrenzt sind, " + }, + { + "text": "konzentrieren wir uns auf jene,", + "color": "accent" + }, + { + "text": "die die Unterstützung am meisten benötigen.”" + } + ], + "amount": "USD 300,000+", + "amount-context": "an Spenden erhalten", + "scope": "Mehr ", + "transparency-page": "Zahlen und Transparenz ↗", + "continue-1": "Unsere Auswahlprinzipien sind", + "continue-2": "Fairness und Transparenz" + }, + "section-3": { + "preselection-title": "Faire Vorauswahl", + "preselection-subtitle": "Priorisierung nach Bedarf", + "preselection-desc": "Mit lokalen Partnern erstellen wir einen Pool potenzieller Empfänger:innen, die Unterstützung benötigen.", + "preselection-goal": "Priorisierung nach Bedarf", + "preselection-1-title": "Fokus auf die Ärmsten", + "preselection-1-desc": "Wir setzen unsere Mittel dort ein, wo die Hilfe am dringendsten gebraucht wird und am meisten bewirkt.", + "preselection-1-annex": "1,8 Milliarden Menschen leben von weniger als $3,65 pro Tag", + "preselection-2-title": "Zielgebiet danach ausrichten", + "preselection-2-desc": "Eine der höchsten Konzentrationen an Bedürftigen befindet sich in Sierra Leone, wo 57 % der Bevölkerung unterhalb der Armutsgrenze lebt und das monatliche Einkommen meist unter 45 USD liegt.", + "preselection-2-annex": "4,9 Millionen Menschen in Sierra Leone gelten als arm", + "preselection-3-title": "Potentielle Empfänger:innen ermitteln", + "preselection-3-desc": "Zusammen mit lokalen NGOs, die Armut bekämpfen, identifizieren wir Menschen in Not und erstellen eine Liste potentieller Empfänger:innen.", + "preselection-3-annex": "Über 5.000 potenzielle Empfänger:innen erfasst", + "selection-title": "Transparente Auswahl", + "selection-subtitle": "Mögliche Spannungen minimieren", + "selection-desc": "Unser Auswahlverfahren ist für alle nachvollziehbar, fair und frei von Bevorzugung.", + "selection-goal": "Mögliche Spannungen minimieren", + "selection-1-title": "Lotterieprinzip", + "selection-1-desc": "Eine Verlosung ist die fairste Methode, wenn eine Auswahl notwendig ist und alle Optionen gleichwertig sind.", + "selection-1-annex": "Nur qualifizierte Personen kommen somit für die Auswahl in Betracht", + "selection-2-title": "Zufallsprinzip", + "selection-2-desc": "Die Integrität einer Verlosung beruht auf ihrer Unvorhersehbarkeit. Vertrauen entsteht, wenn klar ist, dass die Auswahl dem Zufall überlassen und öffentlich überprüfbar ist.", + "selection-2-annex": "Aktuelle Zufallszahl anzeigen ↗", + "selection-3-title": "Öffentlich überprüfbar", + "selection-3-desc": "Indem wir den Code zur Auswahl veröffentlichen, ermöglichen wir es allen, den Prozess zu prüfen und sicherzustellen, dass keine Manipulation vorliegt.", + "selection-3-annex": "Prüfe den Quellcode und die Ziehungen ↗", + "goal": "Ziel" + }, + + "section-4": { + "title": [ + { + "text": "Unsere " + }, + { + "text": "vergangenen ", + "color": "accent" + }, + { + "text": "Ziehungen." + } + ], + "past-draws-description": "Die folgende Liste zeigt die bisherigen Ziehungen zur Auswahl der Empfänger:innen.", + "draw-card": { + "summary": "{{ count }} von {{ total }} ausgewählt", + "random-number": "Zufallszahl", + "confirm-drand": "Bestätigen mit drand", + "confirm-github": "Ziehung auf Github", + "long-list": "{{ total }} Personen auf der Longlist, {{ count }} ausgewählt", + "people": "Personen", + "ngo": "NGO" + } + }, + + "section-5": { + "title": [ + { + "text": "Das " + }, + { + "text": "klingt gut, ", + "color": "accent" + }, + { + "text": "aber..." + } + ] + } +} diff --git a/shared/locales/en/website-faq.json b/shared/locales/en/website-faq.json index 20404639b..b010a67c4 100644 --- a/shared/locales/en/website-faq.json +++ b/shared/locales/en/website-faq.json @@ -3,6 +3,7 @@ "title": "FAQ | Social Income" }, "title": "FAQ", + "title-long": "Frequently asked questions", "fighting-poverty": { "title": "Fighting Poverty", "questions": [ @@ -147,6 +148,55 @@ } ] }, + "selection": { + "title": "Recipient Selection", + "questions": [ + { + "question": "Why do we select randomly out of a pool of qualified recipients?", + "answer": "The purpose of employing this random selection method is to achieve several objectives. Firstly, it helps prevent bias in our recipient selection, ensuring that relatives or acquaintances of individuals involved in the process are not given preferential treatment. Secondly, it aims to avoid tensions between recipients and non-recipients, as well as any potential conflicts between recipients and our organization. Lastly, we strive to incorporate technology where it is feasible and beneficial to the process." + }, + { + "question": "Who can influence the draft?", + "answer": "By relying on an unpredictable random value from drand, set to be emitted in the future, it's not possible for anyone to sway the results of the selection process. This inherent randomness can be utilized to confirm the integrity of the selection. To qualify for Social Income, an individual must first be on a list provided by an NGO. While this does present a preliminary condition, it aligns with our foundational principle: ensuring that Social Income reaches those most in need." + }, + { + "question": "How do we avoid bias and tensions?", + "answer": "To ensure we don't inadvertently prioritize a specific ethnic group, gender, or occupation, we collaborate with diverse NGOs that have varied missions. In line with our 'do no harm' policy, we strive to prevent tensions among recipients, non-recipients, communities, and the NGOs. Our random selection plays a pivotal role in achieving this. It ensures that those related to or acquainted with individuals in the process aren't shown favoritism, which could lead to conflicts." + }, + { + "question": "What is happening during the selection process?", + "answer": "We utilize the random number provided by drand, which is publicly accessible, to pick a set number of individuals from our list. Here's how it's done: we first organize the hashed list of recipients. Then, using the randomness element from drand, we convert it into a position on the list through a key derivation function. For those keen on the technical details, the function and its associated processes are documented in our open source repository.", + "links": [ + { + "title": "GitHub repository", + "href": "https://github.com/socialincome-san/public/tree/main/recipients_selection" + }, + { + "title": "Key derivation function", + "href": "https://en.wikipedia.org/wiki/Key_derivation_function" + } + ] + }, + { + "question": "What is drand and who is behind it?", + "answer": "The drand project generates random numbers that everyone can trust. It can be applied to create truly random and verifiable drafts. Initiated in 2017 at EPFL by Nicolas Gailly, drand received support from Philipp Jovanovic and was guided by Bryan Ford. It has since become independently managed and maintains a network called the League of Entropy with EPFL, UCL, Cloudflare, Kudelski Security, the University of Chile, and Protocol Labs. Current core maintainers of the open source project are Erick Watson, Yolan Romailler and Patrick McClurg from Randamu.", + "links": [ + { + "title": "League of Entropy", + "href": "https://www.cloudflare.com/leagueofentropy/" + }, + { + "title": "Randamu", + "href": "https://randa.mu" + }, + { + "title": "Drand", + "href": "https://drand.love" + } + ] + } + ] + }, "campaign": { "title": "Frequently asked questions", "questions": [ diff --git a/shared/locales/en/website-recipient-selection.json b/shared/locales/en/website-recipient-selection.json deleted file mode 100644 index 71a95199a..000000000 --- a/shared/locales/en/website-recipient-selection.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "title": "Recipients Selection", - "introduction": "Social Income, like any UBI project, has limited financial resources. Choosing who gets help and who doesn't is tough. We want everyone to understand how we select our recipients. Since November 2023, we’ve employed a new way to randomly select people from poor communities, thanks to our partnership with drand.", - "selection-process": { - "step-1": { - "title": "Step 1: Finding potential recipients", - "text": "We team up with a variety of international and local NGOs who support marginalized communities and are familiar with poverty at the local level. After visiting and positively assessing these NGOs – as well as the areas and communities they support – we may request that they provide us with a list of all potential recipients. Potential recipients are people living in poverty with whom they maintain direct contact. Depending on the communities supported, those lists can include anything from 100 to 1000 names." - }, - "step-2": { - "title": "Step 2: Selecting at random and with utmost transparency", - "text": "The lists we are working with during selection contain minimal information about potential recipients. They are subsequently anonymized (hashed) and uploaded to our open-source repository. With the help of a random number generated and published by drand, a mechanism is set in place to select a predetermined number of individuals from the list. This process can be mathematically traced back and verified without compromising recipients’ data.", - "card": "\uD83D\uDD0E Upcoming: allowing everyone to easily verify for themselves whether or not they're on one of the NGOs' lists or whether they have been chosen." - }, - "step-3": { - "title": "Step 3: Communicating transparently", - "text": "After a draw, we reach out to both the NGO and the community directly to share the results. The beneficiaries who were selected – upon confirming their participation – then provide additional information and are onboarded for our 3-year program" - } - }, - "faq": { - "title": "Frequently asked questions", - "questions": [ - { - "question": "Why do we select randomly out of a pool of qualified recipients?", - "answer": "The purpose of employing this random selection method is to achieve several objectives. Firstly, it helps prevent bias in our recipient selection, ensuring that relatives or acquaintances of individuals involved in the process are not given preferential treatment. Secondly, it aims to avoid tensions between recipients and non-recipients, as well as any potential conflicts between recipients and our organization. Lastly, we strive to incorporate technology where it is feasible and beneficial to the process." - }, - { - "question": "Who can influence the draft?", - "answer": "By relying on an unpredictable random value from drand, set to be emitted in the future, it's not possible for anyone to sway the results of the selection process. This inherent randomness can be utilized to confirm the integrity of the selection. To qualify for Social Income, an individual must first be on a list provided by an NGO. While this does present a preliminary condition, it aligns with our foundational principle: ensuring that Social Income reaches those most in need." - }, - { - "question": "How do we avoid bias and tensions?", - "answer": "To ensure we don't inadvertently prioritize a specific ethnic group, gender, or occupation, we collaborate with diverse NGOs that have varied missions. In line with our 'do no harm' policy, we strive to prevent tensions among recipients, non-recipients, communities, and the NGOs. Our random selection plays a pivotal role in achieving this. It ensures that those related to or acquainted with individuals in the process aren't shown favoritism, which could lead to conflicts." - }, - { - "question": "What is happening during the selection process?", - "answer": "We utilize the random number provided by drand, which is publicly accessible, to pick a set number of individuals from our list. Here's how it's done: we first organize the hashed list of recipients. Then, using the randomness element from drand, we convert it into a position on the list through a key derivation function. For those keen on the technical details, the function and its associated processes are documented in our GitHub repository." - }, - { - "question": "What is drand and who is behind it?", - "answer": "The drand project generates random numbers that everyone can trust. It can be applied to create truly random and verifiable drafts. Initiated in 2017 at EPFL by Nicolas Gailly, drand received support from Philipp Jovanovic and was guided by Bryan Ford.

It has since become independently managed and maintains a network called the League of Entropy with EPFL, UCL, Cloudflare, Kudelski Security, the University of Chile, and Protocol Labs. Current core maintainers of the open source project are the CEO, CSO and CTO of Randamu, respectively Erick Watson, Yolan Romailler, and Patrick McClurg." - } - ] - }, - "past-draws": "Past Draws", - "past-draws-description": "The following list shows the past draws that have taken place to select recipients for Social Income.", - "draw-card": { - "summary": "{{ count }} out of {{ total }} selected", - "random-number": "Random number", - "confirm-drand": "Confirm on drand", - "confirm-github": "Confirm on Github", - "long-list": "{{ total }} people on the long list, {{ count }} selected", - "people": "People" - } -} diff --git a/shared/locales/en/website-selection.json b/shared/locales/en/website-selection.json new file mode 100644 index 000000000..6d10e1796 --- /dev/null +++ b/shared/locales/en/website-selection.json @@ -0,0 +1,118 @@ +{ + "section-1": { + "subtitle": "Our Aspiration", + "title": [ + { + "text": "In the spirit of universal basic income, we aspire to be truly universal by " + }, + { + "text": "providing Social Income to all.", + "color": "accent" + } + ], + "target": [ + { + "text": "8,104,666,773", + "color": "accent" + }, + { + "text": "potential", + "color": "accent" + } + ], + "population": "8,104,666,773", + "potential": "potential", + "scope": "beneficiaries live on Earth", + "continue": "However" + }, + "section-2": { + "subtitle": "Our Reality", + "title": [ + { + "text": "Due to limited resources, " + }, + { + "text": "we focus on those", + "color": "accent" + }, + { + "text": "who need Social Income the most." + } + ], + "amount": "USD 300,000+", + "amount-context": "raised to date", + "scope": "visit our ", + "transparency-page": "transparency page ↗", + "continue-1": "For us, selecting is about", + "continue-2": "fairness and transparency" + }, + "section-3": { + "preselection-title": "Fair Preselection", + "preselection-subtitle": "Prioritizing based on need", + "preselection-desc": "Identifying and building a pool of qualifying individuals with the aid of local knowledge.", + "preselection-goal": "Prioritizing based on need", + "preselection-1-title": "Target the Poorest", + "preselection-1-desc": "We've committed to focusing our efforts on the most vulnerable, ensuring our aid delivers the biggest impact where it’s most needed.", + "preselection-1-annex": "1.8 billion people live on less than $3.65 per day", + "preselection-2-title": "Condense Target Area", + "preselection-2-desc": "One of the highest concentrations of people in need is in Sierra Leone, where 57% of the population lives under the poverty line and the typical monthly earnings are below USD 45.", + "preselection-2-annex": "4.9 million people in Sierra Leone qualify as poor", + "preselection-3-title": "Creating a Pool of Potential Recipients", + "preselection-3-desc": "We partner with local NGOs dedicated to poverty alleviation to identify those in need, building a large, scalable pool of potential beneficiaries.", + "preselection-3-annex": "5,000+ potential beneficiaries are in our pool", + "selection-title": "Transparent Selection", + "selection-subtitle": "Minimize possible tensions", + "selection-desc": "Making sure our selection process is bias-free, transparent to all, and avoids favoritism.", + "selection-goal": "Minimize possible tensions", + "selection-1-title": "Lottery Approach", + "selection-1-desc": "When faced with making a choice, the lottery stands out as fair and unbiased approach. This is especially true when all options are equally desirable.", + "selection-1-annex": "Selecting from individuals, all of whom stand to benefit", + "selection-2-title": "Truly Random", + "selection-2-desc": "A lottery’s integrity depends on its unpredictability. Confidence grows when people know it's purely by chance, without manipulation and publicly verifiable.", + "selection-2-annex": "Show latest random number used for draws ↗", + "selection-3-title": "Publicly Verifiable", + "selection-3-desc": "By publishing the code that operates the random selection, we empower everyone to verify the process and ensure there is no manipulation.", + "selection-3-annex": "Verify our source code and draws ↗", + "goal": "Goal" + }, + + "section-4": { + "title": [ + { + "text": "Our " + }, + { + "text": "past ", + "color": "accent" + }, + { + "text": "recipient draws." + } + ], + "past-draws-description": "The following list shows the past draws that have taken place to select recipients for Social Income.", + "draw-card": { + "summary": "{{ count }} out of {{ total }} selected", + "random-number": "Random number", + "confirm-drand": "Confirm on drand", + "confirm-github": "Confirm on Github", + "long-list": "{{ total }} people on the long list, {{ count }} selected", + "people": "People", + "ngo": "NGO" + } + }, + + "section-5": { + "title": [ + { + "text": "That " + }, + { + "text": "sounds good ", + "color": "accent" + }, + { + "text": "but..." + } + ] + } +} diff --git a/shared/locales/fr/website-faq.json b/shared/locales/fr/website-faq.json index bb20b5912..6f61f6155 100644 --- a/shared/locales/fr/website-faq.json +++ b/shared/locales/fr/website-faq.json @@ -2,6 +2,8 @@ "metadata": { "title": "Questions fréquentes | Social Income" }, + "title": "FAQ", + "title-long": "Questions fréquentes", "fighting-poverty": { "title": "La lutte contre la pauvreté", "questions": [ @@ -146,6 +148,55 @@ } ] }, + "selection": { + "title": "Sélection des bénéficiaires", + "questions": [ + { + "question": "Pourquoi choisissons-nous au hasard dans une liste de bénéficiaires potentiels?", + "answer": "L'utilisation de cette méthode de sélection aléatoire répond à plusieurs objectifs. Tout d'abord, elle permet d'éviter les biais dans la sélection des bénéficiaires, en garantissant que les parents ou les connaissances des personnes impliquées dans le processus ne bénéficient pas d'un traitement préférentiel. Deuxièmement, elle vise à éviter les tensions entre les bénéficiaires et les non-bénéficiaires, ainsi que tout conflit potentiel entre les bénéficiaires et notre organisation. Enfin, nous nous efforçons d'intégrer la technologie lorsque cela est possible et bénéfique pour le processus." + }, + { + "question": "Qui peut influencer la sélection?", + "answer": "En utilisant une valeur aléatoire imprévisible fournie par drand, définie pour être émise dans le futur, il est impossible à quiconque d'influencer les résultats du processus de sélection. Ce caractère aléatoire intrinsèque peut être utilisé pour confirmer l'intégrité de la sélection. Pour être éligible au Social Income, une personne doit d'abord figurer sur une liste fournie par une ONG. Cette condition préliminaire est conforme à notre principe fondamental : veiller à ce que Social Income parvienne à ceux qui en ont le plus besoin." + }, + { + "question": "Comment éviter les biais et les tensions?", + "answer": "Afin de ne pas privilégier par inadvertance un groupe ethnique, un genre ou une catégorie professionnelle, nous collaborons avec plusieurs ONG aux missions variées. Conformément à notre principe \"ne pas nuire\", nous nous efforçons de prévenir les tensions entre les bénéficiaires, les non-bénéficiaires, les communautés et les ONG. Notre sélection aléatoire joue un rôle essentiel à cet égard. Elle garantit que les proches ou les connaissances des personnes impliquées dans le processus ne font pas l'objet d'un traitement de faveur, ce qui pourrait entraîner des conflits." + }, + { + "question": "Comment se déroule le processus de sélection?", + "answer": "Nous utilisons le nombre aléatoire fourni par drand, publiquement accessible, pour choisir un certain nombre de personnes dans notre liste. La procédure est la suivante : nous chiffrons d'abord la liste des bénéficiaires. Puis nous utilisons l'élément aléatoire de drand et nous le convertissons en une position sur la liste au moyen d'une clé de dérivation. Pour les personnes intéressées par les détails techniques, la clé et les processus inhérents sont décrits dans notre dépôt GitHub.", + "links": [ + { + "title": "Notre dépôt GitHub", + "href": "https://github.com/socialincome-san/public/tree/main/recipients_selection" + }, + { + "title": "Fonction de dérivation de clé", + "href": "https://fr.wikipedia.org/wiki/Fonction_de_d%C3%A9rivation_de_cl%C3%A9" + } + ] + }, + { + "question": "Qu'est-ce que drand et qui est derrière?", + "answer": "Le projet drand génère des nombres aléatoires auxquels tout le monde peut se fier. Il peut être utilisé pour créer des ébauches véritablement aléatoires et vérifiables. Initié en 2017 à l'EPFL par Nicolas Gailly, drand a reçu le soutien de Philipp Jovanovic et a été encadré par Bryan Ford. Depuis lors, il est géré de manière indépendante et entretient un réseau appelé League of Entropy avec l'EPFL, l'UCL, Cloudflare, Kudelski Security, l'Université du Chili et Protocol Labs. Les principaux responsables actuels du projet open source sont Erick Watson, Yolan Romailler et Patrick McClurg de Randamu.", + "links": [ + { + "title": "League of Entropy", + "href": "https://www.cloudflare.com/leagueofentropy/" + }, + { + "title": "Randamu", + "href": "https://randa.mu" + }, + { + "title": "Drand", + "href": "https://drand.love" + } + ] + } + ] + }, "campaign": { "title": "Questions et réponses", "questions": [ diff --git a/shared/locales/fr/website-recipient-selection.json b/shared/locales/fr/website-recipient-selection.json deleted file mode 100644 index 674363250..000000000 --- a/shared/locales/fr/website-recipient-selection.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "title": "Sélection des bénéficiaires", - "introduction": "Social Income, comme tout projet de revenu universel, dispose de ressources financières limitées. Il est difficile de choisir qui reçoit de l'aide et qui n'en reçoit pas. Nous tenons à ce que tout le monde puisse comprendre comment nous sélectionnons nos bénéficiaires. Depuis novembre 2023, nous utilisons une nouvelle méthode de sélection aléatoire des personnes issues des communautés pauvres, grâce à notre partenariat avec drand.", - "selection-process": { - "step-1": { - "title": "Étape 1: Recherche des bénéficiaires potentiels", - "text": "Nous collaborons avec diverses ONG internationales et locales qui soutiennent les communautés marginalisées et ont une bonne connaissance de la pauvreté au niveau local. Nous rendons visite à ces ONG et aux communautés régionales qu'elles soutiennent. Si l'évaluation est positive, nous leur demandons de nous fournir une liste de bénéficiaires potentiels. Il s'agit de personnes vivant dans la pauvreté avec lesquelles ces ONG ont un contact direct. Selon les communautés, les listes contiennent entre 100 et 1000 noms." - }, - "step-2": { - "title": "Étape 2: Tirage au sort en toute transparence", - "text": "Les listes avec lesquelles nous travaillons lors de la sélection contiennent un minimum d'informations sur les bénéficiaires potentiels. Elles sont anonymisées (chiffrées) et téléchargées dans notre registre open-source. À l'aide d'un nombre aléatoire généré et publié par drand, un mécanisme est mis en place pour sélectionner un nombre prédéterminé de personnes à partir de la liste. Ce processus peut être mathématiquement reconstitué et vérifié sans compromettre les données des bénéficiaires.", - "card": "\uD83D\uDD0E À venir : permettre à tout un chacun de vérifier facilement par lui-même s'il figure ou non sur l'une des listes des ONG ou s'il a été choisi." - }, - "step-3": { - "title": "Étape 3: Communication transparente", - "text": "Après le tirage au sort, nous contactons directement l'ONG et la communauté pour leur communiquer les résultats. Les bénéficiaires sélectionnés – après avoir confirmé leur participation – transmettent des informations complémentaires et sont intégrés à notre programme de trois ans." - } - }, - "faq": { - "title": "Questions fréquentes", - "questions": [ - { - "question": "Pourquoi choisissons-nous au hasard dans une liste de bénéficiaires potentiels?", - "answer": "L'utilisation de cette méthode de sélection aléatoire répond à plusieurs objectifs. Tout d'abord, elle permet d'éviter les biais dans la sélection des bénéficiaires, en garantissant que les parents ou les connaissances des personnes impliquées dans le processus ne bénéficient pas d'un traitement préférentiel. Deuxièmement, elle vise à éviter les tensions entre les bénéficiaires et les non-bénéficiaires, ainsi que tout conflit potentiel entre les bénéficiaires et notre organisation. Enfin, nous nous efforçons d'intégrer la technologie lorsque cela est possible et bénéfique pour le processus." - }, - { - "question": "Qui peut influencer la sélection?", - "answer": "En utilisant une valeur aléatoire imprévisible fournie par drand, définie pour être émise dans le futur, il est impossible à quiconque d'influencer les résultats du processus de sélection. Ce caractère aléatoire intrinsèque peut être utilisé pour confirmer l'intégrité de la sélection. Pour être éligible au Social Income, une personne doit d'abord figurer sur une liste fournie par une ONG. Cette condition préliminaire est conforme à notre principe fondamental : veiller à ce que Social Income parvienne à ceux qui en ont le plus besoin." - }, - { - "question": "Comment éviter les biais et les tensions?", - "answer": "Afin de ne pas privilégier par inadvertance un groupe ethnique, un genre ou une catégorie professionnelle, nous collaborons avec plusieurs ONG aux missions variées. Conformément à notre principe \"ne pas nuire\", nous nous efforçons de prévenir les tensions entre les bénéficiaires, les non-bénéficiaires, les communautés et les ONG. Notre sélection aléatoire joue un rôle essentiel à cet égard. Elle garantit que les proches ou les connaissances des personnes impliquées dans le processus ne font pas l'objet d'un traitement de faveur, ce qui pourrait entraîner des conflits." - }, - { - "question": "Comment se déroule le processus de sélection?", - "answer": "Nous utilisons le nombre aléatoire fourni par drand, publiquement accessible, pour choisir un certain nombre de personnes dans notre liste. La procédure est la suivante : nous chiffrons d'abord la liste des bénéficiaires. Puis nous utilisons l'élément aléatoire de drand et nous le convertissons en une position sur la liste au moyen d'une clé de dérivation. Schlüsselableitung Pour les personnes intéressées par les détails techniques, la clé et les processus inhérents sont décrits dans notre dépôt GitHub." - }, - { - "question": "Qu'est-ce que drand et qui est derrière?", - "answer": "Le projet drand génère des nombres aléatoires auxquels tout le monde peut se fier. Il peut être utilisé pour créer des ébauches véritablement aléatoires et vérifiables. Initié en 2017 à l'EPFL par Nicolas Gailly, drand a reçu le soutien de Philipp Jovanovic et a été encadré par Bryan Ford.

Depuis lors, il est géré de manière indépendante et entretient un réseau appelé League of Entropy avec l'EPFL, l'UCL, Cloudflare, Kudelski Security, l'Université du Chili et Protocol Labs. Les principaux responsables actuels du projet open source sont le CEO, le CSO et le CTO de Randamu, à savoir Erick Watson, Yolan Romailler et Patrick McClurg." - } - ] - }, - "past-draws": "Tirages au sort antérieurs", - "past-draws-description": "La liste ci-dessous montre les tirages au sort effectués pour sélectionner les bénéficiaires de Social Income.", - "draw-card": { - "summary": "{{ count }} bénéficiaires sélectionnés sur {{ total }}", - "random-number": "Nombre aléatoire", - "confirm-drand": "Confirmer sur drand", - "confirm-github": "Confirmer sur Github", - "long-list": "{{ total }} personnes sur la longlist, {{ count }} personnes sélectionnées", - "people": "Personnes" - } -} diff --git a/shared/locales/fr/website-selection.json b/shared/locales/fr/website-selection.json new file mode 100644 index 000000000..8f7ed6297 --- /dev/null +++ b/shared/locales/fr/website-selection.json @@ -0,0 +1,115 @@ +{ + "section-1": { + "subtitle": "Notre ambition", + "title": [ + { + "text": "Dans l’esprit du revenu de base inconditionnel, nous visons une réelle universalité par " + }, + { + "text": "le versement de Social Income à chaque être humain.", + "color": "accent" + } + ], + "target": [ + { + "text": "8,104,666,773", + "color": "accent" + }, + { + "text": "bénéficiaires potentiels", + "color": "accent" + } + ], + "population": "8,104,666,773", + "potential": "bénéficiaires", + "scope": "potentiels vivent sur terre", + "continue": "Toutefois" + }, + "section-2": { + "subtitle": "Notre réalité", + "title": [ + { + "text": "Nos ressources étant limitées, " + }, + { + "text": "nous concentrons nos efforts ", + "color": "accent" + }, + { + "text": "sur les personnes qui ont le plus besoin de Social Income." + } + ], + "amount": "USD 300,000+", + "amount-context": "reçus à ce jour", + "scope": "Plus de ", + "transparency-page": "transparence et chiffres ↗", + "continue-1": "Pour nous, la sélection est une", + "continue-2": "question d'équité et de transparence" + }, + "section-3": { + "preselection-title": "Une présélection équitable", + "preselection-subtitle": "Fixation des priorités en fonction des besoins", + "preselection-desc": "La connaissance du terrain nous permet d‘identifier et de constituer un groupe de personnes éligibles.", + "preselection-goal": "Établir des priorités en fonction des besoins", + "preselection-1-title": "Cibler les plus pauvres", + "preselection-1-desc": "Nous nous engageons à concentrer nos efforts sur les plus vulnérables, en nous assurant que notre aide a un maximum d’impact là où elle est la plus utile.", + "preselection-1-annex": "1.8 milliard de personnes vivent avec moins de 3,65 dollars US par jour", + "preselection-2-title": "Se concentrer sur une zone limitée", + "preselection-2-desc": "La Sierra Leone est l’un des pays où la concentration de personnes dans le besoin est la plus élevée. 57% de la population vit en-dessous du seuil de pauvreté, et le revenu mensuel moyen est inférieur à 45 dollars US.", + "preselection-2-annex": "4.9 millions de personnes en Sierra Leone sont considérées comme pauvres", + "preselection-3-title": "Créer un groupe de bénéficiaires potentiels", + "preselection-3-desc": "Nous travaillons en partenariat avec des ONG locales spécialisées dans la lutte contre la pauvreté pour identifier les personnes dans le besoin. Nous constituons ainsi un large groupe de bénéficiaires potentiels.", + "preselection-3-annex": "5,000+ bénéficiaires potentiels constituent notre groupe", + "selection-title": "Une sélection transparente", + "selection-subtitle": "Réduction des risques de tension", + "selection-desc": "Nous garantissons un processus de sélection impartial et transparent, excluant tout favoritisme.", + "selection-goal": "Minimiser les risques de tension", + "selection-1-title": "Par tirage au sort", + "selection-1-desc": "Lorsqu’on doit choisir, le tirage au sort se révèle être une méthode juste et impartiale, surtout lorque toutes les options sont souhaitables.", + "selection-1-annex": "La sélection se fait parmi des personnes qui ont toutes de bonnes raisons d’en profiter", + "selection-2-title": "Vraiment aléatoire", + "selection-2-desc": "L’intégrité d’un tirage au sort dépend de son imprédictibilité. La confiance augmente lorsque les gens savent que le tirage est vraiment aléatoire, sans manipulation et publiquement vérifiable.", + "selection-2-annex": "Afficher le nombre aléatoire actuel ↗", + "selection-3-title": "Publiquement vérifiable", + "selection-3-desc": "En publiant le code qui génère la sélection aléatoire, nous permettons à tout le monde de vérifier le processus et de s’assurer qu’il n’y a pas de manipulation.", + "selection-3-annex": "Vérifie le code source et les tirages au sort ↗", + "goal": "Objectif" + }, + + "section-4": { + "title": [ + { + "text": "Tirages au sort ", + "color": "accent" + }, + { + "text": "précédents" + } + ], + "past-draws-description": "La liste ci-dessous présente les tirages au sort effectués jusqu’ici pour sélectionner les bénéficiaires de Social Income.", + "draw-card": { + "summary": "{{ count }} sélectionnés sur {{ total }}", + "random-number": "Nombre aléatoire", + "confirm-drand": "Confirmation sur drand", + "confirm-github": "Confirmation sur Github", + "long-list": "{{ total }} personnes sur la liste, {{ count }} sélectionnées", + "people": "Personnes", + "ngo": "ONG" + } + }, + + "section-5": { + "title": [ + { + "text": "Tout ceci est " + }, + { + "text": "bien beau,", + "color": "accent" + }, + { + "text": "mais..." + } + ] + } +} diff --git a/shared/locales/it/website-faq.json b/shared/locales/it/website-faq.json index cfbb43749..3892b4602 100644 --- a/shared/locales/it/website-faq.json +++ b/shared/locales/it/website-faq.json @@ -3,6 +3,7 @@ "title": "FAQ | Social Income" }, "title": "FAQ", + "title-long": "Domande frequenti", "fighting-poverty": { "title": "Lotta alla povertà", "questions": [ @@ -147,6 +148,55 @@ } ] }, + "selection": { + "title": "Selezione Dei Beneficiari", + "questions": [ + { + "question": "Per quale motivo effettuiamo una selezione casuale da una lista di beneficiari qualificati?", + "answer": "L'adozione di questo metodo di selezione casuale ha diversi scopi. In primo luogo, contribuisce a prevenire ogni forma di favoritismo nella selezione dei beneficiari, garantendo che parenti o conoscenti delle persone coinvolte nel processo non vengano privilegiati. In secondo luogo, mira ad evitare tensioni tra i beneficiari e coloro che non sono stati selezionati, così come eventuali conflitti tra i beneficiari e la nostra organizzazione. Infine, ci impegniamo ad integrare la tecnologia dove possibile e vantaggiosa per il processo." + }, + { + "question": "Chi può influenzare il sorteggio?", + "answer": "Affidandoci a un risultato casuale imprevedibile fornito da drand, non è possibile per nessuno influenzare i risultati del processo di selezione. La natura casuale del sorteggio serve a confermare l’imparzialità della selezione. Per essere idonei a ricevere Social Income, gli individui devono essere prima inclusi in un elenco fornito da una ONG. Sebbene ciò rappresenti una condizione preliminare, è in linea con il nostro principio fondamentale: garantire che Social Income raggiunga coloro che ne hanno più bisogno." + }, + { + "question": "Come evitiamo parzialità e tensioni?", + "answer": "Per evitare di favorire involontariamente un particolare gruppo etnico, genere o professione, collaboriamo con diverse ONG che hanno missioni differenti. In linea con la nostra politica del 'non danneggiare', ci impegniamo a prevenire tensioni tra i beneficiari, coloro che non ricevono Social Income, le comunità e le ONG. La nostra selezione casuale svolge un ruolo fondamentale in questo processo. Garantisce che non vi sia favoritismo nei confronti di coloro che hanno legami o conoscono individui coinvolti nel processo, dato che questo potrebbe generare conflitti." + }, + { + "question": "Cosa avviene durante il processo di selezione casuale?", + "answer": "Utilizziamo il numero casuale fornito da drand, che è accessibile pubblicamente, per selezionare un certo numero di individui dalla nostra lista. Ecco come funziona: prima organizziamo la lista anonimizzata dei destinatari. Poi, utilizzando il numero casuale fornito da drand, lo convertiamo in una posizione nella lista attraverso una derivazione di una chiave crittografica. Per coloro interessati ai dettagli tecnici, la funzione e i processi associati sono documentati nel nostro repository su GitHub.", + "links": [ + { + "title": "Repository GitHub", + "href": "https://github.com/socialincome-san/public/tree/main/recipients_selection" + }, + { + "title": "Derivazione di una chiave crittografica", + "href": "https://it.wikipedia.org/wiki/Derivazione_di_una_chiave_crittografica" + } + ] + }, + { + "question": "Cos'è drand e chi c'è dietro?", + "answer": "Il progetto drand genera numeri casuali affidabili, utili per creare selezioni casuali e verificabili. Avviato nel 2017 presso l'EPFL da Nicolas Gailly, drand ha ricevuto il supporto di Philipp Jovanovic ed è stato guidato dal professor Bryan Ford. Ora è gestito in maniera indipendente e mantiene una rete chiamata League of Entropy con EPFL, UCL, Cloudflare, Kudelski Security, l'Università del Cile e Protocol Labs. Attualmente, il progetto open source è gestito dal Erick Watson, Yolan Romailler, e Patrick McClurg di Randamu.", + "links": [ + { + "title": "League of Entropy", + "href": "https://www.cloudflare.com/leagueofentropy/" + }, + { + "title": "Randamu", + "href": "https://randa.mu" + }, + { + "title": "Drand", + "href": "https://drand.love" + } + ] + } + ] + }, "campaign": { "title": "Domande frequenti", "questions": [ diff --git a/shared/locales/it/website-recipient-selection.json b/shared/locales/it/website-recipient-selection.json deleted file mode 100644 index b0cd42500..000000000 --- a/shared/locales/it/website-recipient-selection.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "title": "Selezione dei Beneficiari", - "introduction": "Social Income, come ogni progetto di Reddito di Base Universale (UBI), si trova a operare con risorse finanziarie limitate. La decisione su chi riceve aiuto e chi no è difficile da prendere. Desideriamo che tutti comprendano il criterio di selezione dei nostri beneficiari. A partire da novembre 2023, abbiamo adottato un nuovo metodo per selezionare in modo casuale le persone nelle comunità più svantaggiate, grazie alla nostra collaborazione con drand.", - "selection-process": { - "step-1": { - "title": "Fase 1: Individuare i potenziali beneficiari", - "text": "Collaboriamo con diverse ONG internazionali e locali che operano a sostegno delle comunità marginalizzate e hanno competenze specifiche sulla povertà a livello locale. Dopo aver visitato e valutato positivamente queste organizzazioni, così come le aree e le comunità che esse supportano, chiediamo loro di fornirci un elenco di tutti i potenziali beneficiari. Questi potenziali beneficiari sono persone in situazioni di povertà con le quali le ONG mantengono un contatto diretto. A seconda delle comunità assistite, tali elenchi possono contenere da 100 a 1000 nomi." - }, - "step-2": { - "title": "Fase 2: Selezione casuale e massima trasparenza", - "text": "Le liste con cui operiamo durante la selezione contengono poche informazioni sui potenziali beneficiari. Questi dati vengono successivamente anonimizzati, criptati e caricati sul nostro archivio open-source. Grazie all'ausilio di un numero casuale generato e reso pubblico da drand, viene avviato un meccanismo per selezionare un numero predeterminato di individui dall'elenco. Questo processo può essere tracciato e verificato matematicamente senza compromettere i dati dei beneficiari.", - "card": "\uD83D\uDD0E Prossimamente: offriremo a tutti la possibilità di verificare facilmente se sono inclusi negli elenchi delle ONG o se sono stati selezionati." - }, - "step-3": { - "title": "Fase 3: Comunicare in modo trasparente", - "text": "Dopo il sorteggio, contattiamo direttamente sia l'ONG che la comunità per condividere i risultati. I beneficiari selezionati, previa conferma della loro partecipazione, forniscono ulteriori informazioni e vengono quindi inclusi nel nostro programma triennale." - } - }, - "faq": { - "title": "FAQ", - "questions": [ - { - "question": "Per quale motivo effettuiamo una selezione casuale da una lista di beneficiari qualificati?", - "answer": "L'adozione di questo metodo di selezione casuale ha diversi scopi. In primo luogo, contribuisce a prevenire ogni forma di favoritismo nella selezione dei beneficiari, garantendo che parenti o conoscenti delle persone coinvolte nel processo non vengano privilegiati. In secondo luogo, mira ad evitare tensioni tra i beneficiari e coloro che non sono stati selezionati, così come eventuali conflitti tra i beneficiari e la nostra organizzazione. Infine, ci impegniamo ad integrare la tecnologia dove possibile e vantaggiosa per il processo." - }, - { - "question": "Chi può influenzare il sorteggio?", - "answer": "Affidandoci a un risultato casuale imprevedibile fornito da drand, non è possibile per nessuno influenzare i risultati del processo di selezione. La natura casuale del sorteggio serve a confermare l’imparzialità della selezione. Per essere idonei a ricevere Social Income, gli individui devono essere prima inclusi in un elenco fornito da una ONG. Sebbene ciò rappresenti una condizione preliminare, è in linea con il nostro principio fondamentale: garantire che Social Income raggiunga coloro che ne hanno più bisogno." - }, - { - "question": "Come evitiamo parzialità e tensioni?", - "answer": "Per evitare di favorire involontariamente un particolare gruppo etnico, genere o professione, collaboriamo con diverse ONG che hanno missioni differenti. In linea con la nostra politica del 'non danneggiare', ci impegniamo a prevenire tensioni tra i beneficiari, coloro che non ricevono Social Income, le comunità e le ONG. La nostra selezione casuale svolge un ruolo fondamentale in questo processo. Garantisce che non vi sia favoritismo nei confronti di coloro che hanno legami o conoscono individui coinvolti nel processo, dato che questo potrebbe generare conflitti." - }, - { - "question": "Cosa avviene durante il processo di selezione casuale?", - "answer": "Utilizziamo il numero casuale fornito da drand, che è accessibile pubblicamente, per selezionare un certo numero di individui dalla nostra lista. Ecco come funziona: prima organizziamo la lista anonimizzata dei destinatari. Poi, utilizzando il numero casuale fornito da drand, lo convertiamo in una posizione nella lista attraverso una key derivation function. Per coloro interessati ai dettagli tecnici, la funzione e i processi associati sono documentati nel nostro archivio su GitHub." - }, - { - "question": "Cos'è drand e chi c'è dietro?", - "answer": "Il progetto drand genera numeri casuali affidabili, utili per creare selezioni casuali e verificabili. Avviato nel 2017 presso l'EPFL da Nicolas Gailly, drand ha ricevuto il supporto di Philipp Jovanovic ed è stato guidato dal professor Bryan Ford.

Ora è gestito in maniera indipendente e mantiene una rete chiamata League of Entropy con EPFL, UCL, Cloudflare, Kudelski Security, l'Università del Cile e Protocol Labs. Attualmente, il progetto open source è gestito dal CEO, CSO e CTO di Randamu: Erick Watson, Yolan Romailler, e Patrick McClurg." - } - ] - }, - "past-draws": "Ultimi sorteggi", - "past-draws-description": "Di seguito sono elencati i sorteggi che si sono svolti per selezionare i beneficiari di Social Income.", - "draw-card": { - "summary": "{{ count }} su {{ total }} selezionate", - "random-number": "Numero casuale", - "confirm-drand": "Conferma su drand", - "confirm-github": "Conferma su Github", - "long-list": "{{ total }} persone nella lista d'attesa, {{ count }} selezionate", - "people": "Persone" - } -} diff --git a/shared/locales/it/website-selection.json b/shared/locales/it/website-selection.json new file mode 100644 index 000000000..14e4b9021 --- /dev/null +++ b/shared/locales/it/website-selection.json @@ -0,0 +1,118 @@ +{ + "section-1": { + "subtitle": "Il nostro sogno", + "title": [ + { + "text": "Fedeli all’idea di un reddito di base universale, aspiriamo a " + }, + { + "text": "offrire Social Income a tutto il mondo.", + "color": "accent" + } + ], + "target": [ + { + "text": "8,104,666,773", + "color": "accent" + }, + { + "text": "potential", + "color": "accent" + } + ], + "population": "8,104,666,773", + "potential": "potenziali", + "scope": "beneficiari vivono sulla Terra", + "continue": "Tuttavia" + }, + "section-2": { + "subtitle": "La nostra realtà", + "title": [ + { + "text": "A causa delle risorse limitate che abbiamo a disposizione," + }, + { + "text": "ci concentriamo su coloro ", + "color": "accent" + }, + { + "text": "che hanno più bisogno di Social Income." + } + ], + "amount": "USD 300,000+", + "amount-context": "raccolti fino a oggi", + "scope": "Più ", + "transparency-page": "trasparenza e numeri ↗", + "continue-1": "Per noi, scegliere significa", + "continue-2": "equità e trasparenza" + }, + "section-3": { + "preselection-title": "Preselezione Equa", + "preselection-subtitle": "Diamo priorità in base alle necessità reali", + "preselection-desc": "Identifichiamo e costruiamo un bacino di individui idonei con l’aiuto e l’esperienza di partner locali.", + "preselection-goal": "Dare priorità a chi ha più bisogno", + "preselection-1-title": "Ci concentriamo sui più poveri", + "preselection-1-desc": "Ci impegniamo a concentrare i nostri sforzi per sostenere le persone più vulnerabili e per garantire che il nostro aiuto abbia il massimo impatto dove è più necessario.", + "preselection-1-annex": "1.8 miliardi di persone vivono con meno di 3,65 USD al giorno", + "preselection-2-title": "Operiamo dove c’è un alto tasso di povertà", + "preselection-2-desc": "Una delle maggiori quantità di persone in difficoltà si trova in Sierra Leone, dove il 57% della popolazione vive sotto la soglia di povertà e il reddito medio mensile è inferiore a 45 USD.", + "preselection-2-annex": "4,9 milioni di persone in Sierra Leone vivono in povertà", + "preselection-3-title": "Creiamo un bacino di potenziali beneficiari", + "preselection-3-desc": "Collaboriamo con ONG locali che si dedicano a combattere la povertà per identificare le persone in difficoltà, costruendo un bacino ampio ed espandibile di potenziali beneficiari.", + "preselection-3-annex": "5.000+ potenziali beneficiari sono stati identificati nel nostro bacino", + "selection-title": "Selezione Trasparente", + "selection-subtitle": "Minimizziamo possibili tensioni", + "selection-desc": "Garantiamo che il nostro processo di selezione sia senza alcun pregiudizio, trasparente per tutti e privo di favoritismi.", + "selection-goal": "Ridurre al minimo le possibili tensioni", + "selection-1-title": "Approccio con sorteggio", + "selection-1-desc": "Di fronte alla necessità di fare una scelta, il sorteggio si distingue come un metodo equo e imparziale. Questo è particolarmente vero quando tutte le opzioni sono ugualmente desiderabili.", + "selection-1-annex": "Il sorteggio avviene tra un gruppo di individui che sono nella stessa condizione di possibili beneficiari", + "selection-2-title": "Veramente casuale", + "selection-2-desc": "L'integrità di un sorteggio dipende dalla sua imprevedibilità. Quando le persone sono sicure che la selezione è puramente casuale, senza manipolazioni e verificabile pubblicamente, sanno di potersi fidare.", + "selection-2-annex": "Visualizza il numero casuale attuale ↗", + "selection-3-title": "Verificabile pubblicamente", + "selection-3-desc": "Pubblicando il codice che gestisce la selezione casuale, diamo a tutti la possibilità di verificare il processo e assicurarsi che non ci siano manipolazioni.", + "selection-3-annex": "Verifica il nostro source code e i sorteggi qui sotto ↗", + "goal": "Obiettivo" + }, + + "section-4": { + "title": [ + { + "text": "I nostri " + }, + { + "text": "ultimi sorteggi ", + "color": "accent" + }, + { + "text": "dei beneficiari." + } + ], + "past-draws-description": "La seguente lista mostra i sorteggi effettuati in passato per selezionare i destinatari di Social Income.", + "draw-card": { + "summary": "{{ count }} su {{ total }} selezionati", + "random-number": "Numero casuale", + "confirm-drand": "Conferma su drand", + "confirm-github": "Conferma su Github", + "long-list": "{{ total }} persone nella lista lunga, {{ count }} selezionati", + "people": "Persone", + "ngo": "ONG" + } + }, + + "section-5": { + "title": [ + { + "text": "Va " + }, + { + "text": "bene, ", + "color": "accent" + }, + { + "text": "ma..." + } + ] + } +} diff --git a/ui/src/components/button.tsx b/ui/src/components/button.tsx index 9192266ff..8499b6c1f 100644 --- a/ui/src/components/button.tsx +++ b/ui/src/components/button.tsx @@ -20,8 +20,8 @@ const buttonVariants = cva( destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive-muted font-medium', outline: 'border border-primary bg-background hover:bg-muted font-medium', secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary-muted font-medium', - ghost: 'hover:bg-muted font-normal', - link: 'text-primary underline-offset-4 hover:underline p-0 font-normal', + ghost: 'font-normal', + link: 'text-foreground underline-offset-4 hover:underline p-0 font-normal', }, }, defaultVariants: { diff --git a/ui/src/components/card.tsx b/ui/src/components/card.tsx index 79081695a..fa52d0426 100644 --- a/ui/src/components/card.tsx +++ b/ui/src/components/card.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; import { cn } from '../lib/utils'; const Card = React.forwardRef>(({ className, ...props }, ref) => ( -
+
)); Card.displayName = 'Card'; diff --git a/ui/src/globals.css b/ui/src/globals.css index eafddba5f..06071f24a 100644 --- a/ui/src/globals.css +++ b/ui/src/globals.css @@ -29,7 +29,7 @@ --muted: 222 100% 98%; --muted-foreground: 212 59% 40%; - --card: 50 33% 92%; + --card: 50 33% 95%; --card-foreground: 206 99% 31%; --card-muted: 0 0% 98%; --card-foreground-muted: 0 0% 40%; @@ -39,7 +39,7 @@ --popover-foreground: 0 0% 35%; --popover-foreground-muted: 0 0% 45%; - --primary: 216 54% 55%; + --primary: 212 57% 47%; --primary-muted: 216 54% 63%; --primary-foreground: 216 54% 100%; --primary-foreground-muted: 216 54% 97%; @@ -71,7 +71,7 @@ --muted: 222 100% 98%; --muted-foreground: 0 0% 30%; - --card: 222 100% 97%; + --card: 212 59% 40%; --card-muted: 222 100% 99%; --card-foreground: 206 99% 31%; --card-foreground-muted: 50 33% 45%; diff --git a/website/package.json b/website/package.json index 06a223b73..7f1f39537 100644 --- a/website/package.json +++ b/website/package.json @@ -35,6 +35,7 @@ "i18next": "^23.15.2", "js-cookie": "^3.0.5", "lodash": "^4.17.21", + "luxon": "^3.5.0", "next": "14.2.14", "react": "18.3.1", "react-dom": "18.3.1", diff --git a/website/src/app/[lang]/[region]/(website)/(home)/(components)/hero-video-overlay.tsx b/website/src/app/[lang]/[region]/(website)/(home)/(components)/hero-video-overlay.tsx index 3052f3a59..5ff46f05d 100644 --- a/website/src/app/[lang]/[region]/(website)/(home)/(components)/hero-video-overlay.tsx +++ b/website/src/app/[lang]/[region]/(website)/(home)/(components)/hero-video-overlay.tsx @@ -28,6 +28,7 @@ const HeroVideoOverlay = ({ lang, region, translations }: HeroVideoOverlayProps) }, [hideOverlay, setHideOverlay]); useEventListener('mousemove', () => setHideOverlay(false)); + useEventListener('scroll', () => setHideOverlay(false)); return (
{ const [playing, setPlaying] = useState(false); const [showCaptions, setShowCaptions] = useState(true); const [showControls, setShowControls] = useState(true); - const { isIntersecting, ref } = useIntersectionObserver({ threshold: 0.5 }); - const { setBackgroundColor } = useNavbarBackgroundColor(); + const { entry, isIntersecting, ref } = useIntersectionObserver({ initialIsIntersecting: true, threshold: 0.5 }); + const { setBackgroundColor } = useGlobalStateProvider(); useEffect(() => { - if (isIntersecting) { - setPlaying(true); - setBackgroundColor('!bg-transparent'); - } else { + if (!entry) return; + if (!isIntersecting && entry.boundingClientRect.top < 0) { setPlaying(false); setBackgroundColor('!bg-background'); + } else { + setPlaying(true); + setBackgroundColor(null); } return () => { setBackgroundColor(null); }; - }, [isIntersecting]); + }, [entry, isIntersecting]); useEffect(() => { if (playing) { @@ -40,10 +41,13 @@ const MuxVideoComponent = () => { } }, [playing]); - useEventListener('mousemove', () => { - setShowCaptions(false); + const handleShowControls = () => { setShowControls(true); - }); + setShowCaptions(false); + }; + + useEventListener('mousemove', handleShowControls); + useEventListener('scroll', handleShowControls); useEffect(() => { let id; @@ -67,7 +71,8 @@ const MuxVideoComponent = () => { ref={videoElementRef} className="h-full w-full object-cover" playbackId="IPdwilTUVkKs2nK8zKZi5eKwbKhpCWxgsYNVxcANeFE" - poster="https://image.mux.com/IPdwilTUVkKs2nK8zKZi5eKwbKhpCWxgsYNVxcANeFE/thumbnail.jpg?time=0" + poster="https://image.mux.com/IPdwilTUVkKs2nK8zKZi5eKwbKhpCWxgsYNVxcANeFE/thumbnail.jpg?time=2" + startTime={2} loop muted={muted} autoPlay={playing} diff --git a/website/src/app/[lang]/[region]/(website)/(home)/(sections)/faq.tsx b/website/src/app/[lang]/[region]/(website)/(home)/(sections)/faq.tsx index b2bf3d508..d1440ad6c 100644 --- a/website/src/app/[lang]/[region]/(website)/(home)/(sections)/faq.tsx +++ b/website/src/app/[lang]/[region]/(website)/(home)/(sections)/faq.tsx @@ -1,5 +1,5 @@ import { DefaultParams } from '@/app/[lang]/[region]'; -import { FaqQuestion, FAQSection } from '@/app/[lang]/[region]/(website)/faq/faq-section'; +import { FaqQuestion, FAQSection } from '@/components/faq/faq-section'; import { Translator } from '@socialincome/shared/src/utils/i18n'; import { BaseContainer, Typography } from '@socialincome/ui'; import Link from 'next/link'; diff --git a/website/src/app/[lang]/[region]/(website)/faq/page.tsx b/website/src/app/[lang]/[region]/(website)/faq/page.tsx index 654078a0c..177360211 100644 --- a/website/src/app/[lang]/[region]/(website)/faq/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/faq/page.tsx @@ -2,7 +2,7 @@ import { DefaultPageProps } from '@/app/[lang]/[region]'; import { getMetadata } from '@/metadata'; import { Translator } from '@socialincome/shared/src/utils/i18n'; import { BaseContainer, Typography } from '@socialincome/ui'; -import { FAQSection } from './faq-section'; +import { FAQSection } from '../../../../../components/faq/faq-section'; export async function generateMetadata({ params }: DefaultPageProps) { return getMetadata(params.lang, 'website-faq'); @@ -31,6 +31,7 @@ export default async function Page({ params }: DefaultPageProps) { + diff --git a/website/src/app/[lang]/[region]/(website)/layout.tsx b/website/src/app/[lang]/[region]/(website)/layout.tsx index 5091b5f44..c31c64acd 100644 --- a/website/src/app/[lang]/[region]/(website)/layout.tsx +++ b/website/src/app/[lang]/[region]/(website)/layout.tsx @@ -5,7 +5,7 @@ import { PropsWithChildren } from 'react'; export default function Layout({ children, params: { lang, region } }: PropsWithChildren) { return ( -
+
{children}