import {
  ProjectCategory,
  ProjectContent,
  ProjectInterface,
  ProjectStatus,
} from "@/lib/types"

const content: ProjectContent = {
  en: {
    tldr: "A zero-knowledge protocol for anonymous interactions.",
    description: `### Overview

[Semaphore](https://semaphore.pse.dev/) is a generic privacy layer. Leveraging zero-knowledge technology, users can prove their membership in groups and send messages (extending from votes to endorsements)
off-chain or across EVM-compatible blockchains, all without revealing their personal identity. Use cases include private voting, whistleblowing, anonymous DAOs, and mixers.

Semaphore is designed to be a simple and generic privacy layer for decentralized applications (dApps). It encourages modular application design, allowing
dApp developers to choose and customize the on-chain and off-chain components they need.

The core of the protocol is the circuit logic. In addition to circuits, Semaphore provides [Solidity contracts](https://github.com/semaphore-protocol/semaphore/tree/main/packages/contracts) and
[JavaScript libraries](https://github.com/semaphore-protocol/semaphore/tree/main#-packages) that allow developers to generate zero-knowledge proofs and verify them with minimal effort.

### Features

With Semaphore, you can allow your users to do the following:

1. [Create a Semaphore identity](https://docs.semaphore.pse.dev/guides/identities)
2. [Add their Semaphore identity to a group (i.e. Merkle tree)](https://docs.semaphore.pse.dev/guides/groups)
3. [Send a verifiable, anonymous message (e.g. a vote or endorsement)](https://docs.semaphore.pse.dev/guides/proofs)

When a user broadcasts a message, Semaphore zero-knowledge proofs can ensure that the user has joined the group and hasn't already cast a message with a nullifier.

### Ways to contribute

* Submit your idea to PSE's [acceleration program](https://github.com/privacy-scaling-explorations/acceleration-program) (check out this [discussion](https://github.com/orgs/semaphore-protocol/discussions/463) for potential ideas).
* Work on [open issues](https://github.com/semaphore-protocol/semaphore/contribute)
* Suggest new terms for our [glossary](https://semaphore.pse.dev/docs/glossary) ([website-issue](https://github.com/semaphore-protocol/website/issues/new?assignees=&labels=documentation&template=---glossary-term.md&title=))
* Propose new networks for our [deployed contracts](https://semaphore.pse.dev/docs/deployed-contracts) ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=&template=----network.md&title=))
* Suggest new developer tools ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=feature+%3Arocket%3A&template=---package.md&title=))
* Share your Semaphore project with us ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=documentation++%F0%9F%93%96&template=----project.md&title=))
* Share ideas for new features ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=feature+%3Arocket%3A&template=---feature.md&title=))
* Create a report if you find any bugs in the code ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=bug+%F0%9F%90%9B&template=---bug.md&title=))

As a Semaphore contributor, you'll be able to claim a special GitPOAP per year 🏅`,
  },
}

export const semaphore: ProjectInterface = {
  id: "semaphore",
  category: ProjectCategory.DEVTOOLS,
  projectStatus: ProjectStatus.ACTIVE,
  section: "pse",
  content,
  image: "semaphore.webp",
  previousBrandImage: "semaphorePrevious.jpg",
  license: "MIT",
  name: "Semaphore",
  links: {
    github: "https://github.com/semaphore-protocol",
    website: "https://semaphore.pse.dev/",
    telegram: "https://semaphore.pse.dev/telegram",
    twitter: "https://semaphore.pse.dev/x",
  },
  tags: {
    keywords: [
      "Anonymity/privacy",
      "Social",
      "Identity",
      "Transaction privacy",
      "Voting/governance",
      "Reputation",
      "Education",
      "Scaling",
      "Key management",
      "Other (group membership)",
    ],
    themes: ["build"],
    types: ["Legos/dev tools", "Lego sets/toolkits", "Infrastructure/protocol"],
    builtWith: ["zk-kit", "circom", "snarkjs"],
  },
  extraLinks: {
    play: [
      {
        label: "Semaphore Demo",
        url: "https://demo.semaphore.pse.dev/",
      },
    ],
    buildWith: [
      {
        label: "Semaphore CLI (Getting Started)",
        url: "https://docs.semaphore.pse.dev/getting-started",
      },
      {
        label: "Semaphore JS libraries",
        url: "https://docs.semaphore.pse.dev/guides/identities",
      },
      {
        label: "Semaphore Boilerplate",
        url: "https://github.com/semaphore-protocol/boilerplate",
      },
    ],
    learn: [
      {
        label: "Semaphore Website",
        url: "https://semaphore.pse.dev",
      },
      {
        label: "Semaphore Documentation",
        url: "https://docs.semaphore.pse.dev",
      },
      {
        label: "Semaphore Board",
        url: "https://github.com/orgs/semaphore-protocol/projects/10/views/1",
      },
    ],
  },
}
