docs.h.overview
A governance portal on the audited OpenZeppelin Governor stack: create proposals, delegate and vote with your token, watch quorum and tallies, and run a timelock-controlled treasury. An optional fixed-price token sale can seed the treasury.
DAO Governance gives your community a real portal: a list of proposals with their state, quorum progress and for/against/abstain tallies, a one-click vote (after delegating), your live voting power, the treasury balance, and a form to create a signal proposal — all read from on-chain governance events.
It's built on the OpenZeppelin Governor stack: an ERC20Votes governance token, a TimelockController that holds the treasury and executes passed proposals after a delay, and a Governor with configurable voting delay, period, quorum and proposal threshold. The multi-step wizard deploys the timelock and governor and wires the roles correctly (proposer/executor granted, deployer admin renounced).
An optional GovSale contract lets you sell an allocation of governance tokens at a fixed price, sending the proceeds straight to the treasury — a simple way to bootstrap funds and distribute votes.
docs.h.included
- Next.js app (App Router, TypeScript, Tailwind)
- GovToken + TimelockController + MyGovernor (+ optional GovSale) — Hardhat
- Multi-step deploy wizard that wires the timelock & governor roles
- Dockerfile + docker-compose
- README + .env workflow
docs.h.contracts
- GovToken.sol — ERC-20 governance token with on-chain voting power and gasless approvals; holders delegate (to themselves or a delegate) to activate their votes (OpenZeppelin ERC20Votes + ERC20Permit).
- TimelockController — OpenZeppelin timelock that holds the DAO treasury and executes passed proposals after a configurable delay.
- MyGovernor.sol — OpenZeppelin Governor (settings + simple counting + token votes + quorum fraction + timelock control): proposals are created, voted on, queued through the timelock and executed.
- GovSale.sol — an optional fixed-price sale of an allocation of gov tokens; the native-coin proceeds go straight to the treasury (OpenZeppelin Ownable).
docs.h.stack
docs.stackLine
docs.chainsLine
docs.h.quickstart
docs.quickstartP
unzip dao-governance.zip && cd dao-governance
npm install
npm run devdocs.quickstartUrl
docs.h.configure
docs.configureP
- docs.wizard.1
- docs.wizard.2
- docs.wizard.3
- docs.wizard.4
- docs.wizard.5
docs.configureP2
docs.h.customize
docs.h.branding
docs.brandingP
docs.brandingP2
docs.h.languages
docs.languagesP
docs.h.editing
docs.editingP
docs.h.configRef
docs.configRefP
- docs.configRef.1
- docs.configRef.2
docs.h.deployContracts
docs.deployContractsP
# compile + copy artifacts the app/wizard use
npm run compile
# deploy to the network in your .env (RPC_URL + DEPLOYER_PRIVATE_KEY)
npm run deploydocs.deployContractsP2
docs.h.deployApp
docs.h.vercel
- docs.vercel.1
- docs.vercel.2
- docs.vercel.3
docs.h.docker
docs.dockerP
# build + run; with no .env it opens the setup wizard
docker compose up --build
# once you have a .env, pass it in:
docker run --env-file .env -p 3005:3000 dao-governancedocs.dockerP2
docs.h.vps
docs.vpsP
npm install
npm run build
npm run start # serves the production builddocs.h.checklist
- docs.checklist.1
- docs.checklist.2
- docs.checklist.3
- docs.checklist.4
- docs.checklist.5
docs.h.support
docs.supportP