===============
Getting Started
===============


:ref:`Collective Governance <collectivegovernance>` implements a flexible approach to voting to support a wide variety of communities.   Each community can define the individuals who may participate in governance decision making by defining a :ref:`VoterClass <VoterClass>`.   The VoterClass defines the characteristics of the voting population and determines if the wallet is in or out for a particular vote.   

Setting up a Governance contract is a two step process.


Build a VoterClass
___________________

VoterClass Implementations:

* Open voting - :ref:`CommunityClassOpenVote <CommunityClassOpenVote>`
* ERC-721 Token voting (including ERC-721 Enumerable) - :ref:`CommunityClassERC721 <CommunityClassERC721>`
* Pool voting - based on a specific list of voters - :ref:`CommunityClassVoterPool
 <CommunityClassVoterPool
>`

Create the Governance contract
_______________________________

Once the :ref:`VoterClass <voterclass>` has been created for your community, proceed with building a :ref:`Governance <Governance` contract.   There are two ways to build a contract.

Builders
========
* :ref:`System <System>` to build a contract with the fewest number of transactions
* :ref:`GovernanceBuilder <GovernanceBuilder>` to build a contract with the fewest number of parameters

Contract Requirements
======================
* :ref:`VoterClass <VoterClass>` The project voter class.  Possibly based on an `ERC-721 <https://erc721.org>` token.
* :ref:`Supervisor <supervisor>` One or more project supervisors to act as a community steward