diff --git a/app/about/page.tsx b/app/about/page.tsx new file mode 100644 index 0000000..4518873 --- /dev/null +++ b/app/about/page.tsx @@ -0,0 +1,163 @@ +import React from "react" +import Image from "next/image" + +import { Accordion } from "@/components/ui/accordion" + +interface PrincipleContentProps { + image: string + children: React.ReactNode + width?: number + height?: number +} +const PrincipleContent = ({ + image, + children, + width = 300, + height = 300, +}: PrincipleContentProps) => { + return ( +
+
+ +
+ + {children} + +
+ ) +} +export default function AboutPage() { + return ( +
+
+
+
+ Collective experimentation of cryptography. +
+ + PSE is a multi-disciplinary research and development lab supported + by the Ethereum Foundation. We create open source infrastructure, + tools and educational resources for building cryptography into real + world applications. + +
+
+ +
+
+
+
Pse principles
+ +

+ {`Cryptography is everywhere: every time you connect to a + secure site, log in with a password or unlock your phone, + you're seeing cryptography in action.`} +

+

+ {`With “programmable” cryptography (like zero knowledge + proofs, multi-party computation or homomorphic encryption) + we can make verifiable claims about secret information + without revealing the information itself. This can be + applied to identity management, collusion resistance, + anonymous communication and so much more.`} +

+

+ {`We're building a library of dev tools, research papers, and + prototypes that are open source and free for everyone to + use. We hope our resources inspire people to innovate the + technologies that their communities need.`} +

+ + ), + }, + { + label: "02. Privacy by default", + value: "2", + children: ( + +

+ We believe that privacy is a fundamental right. We want to + be part of building an internet that divests from invasive + data practices, and instead gives people real choices about + who has access to their personal information. Permission + should be purpose specific, revocable, informed and + uncoerced. +

+

+ We make tools that help people to securely authenticate + themselves, make confidential transactions on the + blockchain, and respect and preserve user privacy. +

+
+ ), + }, + { + label: "03. Scaling for communities", + value: "3", + children: ( + +

+ Zero knowledge proofs can verify computations quickly and + cheaply, helping decentralized systems like Ethereum become + more efficient. We research, design and share scaling + solutions that anyone can use to contribute to a stronger + and more practical digital public infrastructure. +

+

+ We also grow our community by supporting the next generation + of builders. We host immersive summer programs for students + and regular live lectures that anyone in the world can join + and learn from. +

+
+ ), + }, + { + label: "04. Open source public goods", + value: "4", + children: ( + +

+ We are cultivating a diverse and multidisciplinary team to + explore the emerging zero knowledge ecosystem. PSE is made + up of programmers, engineers, and mathematicians working + alongside creatives and community organizers to + collaboratively discover the potential of programmable + cryptography. +

+

+ We experiment in the open and welcome contributions, + integrations, forks, or feedback on all of our projects. +

+
+ ), + }, + ]} + >
+
+
+ ) +} diff --git a/components/icons.tsx b/components/icons.tsx index 4717940..01eb09b 100644 --- a/components/icons.tsx +++ b/components/icons.tsx @@ -127,4 +127,34 @@ export const Icons = { /> ), + plus: (props: LucideProps) => ( + + + + ), + minus: (props: LucideProps) => ( + + + + ), } diff --git a/components/ui/accordion.tsx b/components/ui/accordion.tsx new file mode 100644 index 0000000..dad016a --- /dev/null +++ b/components/ui/accordion.tsx @@ -0,0 +1,53 @@ +"use client" + +import React from "react" +import * as RadixAccordion from "@radix-ui/react-accordion" + +import { Icons } from "../icons" + +interface AccordionItemProps { + label: string + children?: React.ReactNode + value: string +} + +interface AccordionProps extends RadixAccordion.AccordionImplProps { + type: "single" | "multiple" + defaultValue?: string + items: AccordionItemProps[] +} + +const Accordion = ({ + type = "multiple", + defaultValue, + items, +}: AccordionProps) => { + return ( + + {items?.map(({ label, children, value }) => ( + + + + {label} + +
+ +
+
+ +
+
+ {children} +
+ ))} +
+ ) +} + +Accordion.displayName = "Accordion" + +export { Accordion } diff --git a/config/site.ts b/config/site.ts index cc94a1a..f326469 100644 --- a/config/site.ts +++ b/config/site.ts @@ -13,6 +13,10 @@ export const siteConfig = { title: "Project Library", href: "/projects", }, + { + title: "About", + href: "/about", + }, ], links: { twitter: "https://twitter.com/privacyscaling", diff --git a/package.json b/package.json index 1f1e0fa..d555424 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "clean": "rm -rf .next/ out/" }, "dependencies": { + "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-slot": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22d8ba9..441631f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@radix-ui/react-accordion': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-checkbox': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) @@ -542,6 +545,35 @@ packages: '@babel/runtime': 7.22.3 dev: false + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.3 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@types/react': 18.2.7 + '@types/react-dom': 18.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} peerDependencies: @@ -570,6 +602,58 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.3 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@types/react': 18.2.7 + '@types/react-dom': 18.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.3 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.7)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.7)(react@18.2.0) + '@types/react': 18.2.7 + '@types/react-dom': 18.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.7)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -632,6 +716,20 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.7)(react@18.2.0) dev: false + /@radix-ui/react-direction@1.0.1(@types/react@18.2.7)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.3 + '@types/react': 18.2.7 + react: 18.2.0 + dev: false + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.4)(@types/react@18.2.7)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: diff --git a/public/logos/principle-1.svg b/public/logos/principle-1.svg new file mode 100644 index 0000000..460e565 --- /dev/null +++ b/public/logos/principle-1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/logos/principle-2.svg b/public/logos/principle-2.svg new file mode 100644 index 0000000..8e84929 --- /dev/null +++ b/public/logos/principle-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/logos/principle-3.svg b/public/logos/principle-3.svg new file mode 100644 index 0000000..bc990eb --- /dev/null +++ b/public/logos/principle-3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/logos/principle-4.svg b/public/logos/principle-4.svg new file mode 100644 index 0000000..2a20ffb --- /dev/null +++ b/public/logos/principle-4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/logos/pse-logo-bg.svg b/public/logos/pse-logo-bg.svg new file mode 100644 index 0000000..0b6277f --- /dev/null +++ b/public/logos/pse-logo-bg.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +