add project tags to list

This commit is contained in:
Kalidou Diagne
2023-08-17 18:09:27 +02:00
parent 8b31bb8fb4
commit 281506c776
26 changed files with 149 additions and 52 deletions

View File

@@ -1,3 +1,4 @@
import { HtmlHTMLAttributes } from "react"
import Link from "next/link"
import {
FilterLabelMapping,
@@ -8,6 +9,18 @@ import { ProjectInterface } from "@/lib/types"
import { CategoryTag } from "../ui/categoryTag"
interface TagsProps extends HtmlHTMLAttributes<HTMLDivElement> {
label: string
}
const TagsWrapper = ({ label, children }: TagsProps) => {
return (
<div className="flex gap-2">
<span className="py-2 text-base font-medium ">{label}</span>
{children}
</div>
)
}
export function ProjectTags({ project }: { project: ProjectInterface }) {
return (
<div className="flex flex-col gap-4 mt-8">
@@ -15,11 +28,12 @@ export function ProjectTags({ project }: { project: ProjectInterface }) {
const keyTags = project?.tags?.[key as ProjectFilter]
const hasItems = keyTags && keyTags?.length > 0
if (key === "themes") return null // ignore themes
return (
hasItems && (
<div>
<div className="flex gap-2">
<span className="py-2 text-base font-medium ">{label}</span>
<TagsWrapper label={label}>
<div className="flex gap-[6px]">
{keyTags?.map((tag) => {
return (
@@ -31,11 +45,12 @@ export function ProjectTags({ project }: { project: ProjectInterface }) {
)
})}
</div>
</div>
</TagsWrapper>
</div>
)
)
})}
<TagsWrapper label="Project status"></TagsWrapper>
</div>
)
}

View File

@@ -7,8 +7,17 @@ import { useProjectFiltersState } from "@/state/useProjectFiltersState"
import { ProjectLinkWebsite } from "@/lib/types"
import { Icons } from "../icons"
import { CategoryTag } from "../ui/categoryTag"
import { ThemesButtonMapping } from "./project-filters-bar"
import { ProjectLink } from "./project-link"
const TagsIconMapping: Record<string, any> = {
build: <Icons.hammer height={12} width={12} />,
play: <Icons.hand height={12} width={12} />,
research: <Icons.readme height={12} width={12} />,
}
export default function ProjectList() {
const { projects } = useProjectFiltersState((state) => state)
const router = useRouter()
@@ -16,13 +25,13 @@ export default function ProjectList() {
return (
<div className="flex flex-wrap justify-center gap-6 pb-6">
{projects.map((project) => {
const { id, image, links, name, tldr } = project
const { id, image, links, name, tldr, tags } = project
return (
<div key={id}>
<div
onClick={() => router.push(`/projects/${id}`)}
className="flex h-[419px] w-[310px] cursor-pointer flex-col overflow-hidden rounded-lg border border-slate-900/20 transition duration-150 ease-in hover:scale-105"
className="flex h-[460px] w-[310px] cursor-pointer flex-col overflow-hidden rounded-lg border border-slate-900/20 transition duration-150 ease-in hover:scale-105"
>
<Image
src={`/project-banners/${image ? image : "fallback.webp"}`}
@@ -33,6 +42,21 @@ export default function ProjectList() {
/>
<div className="flex flex-col justify-between h-full gap-5 p-5 bg-white rounded-b-lg">
<div className="flex flex-col justify-start gap-2">
<div className="flex gap-2">
{tags?.themes?.map((theme, index) => {
const { label } = ThemesButtonMapping?.[theme]
const icon = TagsIconMapping?.[theme]
return (
<CategoryTag variant="blue" size="xs" key={index}>
<div className="flex items-center gap-1">
{icon}
<span>{label ?? theme}</span>
</div>
</CategoryTag>
)
})}
</div>
<h1 className="text-xl font-bold text-black">{name}</h1>
<p className="text-slate-900/80">{tldr}</p>
</div>

View File

@@ -6,6 +6,7 @@ Anon Aadhaar is a project that allows individuals to prove their citizenship ano
export const anonAadhaar: ProjectInterface = {
id: "anon-aadhaar",
projectStatus: "active",
image: "",
name: "Anon Aadhaar",
tldr: "Tools for building build privacy-preserving applications using government ID cards, specifically Aadhaar cards in India.",
@@ -14,8 +15,9 @@ export const anonAadhaar: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/anon-aadhaar",
},
tags: {
themes: ["Anonymity/privacy", "Social", "Identity", "Voting/governance"],
keywords: ["Anonymity/privacy", "Social", "Identity", "Voting/governance"],
themes: ["build", "play"],
type: ["Legos/dev tools", "Lego sets/toolkits", "Proof of concept"],
builtWith: ["Circom, RSA"],
builtWith: ["circom", "rsa"],
},
}

View File

@@ -6,6 +6,7 @@ AnonKlub is a tool designed for Ethereum developers that allows for anonymous pr
export const anonKlub: ProjectInterface = {
id: "anon-klub",
projectStatus: "active",
image: "anonklub.svg",
name: "AnonKlub",
tldr: "A mechanism for anonymous proof of Ethereum address ownership.",
@@ -15,14 +16,15 @@ export const anonKlub: ProjectInterface = {
website: "https://anonklub.github.io",
},
tags: {
themes: [
keywords: [
"Transaction privacy",
"Anonymity/privacy",
"Social",
"Identity",
"Voting/governance",
],
themes: ["build", "play"],
type: ["Infrastructure/protocol", "Prototype", "Proof of concept"],
builtWith: ["Circom", "snarkjs", "halo2"],
builtWith: ["circom", "snarkjs", "halo2"],
},
}

View File

@@ -6,6 +6,7 @@ Bandada is a project designed to simplify the management of privacy-preserving S
export const bandada: ProjectInterface = {
id: "bandada",
projectStatus: "active",
image: "bandada.webp",
name: "Bandada",
tldr: "An open-source system for managing privacy-preserving groups of anonymous individuals.",
@@ -15,7 +16,7 @@ export const bandada: ProjectInterface = {
website: "https://bandada.appliedzkp.org/",
},
tags: {
themes: [
keywords: [
"Anonymity/privacy",
"Social",
"Identity",
@@ -35,6 +36,7 @@ export const bandada: ProjectInterface = {
"Plugin",
"Application",
],
builtWith: ["Semaphore", "ZK-kit"],
builtWith: ["semaphore", "zk-kit"],
themes: ["build", "play"],
},
}

View File

@@ -6,6 +6,7 @@ Channel 4 is a community-driven platform where users can submit and discover con
export const channel4: ProjectInterface = {
id: "channel-4",
projectStatus: "active",
image: "channel4.svg",
name: "Channel 4",
tldr: "Content discovery through community contributions, using state channels to reward users for popular posts.",
@@ -16,8 +17,9 @@ export const channel4: ProjectInterface = {
discord: "https://discord.gg/76UrYgVyEx",
},
tags: {
themes: ["Scaling"],
keywords: ["Scaling"],
themes: ["play"],
type: ["Application"],
builtWith: ["State channel", "Smart contract"],
builtWith: ["state channel", "smart contract"],
},
}

View File

@@ -6,6 +6,7 @@ CryptKeeper is a browser extension that generates Semaphore and RLN proofs for w
export const cryptkeeper: ProjectInterface = {
id: "cryptkeeper",
projectStatus: "active",
image: "cryptkeeper.webp",
name: "CryptKeeper",
tldr: "A browser extension for secure, portable anonymous identity management across applications.",
@@ -14,9 +15,9 @@ export const cryptkeeper: ProjectInterface = {
github: "https://github.com/CryptKeeperZK",
},
tags: {
themes: ["Anonymity/privacy", "Social", "Identity"],
keywords: ["Anonymity/privacy", "Social", "Identity"],
themes: ["build"],
types: ["Application", "Infrastructure/protocol", "Lego sets/toolkits"],
builtWith: ["Semaphore", "RLN"],
builtWith: ["semaphore", "rln"],
},
}

View File

@@ -6,6 +6,7 @@ An anonymous, federated, chat application that uses Rate-Limiting Nullifier for
export const discreetly: ProjectInterface = {
id: "discreetly",
projectStatus: "active",
image: "discreetly.svg",
name: "Discreetly",
tldr: "An anonymous, federated, chat application using ZK.",
@@ -14,8 +15,9 @@ export const discreetly: ProjectInterface = {
github: "https://github.com/Discreetly",
},
tags: {
themes: ["Anonymity/privacy", "Social"],
keywords: ["Anonymity/privacy", "Social"],
themes: ["play"],
types: ["Legos/dev tools", "Proof of concept", "Application"],
builtWith: ["RLN", "Semaphore", "Waku"],
builtWith: ["rln", "semaphore", "waku"],
},
}

View File

@@ -6,6 +6,7 @@ The DSL Working Group is focused on the exploration and improvement of languages
export const dslWorkingGroup: ProjectInterface = {
id: "dsl-working-group",
projectStatus: "active",
image: "",
name: "DSL Working Group",
tldr: "Exploration of languages for writing zk circuits",
@@ -14,7 +15,8 @@ export const dslWorkingGroup: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/chiquito/",
},
tags: {
type: ["Legos/dev tools", "Proof of concept", "Developer tooling"],
type: ["research"],
keywords: [],
themes: [],
builtWith: [],
},

View File

@@ -6,6 +6,7 @@ EigenTrust is a library designed to manage trust within a distributed network, i
export const eigenTrust: ProjectInterface = {
id: "eigen-trust",
projectStatus: "active",
image: "",
name: "EigenTrust",
tldr: "A distributed reputation system with zero-knowledge features.",
@@ -14,8 +15,9 @@ export const eigenTrust: ProjectInterface = {
github: "https://github.com/eigen-trust/protocol",
},
tags: {
themes: ["Reputation", "Identity"],
keywords: ["Reputation", "Identity"],
themes: ["build"],
type: ["Infrastructure/protocol"],
builtWith: ["Ethereum Attestation Service", "Halo2", "ethers.rs"],
builtWith: ["ethereum attestation service", "halo2", "ethers.rs"],
},
}

View File

@@ -6,6 +6,7 @@ Minimal Anti-Collusion Infrastructure (MACI) is a protocol designed to provide a
export const maci: ProjectInterface = {
id: "maci",
projectStatus: "active",
image: "maci.webp",
name: "MACI",
tldr: "A secure e-voting solution minimizing the risk of collusion and bribery",
@@ -14,8 +15,9 @@ export const maci: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/maci",
},
tags: {
themes: ["Anonymity/privacy", "Voting/governance"],
keywords: ["Anonymity/privacy", "Voting/governance"],
themes: ["build"],
types: ["Lego sets/toolkits", "Infrastructure/protocol"],
builtWith: ["P0tion", "JubjubLib"],
builtWith: ["p0tion", "JubjubLib"],
},
}

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",
projectStatus: "active",
image: "pollen-labs.svg",
name: "Pollen Labs",
tldr: "Champions of freedom of speech and expression through decentralized innovation.",
@@ -15,8 +16,9 @@ export const pollenLabs: ProjectInterface = {
twitter: "https://twitter.com/PollenLabs_",
},
tags: {
themes: ["Anonymity/privacy", "Scaling"],
keywords: ["Anonymity/privacy", "Scaling"],
themes: ["play"],
type: ["Application"],
builtWith: [""],
builtWith: [],
},
}

View File

@@ -6,6 +6,7 @@ PSE Security is a division of the Privacy & Scaling Explorations team at the Eth
export const pseSecurity: ProjectInterface = {
id: "pse-security",
projectStatus: "active",
image: "",
name: "PSE Security",
tldr: "Proactively securing Ethereum's L2 and ZK ecosystems.",
@@ -14,14 +15,15 @@ export const pseSecurity: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/security",
},
tags: {
themes: [
keywords: [
"Anonymity/privacy",
"Education",
"Key management",
"Scaling",
"Security",
],
themes: ["build"],
types: ["Legos/dev tools"],
builtWith: ["Slither", "Ecne", "Circomspect", "Echidna"],
builtWith: ["slither", "ecne", "circomspect", "echidna"],
},
}

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",
projectStatus: "active",
image: "rln.webp",
name: "Rate-Limiting Nullifier",
tldr: "A protocol for deterring spam and maintaining anonymity in communication systems.",
@@ -15,8 +16,9 @@ export const rln: ProjectInterface = {
website: "https://rate-limiting-nullifier.github.io/rln-docs/",
},
tags: {
themes: ["Anonymity/privacy"],
keywords: ["Anonymity/privacy"],
themes: ["build"],
types: ["Infrastructure/protocol"],
builtWith: ["Circom", "Solidity", "Semaphore"],
builtWith: ["circom", "solidity", "semaphore"],
},
}

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",
projectStatus: "active",
image: "semaphore.webp",
name: "Semaphore",
tldr: "A zero-knowledge protocol enabling anonymous group membership proof and signaling.",
@@ -16,7 +17,7 @@ export const semaphore: ProjectInterface = {
discord: "https://semaphore.appliedzkp.org/discord",
},
tags: {
themes: [
keywords: [
"Anonymity/privacy",
"Social",
"Identity",
@@ -28,8 +29,8 @@ export const semaphore: ProjectInterface = {
"Key management",
"Other (group membership)",
],
themes: ["build"],
types: ["Legos/dev tools", "Lego sets/toolkits", "Infrastructure/protocol"],
builtWith: ["ZK-kit", "circom", "snarkjs"],
builtWith: ["zk-kit", "circom", "snarkjs"],
},
}

View File

@@ -6,6 +6,7 @@ Summa allows centralized exchanges to demonstrate that their assets exceed their
export const summa: ProjectInterface = {
id: "summa",
projectStatus: "active",
image: "",
name: "Summa",
tldr: "Protocol enabling centralized exchanges to prove solvency without compromising private information.",
@@ -14,8 +15,9 @@ export const summa: ProjectInterface = {
github: "https://github.com/summa-dev",
},
tags: {
themes: ["Anonymity/privacy", "Computational Integrity"],
keywords: ["Anonymity/privacy", "Computational Integrity"],
themes: ["build", "play"],
type: ["Infrastructure/protocol", "Application"],
builtWith: ["Halo2 PSE"],
builtWith: ["halo2"],
},
}

View File

@@ -6,6 +6,7 @@ TLSNotary is useful for developers of privacy focused projects that need data pr
export const tlsn: ProjectInterface = {
id: "tlsn",
projectStatus: "active",
image: "tlsn.webp",
name: "TLSNotary",
tldr: "A protocol for creating cryptographic proofs of authenticity for any data on the web.",
@@ -16,8 +17,9 @@ export const tlsn: ProjectInterface = {
discord: "https://discord.gg/9XwESXtcN7",
},
tags: {
themes: [],
themes: ["build"],
type: [],
builtWith: [],
keywords: [],
},
}

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",
projectStatus: "active",
image: "trusted-setups.svg",
name: "Trusted Setups",
tldr: "Aiding developers with tools for trusted setups.",
@@ -13,8 +14,9 @@ export const trustedSetups: ProjectInterface = {
github: "https://github.com/zkparty",
},
tags: {
themes: ["Scaling", "Education"],
themes: ["play"],
type: ["Legos/dev tools", "Lego sets/toolkits"],
builtWith: [],
keywords: ["Scaling", "Education"],
},
}

View File

@@ -6,6 +6,7 @@ UniRep is a zero-knowledge protocol that securely manages user data through anon
export const unirepProtocol: ProjectInterface = {
id: "unirep-protocol",
projectStatus: "active",
image: "unirep.svg",
name: "UniRep Protocol",
tldr: "A Zero-Knowledge Protocol for user data & reputation management",
@@ -17,8 +18,9 @@ export const unirepProtocol: ProjectInterface = {
discord: "https://discord.gg/VzMMDJmYc5",
},
tags: {
themes: ["Anonymity/privacy", "Social", "Identity", "Reputation"],
keywords: ["Anonymity/privacy", "Social", "Identity", "Reputation"],
themes: ["build"],
type: ["Legos/dev tools, Protocol"],
builtWith: ["Semaphore", "Circom"],
builtWith: ["semaphore", "circom"],
},
}

View File

@@ -6,6 +6,7 @@ Wallet Account eXperiments (WAX), formerly known as BLS Wallet, is a suite of pr
export const wax: ProjectInterface = {
id: "wax",
projectStatus: "active",
image: "wax.webp",
name: "Wallet Account eXperiments (WAX)",
tldr: "Streamlines web3 product development with smart account components for enhanced wallets, dApps, and SDKs.",
@@ -17,16 +18,16 @@ export const wax: ProjectInterface = {
},
tags: {
builtWith: [
"Hardhat",
"Node",
"Solidity BLS library",
"hardhat",
"node",
"solidity bls library",
"sqlite",
"docker",
"ethers",
"deno",
],
themes: ["Scaling", "Key management"],
keywords: ["Scaling", "Key management"],
themes: ["play"],
types: ["Prototype", "Proof of concept", "Lego sets/toolkits"],
},
}

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",
projectStatus: "active",
image: "zk3.svg",
name: "zk3",
tldr: "Utilizing ZK proofs in social networks",
@@ -16,13 +17,14 @@ export const zk3: ProjectInterface = {
twitter: "http://twitter.com/zk3org",
},
tags: {
themes: ["Anonymity/privacy", "Social", "Identity", "Reputation"],
themes: ["play"],
type: [
"Legos/dev tools",
"Lego sets/toolkits",
"Infrastructure/protocol",
"Plugin",
],
builtWith: ["Semaphore", "Lens protocol"],
keywords: ["Anonymity/privacy", "Social", "Identity", "Reputation"],
builtWith: ["semaphore", "lens protocol"],
},
}

View File

@@ -6,6 +6,7 @@ zkEVM Community Edition is a project aimed at validating Ethereum blocks using z
export const zkevmCommunity: ProjectInterface = {
id: "zkevm-community",
projectStatus: "active",
image: "",
name: "zkEVM Community Edition",
tldr: "A zero-knowledge proof mechanism for Ethereum block verification.",
@@ -14,8 +15,9 @@ export const zkevmCommunity: ProjectInterface = {
github: "https://github.com/privacy-scaling-explorations/zkevm-circuits",
},
tags: {
themes: ["Scaling"],
keywords: ["Scaling"],
themes: ["build"],
types: ["Infrastructure/protocol", "Lego sets/toolkits"],
builtWith: ["halo2 from zcash", "Rust", "geth"],
builtWith: ["halo2", "rust", "geth"],
},
}

View File

@@ -6,6 +6,7 @@ Zkitter is a decentralized social network that emphasizes privacy by default. It
export const zkitter: ProjectInterface = {
id: "zkitter",
projectStatus: "archived",
image: "zkitter.webp",
name: "Zkitter",
tldr: "A decentralized social network prioritizing privacy and anonymity",
@@ -17,8 +18,9 @@ export const zkitter: ProjectInterface = {
},
tags: {
themes: ["Anonymity/privacy", "Social", "Identity"],
keywords: ["Anonymity/privacy", "Social", "Identity"],
themes: ["build"],
types: ["Application", "Infrastructure/protocol"],
builtWith: ["Semaphore", "RLN", "Interep", "zkchat"],
builtWith: ["semaphore", "rln", "interep", "zkchat"],
},
}

View File

@@ -6,6 +6,7 @@ ZKML is a solution that combines the power of zero-knowledge proofs (ZKPs) and m
export const zkml: ProjectInterface = {
id: "zkml",
projectStatus: "active",
image: "",
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.",
@@ -14,7 +15,8 @@ export const zkml: ProjectInterface = {
github: "https://github.com/socathie/circomlib-ml",
},
tags: {
themes: ["Anonymity/privacy", "Scaling"],
keywords: ["Anonymity/privacy", "Scaling"],
themes: ["research"],
type: ["Proof of concept", "Infrastructure/protocol"],
builtWith: ["circom", "halo2", "nova"],
},

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",
projectStatus: "active",
image: "zkp2p.webp",
name: "ZKP2P",
tldr: "Instant fiat to crypto onramp connecting traditional peer-to-peer payment services with zero-knowledge proofs.",
@@ -16,8 +17,9 @@ export const zkp2p: ProjectInterface = {
twitter: "https://twitter.com/zkp2p",
},
tags: {
themes: ["Anonymity/privacy", "Payments", "On-ramping"],
keywords: ["Private communications"],
theme: ["play"],
type: ["Proof of concept", "Application"],
builtWith: ["Circom", "Halo2"],
builtWith: ["circom", "halo2"],
},
}

View File

@@ -16,6 +16,19 @@ export type ProjectLinkWebsite =
| "youtube"
export type ProjectLinkType = Partial<Record<ProjectLinkWebsite, string>>
export type ProjectExtraLinkType = "buildWith" | "play" | "research" | "learn"
export type ActionLinkType = Partial<
Record<
ProjectExtraLinkType,
Array<{
label: string
url: string
}>
>
>
export type ProjectStatusType = "active" | "inactive" | "archived"
export interface ProjectInterface {
id: string
image: string
@@ -23,5 +36,7 @@ export interface ProjectInterface {
tldr: string
description: string
links?: ProjectLinkType
projectStatus: ProjectStatusType
tags?: Record<string, string[]>
extraLinks?: ActionLinkType
}