Skip to main content

Get started with Agora DAO

This guide will walk you through creating your first decentralized autonomous organization, connecting your wallet, and becoming a DAO member. By the end, you’ll understand the core workflows of the Agora DAO platform.
Before you begin, make sure you have a Web3 wallet like MetaMask installed and configured with some test ETH on your chosen network.

Connect your wallet

1

Launch the application

Navigate to the Agora DAO application in your browser. The application runs on http://localhost:3000 for local development.
2

Connect wallet

Click the “Connect Wallet” button in the top-right corner. The application uses RainbowKit to support multiple wallet providers including MetaMask, WalletConnect, Coinbase Wallet, and more.
// The app supports multiple networks configured in scaffold.config.ts
targetNetworks: [chains.hardhat]
3

Select network

Ensure you’re connected to the correct network. For local development, connect to the Hardhat network (Chain ID: 31337). For production, select Ethereum mainnet or your target network.
4

Confirm connection

Once connected, you’ll see your wallet address displayed in the header, along with your ETH balance.

Create your first DAO

Creating a DAO on Agora is straightforward and happens entirely on-chain.
1

Navigate to DAOs page

Go to the DAOs page from the navigation menu. You’ll see a list of all existing DAOs on the platform.
2

Open the creation dialog

Click the “Create DAO” button (or one of its rotating variants like “Launch DAO” or “Decentralize now”) to open the DAO creation form.Create DAO button
3

Fill in DAO details

Complete the required fields:Name (required, max 50 characters)Choose a unique name for your DAO that represents your community or mission.
// Example from CreateDaoDialog.tsx:53-57
defaultValues: {
  name: "",
  description: "",
  categories: undefined,
  logo: undefined,
}
Description (required, max 500 characters)Provide a clear description of your DAO’s purpose and goals.Category (required)Select from predefined categories:
  • SERVICE - For service-oriented DAOs
  • GOVERNANCE - For governance-focused organizations
  • SOCIAL IMPACT - For charitable and impact initiatives
  • ENERGY - For sustainability and energy projects
AgoraDaoFactory.sol:43-48
constructor(address initialOwner) Ownable(initialOwner) {
    daoCategories.push("SERVICE");
    daoCategories.push("GOVERNANCE");
    daoCategories.push("SOCIAL IMPACT");
    daoCategories.push("ENERGY");
}
Logo (optional, max 1MB)Upload an image to represent your DAO. Recommended size: 100x100 pixels. The image is stored on IPFS for decentralized hosting.
4

Launch your DAO

Click “Launch DAO” to submit the transaction. This will:
  1. Upload your logo to IPFS (if provided)
  2. Call the createDao function on the AgoraDaoFactory contract
  3. Deploy a new AgoraDao contract instance
  4. Register you as the admin of the new DAO
CreateDaoDialog.tsx:136-139
await writeAgoraDaoFabricAsync({
  functionName: "createDao",
  args: [data.name, data.description, BigInt(data.categories), res?.cid || ""],
});
5

Confirm the transaction

Your wallet will prompt you to confirm the transaction. Review the gas fees and approve the transaction.
6

Wait for confirmation

The transaction will be mined on the blockchain. Once confirmed, your DAO will appear in the list of all DAOs.
On local networks (Hardhat), transactions are instant. On live networks like mainnet or Sepolia, it may take 15-30 seconds.
As the DAO creator, you automatically receive the DEFAULT_ADMIN_ROLE, giving you full administrative privileges. Handle this role with care.

Join an existing DAO

To participate in a DAO, you need to join it first.
1

Browse available DAOs

Navigate to the DAOs page and browse the list of available organizations. You can search and filter by category to find DAOs that match your interests.
2

View DAO details

Click on a DAO card to view its details including:
  • DAO name and description
  • Category
  • Creator address
  • Creation timestamp
  • Number of members
  • DAO contract address
3

Click 'Join DAO'

If you’re not already a member, click the “Join DAO” button. This triggers the joinDao function on the DAO contract.
AgoraDao.sol:35-44
function joinDao() external {
    require(!hasRole(USER_ROLE, msg.sender), "User already joined");
    require(!hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "The owner can't join");

    IAgoraDaoFactory(fabric).addUserCounter(msg.sender);
    emit UserJoined(msg.sender, userCounter);

    _joinDaoUser(msg.sender);
    userCounter++;
}
4

Confirm transaction

Approve the transaction in your wallet. Once confirmed, you’ll be granted the USER_ROLE and added to the DAO’s member list.
5

Start participating

As a member, you can now:
  • View DAO proposals
  • Participate in governance
  • Be assigned tasks
  • Earn reputation and rewards
The DAO admin cannot join their own DAO as a regular member. This is enforced by the smart contract to maintain clear role separation.

Understanding DAO roles

Agora DAO uses OpenZeppelin’s AccessControl for robust role management:
bytes32 internal constant AUDITOR_ROLE = keccak256("AUDITOR_ROLE");
bytes32 internal constant TASK_MANAGER_ROLE = keccak256("TASK_MANAGER_ROLE");
bytes32 internal constant PROPOSAL_MANAGER_ROLE = keccak256("PROPOSAL_MANAGER_ROLE");
bytes32 internal constant USER_ROLE = keccak256("USER_ROLE");

Role hierarchy

  • DEFAULT_ADMIN_ROLE - Can assign any role, including AUDITOR_ROLE
  • AUDITOR_ROLE - Can assign roles except AUDITOR_ROLE and DEFAULT_ADMIN_ROLE
  • TASK_MANAGER_ROLE - Manages task creation and assignment (future feature)
  • PROPOSAL_MANAGER_ROLE - Handles governance proposals (future feature)
  • USER_ROLE - Standard member with basic participation rights

Explore DAO data

You can interact with DAOs programmatically or through the UI:
import { useScaffoldReadContract } from "~~/hooks/scaffold-eth";

// Get all DAOs
const { data: allDaos } = useScaffoldReadContract({
  contractName: "AgoraDaoFactory",
  functionName: "getAllDaos",
});

// Get DAO categories
const { data: categories } = useScaffoldReadContract({
  contractName: "AgoraDaoFactory",
  functionName: "getAllDaoCategories",
});

// Get total DAO count
const { data: daoCount } = useScaffoldReadContract({
  contractName: "AgoraDaoFactory",
  functionName: "getTotalDaoCount",
});

Next steps

Now that you’ve created and joined a DAO, explore more advanced features:

Role management

Learn how to assign and manage roles within your DAO

Task management

Create and manage tasks with escrow payments

Smart contracts

Dive deep into the contract architecture

Frontend components

Explore all available UI components and hooks

Build docs developers (and LLMs) love