project labeled sections divider

This commit is contained in:
Kalidou Diagne
2024-03-08 18:15:09 +01:00
parent 36faf3974e
commit d31f16bce2
33 changed files with 188 additions and 86 deletions

View File

@@ -1,7 +1,7 @@
import { Metadata } from "next"
import ProjectFiltersBar from "@/components/project/project-filters-bar"
import ProjectList from "@/components/project/project-list"
import { ProjectList } from "@/components/project/project-list"
import { ProjectResultBar } from "@/components/project/project-result-bar"
import { useTranslation } from "@/app/i18n"

View File

@@ -45,8 +45,9 @@
"fullyPSE": "Fully PSE"
},
"status": {
"archived": "Archived",
"active": "Active"
"archived": "Inactive",
"active": "Active",
"inactive": "Inactive"
},
"sortBy": "Sort by: {{option}}",
"tryItOut": "Try it out!",

View File

@@ -40,7 +40,8 @@
},
"status": {
"archived": "Archiviato",
"active": "Attivo"
"active": "Attivo",
"inactive": "Inattivo"
},
"sortBy": "Ordina per: {{option}}",
"tryItOut": "Prova!",
@@ -63,4 +64,4 @@
"whatDoYouWantDoToday": "Cosa vuoi fare oggi?",
"showingProjects": "Mostrando {{count}} progetti",
"showingProjectsWith": "Mostrando {{count}} progetti con:"
}
}

View File

@@ -67,10 +67,10 @@ export default function ProjectCard({
alt={`${name} banner`}
width={1200}
height={630}
className="min-h-[160px] w-full rounded-t-lg object-cover"
className="min-h-[160px] w-full overflow-hidden rounded-t-lg border-none object-cover"
/>
{!image && (
<span className="w-full px-5 text-xl text-center font-bold text-black absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 transform">
<span className="absolute left-1/2 top-1/2 w-full -translate-x-1/2 -translate-y-1/2 px-5 text-center text-xl font-bold text-black">
{imageAlt || name}
</span>
)}

View File

@@ -69,7 +69,7 @@ export const ThemesStatusMapping = (lang: LocaleTypes): IThemeStatus => {
icon: <Icons.checkActive />,
},
archived: {
label: t("status.archived"),
label: t("status.inactive"),
icon: <Icons.archived />,
},
}

View File

@@ -4,12 +4,19 @@ import React from "react"
import Image from "next/image"
import NoResultIcon from "@/public/icons/no-result.svg"
import { useProjectFiltersState } from "@/state/useProjectFiltersState"
import { cva } from "class-variance-authority"
import { LangProps } from "@/types/common"
import { ProjectSection, ProjectSections } from "@/lib/types"
import { cn } from "@/lib/utils"
import { useTranslation } from "@/app/i18n/client"
import ProjectCard from "./project-card"
const sectionTitleClass = cva(
"relative font-sans text-base font-bold uppercase tracking-[3.36px] text-anakiwa-950 after:ml-8 after:absolute after:top-1/2 after:h-[1px] after:w-full after:translate-y-1/2 after:bg-anakiwa-300 after:content-['']"
)
const NoResults = ({ lang }: LangProps["params"]) => {
const { t } = useTranslation(lang, "common")
@@ -28,7 +35,15 @@ const NoResults = ({ lang }: LangProps["params"]) => {
)
}
export default function ProjectList({ lang }: LangProps["params"]) {
const ProjectSectionLabelMapping: Record<ProjectSection, string> = {
pse: "PSE projects",
grant: "Grants",
collaboration: "Collaborations",
}
export const ProjectList = ({ lang }: LangProps["params"]) => {
const { t } = useTranslation(lang, "common")
const { t: tResource } = useTranslation(lang, "resources-page")
const { projects } = useProjectFiltersState((state) => state)
const noItems = projects?.length === 0
@@ -36,17 +51,60 @@ export default function ProjectList({ lang }: LangProps["params"]) {
if (noItems) return <NoResults lang={lang} />
return (
<div className="flex flex-wrap justify-center gap-6 pb-6">
{projects.map((project) => (
<ProjectCard
key={project?.id}
project={project}
lang={lang}
showBanner
showLinks
border
/>
))}
<div className="relative grid grid-cols-[1fr_200px] justify-between gap-10">
<div className="flex flex-col gap-14 md:gap-20">
{ProjectSections.map((section) => {
const sectionProjects =
projects.filter(
(project) =>
project.section?.toLowerCase() === section?.toLowerCase()
) ?? []
const hasProjectsForSection = sectionProjects.length > 0
const sectionTitle =
ProjectSectionLabelMapping[section as ProjectSection]
return (
<div className="flex justify-between gap-10">
<div
className={cn(
"flex w-full flex-col",
hasProjectsForSection ? "gap-10" : "gap-2"
)}
>
<div className="overflow-hidden">
<h3 className={cn(sectionTitleClass())}>{sectionTitle}</h3>
</div>
<div className="flex flex-wrap gap-6">
{hasProjectsForSection ? (
sectionProjects.map((project) => (
<ProjectCard
key={project?.id}
project={project}
lang={lang}
showBanner
showLinks
border
/>
))
) : (
<span> {t("noResults")}</span>
)}
</div>
</div>
</div>
)
})}
</div>
<div className="sticky top-16">
<div className="flex flex-col gap-4">
<h6 className="font-display text-lg font-bold text-tuatara-700">
{tResource("onThisPage")}
</h6>
</div>
</div>
</div>
)
}

View File

@@ -0,0 +1,15 @@
import { useTranslation } from "@/app/i18n"
interface AnchorListProps {
lang: string
}
const AnchorList = ({ lang }: AnchorListProps) => {
const { t } = useTranslation(lang, "resources-page")
return <div></div>
}
AnchorList.displayName = "AnchorList"
export { AnchorList }

View File

@@ -78,9 +78,6 @@ export const projects: ProjectInterface[] = [
p0tion,
jubmoji,
nfctap,
/**
* Grant projects hidden until we have grant tag
zkp2p,
zk3,
*/
]

View File

@@ -6,8 +6,9 @@ p0tion is an agnostic-from-ceremony public good toolkit, with the aim of making
export const p0tion: ProjectInterface = {
id: "p0tion",
section: "pse",
projectStatus: "active",
image: "",
image: "p0tion.png",
name: "p0tion",
tldr: "Toolkit for Groth16 Phase 2 Trusted Setup ceremonies.",
description,
@@ -16,10 +17,7 @@ export const p0tion: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/p0tion",
},
tags: {
keywords: [
"Toolkits",
"Infrastructure/protocol"
],
keywords: ["Toolkits", "Infrastructure/protocol"],
themes: ["build"],
types: ["Legos/dev tools"],
builtWith: [],

View File

@@ -6,6 +6,7 @@ P256 is an ERC-4337 smart contract wallet that leverages zk-SNARKs for WebAuthn
export const p256: ProjectInterface = {
id: "p256",
section: "pse",
projectStatus: "active",
image: "",
name: "P256",

View File

@@ -6,6 +6,7 @@ Pollen Labs is driven by a mission to make a significant impact on global lives
export const pollenLabs: ProjectInterface = {
id: "pollen-labs",
section: "pse",
projectStatus: "active",
image: "pollen-labs.svg",
name: "Pollen Labs",

View File

@@ -1,23 +1,28 @@
import { ProjectInterface } from "@/lib/types";
import { ProjectInterface } from "@/lib/types"
export const PerpetualPowersOfTau: ProjectInterface = {
id: "perpetual-powers-of-tau",
image: "",
section: "pse",
image: "powers-of-tau.png",
name: "Perpetual Powers of Tau",
tldr: 'An ongoing (since 2019) zk-SNARK trusted setup ceremony for circuits up to 2^28 constraints.',
description: "The Perpetual Powers of Tau is a multi-party trusted setup ceremony, rooted in the Zcash Powers of Tau. Its primary objective is the secure generation of zk-SNARK parameters for circuits accommodating up to 2^28 (260+ million) constraints. This translates to the creation of over 530 million powers of tau. The ceremony's integrity hinges on the principle that as long as one participant acts honestly and remains uncompromised, the entire setup remains trustworthy. It's a pivotal step for zk-SNARK projects, ensuring the security and privacy of the system. Those who can handle a 100Gb download and many hours of compute time are invited to join by contacting [@glamperd on Twitter](https://twitter.com/glamperd) or Telegram, or asking questions via the PSE [Discord](https://discord.com/invite/sF5CT5rzrR).",
projectStatus: 'active',
tldr: "An ongoing (since 2019) zk-SNARK trusted setup ceremony for circuits up to 2^28 constraints.",
description:
"The Perpetual Powers of Tau is a multi-party trusted setup ceremony, rooted in the Zcash Powers of Tau. Its primary objective is the secure generation of zk-SNARK parameters for circuits accommodating up to 2^28 (260+ million) constraints. This translates to the creation of over 530 million powers of tau. The ceremony's integrity hinges on the principle that as long as one participant acts honestly and remains uncompromised, the entire setup remains trustworthy. It's a pivotal step for zk-SNARK projects, ensuring the security and privacy of the system. Those who can handle a 100Gb download and many hours of compute time are invited to join by contacting [@glamperd on Twitter](https://twitter.com/glamperd) or Telegram, or asking questions via the PSE [Discord](https://discord.com/invite/sF5CT5rzrR).",
projectStatus: "active",
tags: {
keywords: ['scaling']
keywords: ["scaling"],
},
links: {
github: 'https://github.com/privacy-scaling-explorations/perpetualpowersoftau',
website: 'https://perpetualpowersoftau.com/'
github:
"https://github.com/privacy-scaling-explorations/perpetualpowersoftau",
website: "https://perpetualpowersoftau.com/",
},
extraLinks: {
learn: [{
label: 'Announcing the Perpetual Powers of Tau Ceremony',
url: 'https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377'
}],
learn: [
{
label: "Announcing the Perpetual Powers of Tau Ceremony",
url: "https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377",
},
],
},
}

View File

@@ -6,8 +6,9 @@ PSE Security is a division of the Privacy & Scaling Explorations team at the Eth
export const pseSecurity: ProjectInterface = {
id: "pse-security",
section: "pse",
projectStatus: "active",
image: "",
image: "pse-security.png",
name: "PSE Security",
tldr: "Proactively securing Ethereum's L2 and ZK ecosystems.",
description,

View File

@@ -6,6 +6,7 @@ Rate-Limiting Nullifier (RLN) is a protocol designed to combat spam and denial o
export const rln: ProjectInterface = {
id: "rln",
section: "pse",
projectStatus: "active",
image: "rln.svg",
name: "Rate-Limiting Nullifier",

View File

@@ -6,6 +6,7 @@ Semaphore is a protocol that allows users to prove their membership in a group a
export const semaphore: ProjectInterface = {
id: "semaphore",
section: "pse",
projectStatus: "active",
image: "semaphore.webp",
name: "Semaphore",

View File

@@ -6,6 +6,7 @@ Summa allows centralized exchanges to demonstrate that their assets exceed their
export const summa: ProjectInterface = {
id: "summa",
section: "pse",
projectStatus: "active",
image: "summa.svg",
name: "Summa",

View File

@@ -8,6 +8,7 @@ TLSNotary is ideal for developers of privacy-focused projects that require **dat
export const tlsn: ProjectInterface = {
id: "tlsn",
section: "pse",
projectStatus: "active",
image: "tlsn.webp",
name: "TLSNotary",
@@ -26,12 +27,12 @@ export const tlsn: ProjectInterface = {
"Plugin",
"Application",
],
builtWith: ['rust'],
builtWith: ["rust"],
keywords: [
"Anonymity/privacy",
"Identity",
"Reputation",
"Data portability"
"Data portability",
],
},
}

View File

@@ -5,6 +5,7 @@ The Trusted Setups project is dedicated to simplifying the process of trusted se
`
export const trustedSetups: ProjectInterface = {
id: "trusted-setups",
section: "pse",
projectStatus: "active",
image: "trusted-setups.svg",
name: "Trusted Setups",

View File

@@ -8,6 +8,7 @@ Using anonymous identifiers (epoch keys), the protocol allows for trustless enga
export const unirepProtocol: ProjectInterface = {
id: "unirep-protocol",
section: "pse",
projectStatus: "active",
image: "unirep.svg",
name: "UniRep Protocol",

View File

@@ -12,6 +12,7 @@ The primary use cases for WAX include scaling, key management, and the creation
export const wax: ProjectInterface = {
id: "wax",
section: "pse",
projectStatus: "active",
image: "wax.webp",
name: "Wallet Account eXperiments - WAX",

View File

@@ -1,20 +1,22 @@
import { ProjectInterface } from "@/lib/types";
import { ProjectInterface } from "@/lib/types"
export const ZKKit: ProjectInterface = {
id: "zk-kit",
image: "zk-kit.svg",
name: "ZK-kit",
tldr: "A monorepo of reusable libraries for zero-knowledge technologies.",
description: "ZK-kit is a set of libraries (plugins, algorithms or utility functions) that can be reused in different projects and zero-knowledge protocols, making it easier for developers to access user-friendly, tested, and documented libraries.",
projectStatus: 'active',
links: {
website: 'https://zkkit.pse.dev',
github: 'https://github.com/privacy-scaling-explorations/zk-kit',
},
tags: {
keywords: ['Education', 'Toolkits', 'Anonymity/Privacy', 'Algorithms'],
themes: ["build"],
types: ["Legos/dev tools"],
builtWith: ["Circom", "JavaScript", "Solidity", "Noir"]
}
id: "zk-kit",
section: "pse",
image: "zk-kit.svg",
name: "ZK-kit",
tldr: "A monorepo of reusable libraries for zero-knowledge technologies.",
description:
"ZK-kit is a set of libraries (plugins, algorithms or utility functions) that can be reused in different projects and zero-knowledge protocols, making it easier for developers to access user-friendly, tested, and documented libraries.",
projectStatus: "active",
links: {
website: "https://zkkit.pse.dev",
github: "https://github.com/privacy-scaling-explorations/zk-kit",
},
tags: {
keywords: ["Education", "Toolkits", "Anonymity/Privacy", "Algorithms"],
themes: ["build"],
types: ["Legos/dev tools"],
builtWith: ["Circom", "JavaScript", "Solidity", "Noir"],
},
}

View File

@@ -6,6 +6,7 @@ Zk3 is a protocol that leverages Zero Knowledge Proofs (ZKPs) to allow users to
export const zk3: ProjectInterface = {
id: "zk3",
section: "grant",
projectStatus: "active",
image: "zk3.svg",
name: "zk3",

View File

@@ -6,8 +6,9 @@ zkEVM Community Edition is a project aimed at validating Ethereum blocks using z
export const zkevmCommunity: ProjectInterface = {
id: "zkevm-community",
section: "pse",
projectStatus: "active",
image: "",
image: "zkevm.jpg",
name: "zkEVM Community Edition",
tldr: "A zero-knowledge proof mechanism for Ethereum block verification.",
description,

View File

@@ -6,6 +6,7 @@ Zkitter is a decentralized social network that emphasizes privacy by default. It
export const zkitter: ProjectInterface = {
id: "zkitter",
section: "pse",
projectStatus: "archived",
image: "zkitter.webp",
name: "Zkitter",

View File

@@ -6,8 +6,9 @@ ZKML is a solution that combines the power of zero-knowledge proofs (ZKPs) and m
export const zkml: ProjectInterface = {
id: "zkml",
section: "pse",
projectStatus: "active",
image: "",
image: "zkml.png",
name: "ZKML",
tldr: "ZKML (Zero-Knowledge Machine Learning) leverages zero-knowledge proofs for privacy-preserving machine learning, enabling model and data privacy with transparent verification.",
description,

View File

@@ -1,27 +1,32 @@
import { ProjectInterface } from "@/lib/types";
import { ProjectInterface } from "@/lib/types"
export const Zkopru: ProjectInterface = {
id: "zkopru",
image: "zkopru.svg",
name: "ZKOPRU",
tldr: "Optimistic Rollup with zk-SNARKs for private Ethereum transactions.",
description: "ZKOPRU is one of the initial projects of EF's PSE team. It is a Layer 2 scaling solution for Ethereum, emphasizing private transactions through zk-SNARKs and optimistic rollups. It provides an economical Ethereum privacy wallet, enabling users to transact with ETH, ERC-20s, and NFTs anonymously",
projectStatus: 'archived',
links: {
website: 'https://zkopru.network/',
github: 'https://github.com/zkopru-network',
youtube: 'https://www.youtube.com/watch?v=GvRsJxu9X6w',
},
extraLinks: {
learn: [{
label: 'ZKOPRU: Wat, Y & Wen',
url: 'https://mirror.xyz/privacy-scaling-explorations.eth/kfuuBPtGtDjl_J2wBq-jrtyURGLmQpUhZfDTuZChEy8'
}, {
label: "ZKOPRU on Testnet",
url: 'https://mirror.xyz/privacy-scaling-explorations.eth/EB0KcMY0k9ucN8iQSBeOYksoupDYRBQ4ZffhRt477FE'
}],
},
tags: {
keywords: ['anonymity', 'private transactions']
}
id: "zkopru",
section: "pse",
image: "zkopru.svg",
name: "ZKOPRU",
tldr: "Optimistic Rollup with zk-SNARKs for private Ethereum transactions.",
description:
"ZKOPRU is one of the initial projects of EF's PSE team. It is a Layer 2 scaling solution for Ethereum, emphasizing private transactions through zk-SNARKs and optimistic rollups. It provides an economical Ethereum privacy wallet, enabling users to transact with ETH, ERC-20s, and NFTs anonymously",
projectStatus: "archived",
links: {
website: "https://zkopru.network/",
github: "https://github.com/zkopru-network",
youtube: "https://www.youtube.com/watch?v=GvRsJxu9X6w",
},
extraLinks: {
learn: [
{
label: "ZKOPRU: Wat, Y & Wen",
url: "https://mirror.xyz/privacy-scaling-explorations.eth/kfuuBPtGtDjl_J2wBq-jrtyURGLmQpUhZfDTuZChEy8",
},
{
label: "ZKOPRU on Testnet",
url: "https://mirror.xyz/privacy-scaling-explorations.eth/EB0KcMY0k9ucN8iQSBeOYksoupDYRBQ4ZffhRt477FE",
},
],
},
tags: {
keywords: ["anonymity", "private transactions"],
},
}

View File

@@ -6,6 +6,7 @@ ZKP2P is for defi consumers looking to onramp assets on chain quickly without go
export const zkp2p: ProjectInterface = {
id: "zkp2p",
section: "grant",
projectStatus: "active",
image: "zkp2p.webp",
name: "ZKP2P",

View File

@@ -1,3 +1,7 @@
// list of project groups
export const ProjectSections = ["pse", "grant", "collaboration"] as const
export type ProjectSection = (typeof ProjectSections)[number]
export interface AnnounceInterface {
id: number
type?: number
@@ -44,6 +48,7 @@ export type ActionLinkType = Partial<
export type ProjectStatusType = "active" | "inactive" | "archived"
export interface ProjectInterface {
id: string
section: ProjectSection
image: string
imageAlt?: string
name: string

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB