/ README.md
README.md
  1  # Kurate ReadMe
  2  
  3  
  4  ## Summary
  5  
  6  There are two distinct ways of describing Kurate depending on Player story. One is from the perspective of **Creators**, the other from the perspective of **Curators**. 
  7  
  8  **Creators**: Create public content anonymously through online masks called Personas.
  9  
 10  From this perspective, Kurate is an anonymous social media platform where creators remain private, but post publicly through group identities known as Personas. Creators earn reputation (REP) when Curators vote to Promote their posts.
 11  
 12  **Curators**: Communities anonymously curate content together.
 13  
 14  From this perspective, Kurate is a privacy-enabled group curation application, where people vote on whether a post is in the character of their group identity (known as a Persona). Curators earn reputation (REP) when they vote in-line with the majority of their community.
 15  
 16  ## Kurate: How To Play The Game
 17  Players will experience what it's like remain private, but "play" as a public group identity we call a Persona. Players speak "through" or "as" a Persona.
 18  
 19  Sometimes a Persona may "look like" a brand. Sometimes a Persona may "look like" an individual. To play as a Persona means to post content one believes is appropriate for the character of the Persona. 
 20  
 21  **Create a post**
 22  
 23  A Player looking to submit a post would ask themselves: "What types of things would this Persona share and amplify if they were a real person, with a real identity?" And then post accordingly. Another question might be "What types of content reflect the character of the community speaking through this Persona?"
 24  
 25  **Curate posts**
 26  
 27  Players help curate content that is "appropriate for the Persona" by voting on whether or not to amplify others' posts. If the community deems a post appropriate, it will be amplified to the Persona's main public page.
 28  
 29  **Reputation**
 30  
 31  Players earn reputation by posting and curating. For example, a Player whose posts are deemed appropriate by the community will gain reputation. And a Player who votes on a post in the same direction as the majority of voters will also earn reputation.
 32  
 33  **What Players can do in Kurate**:
 34  - Post anonymously as a Persona.
 35  - Vote on the appropriateness of a post from another Player.
 36  - Stake reputation on a Post — earning reputation if the community votes to amplify it.
 37  - Earn reputation through curating community-appropriate posts.
 38  - Anonymously Chat
 39  - Create a Persona
 40  
 41  ## Privacy with accountability 
 42  
 43  Players who post remain anonymous, but the community decides whether or not to amplify their post. This allows privacy for the Player with community accountability.
 44  
 45  Also, curating and creating Players earn reputation (REP) for positive gameplay (acting in-line with the values of a community). The more REP a Player has, the more they may do in Kurate.
 46  
 47  ## Technology
 48  We are using ZK-Proof technology and [Waku](https://waku.org/) to ensure privacy, with a hat-tip to [Unirep](https://medium.com/privacy-scaling-explorations/unirep-a-private-and-non-repudiable-reputation-system-7fb5c6478549), and [Semaphore](https://semaphore.appliedzkp.org/).
 49  
 50  ## For Developers
 51  
 52  0. Install all dependencies
 53  ```sh
 54  pnpm i
 55  ```
 56  
 57  1. Start blockchain and deploy contracts
 58  ```sh
 59  cd packages/contracts
 60  ```
 61  
 62  ```sh
 63  pnpm start:blockchain
 64  ```
 65  
 66  In another terminal window, compile, deploy the contracts
 67  ```
 68  pnpm start
 69  ```
 70  
 71  If successfully, the output should say:
 72  ```
 73  GlobalAnonymousFeedContract contract has been deployed
 74  Don't forget to set the variables for both the UI and relayer
 75  
 76  PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0
 77  PUBLIC_PROVIDER=http://localhost:8545
 78  
 79  Relayer only
 80  PRIVATE_KEY=...
 81  
 82  UI only
 83  PUBLIC_RELAYER_URL=...
 84  ```
 85  
 86  2. Start relayer
 87  ```sh
 88  cd packages/contracts
 89  ```
 90  Set the environment variables according to the contract deployment (for private key you can use any hardhat key). Should be:
 91  ```sh
 92  PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0
 93  PUBLIC_PROVIDER=http://localhost:8545
 94  PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
 95  ```
 96  
 97  Build and start the relayer
 98  ```
 99  pnpm build
100  pnpm start
101  ```
102  
103  3. Start UI
104  ```sh
105  cd packages/ui
106  ```
107  
108  Set the environment variables according to the contract deployment and where the relayer lives: Should be: 
109  ```sh
110  PUBLIC_GLOBAL_ANONYMOUS_FEED_ADDRESS=0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0
111  PUBLIC_PROVIDER=http://localhost:8545
112  PUBLIC_RELAYER_URL=http://localhost:3000
113  ```
114  
115  Start the UI with
116  ```sh
117  pnpm dev
118  ```
119  
120  You can now open the app at http://localhost:5173/ . Just make sure you are using either the `zkitter` or the `zkitter-god-node` adapter. You can configure those in `/dev` route (http://localhost:5173/dev)
121  
122  **Are you interested in contributing to Kurate?**
123  
124  
125  
126