GovMind is a dark, futuristic DAO governance demo that shows how proposals can be submitted, analyzed, reviewed, and ranked using a real GenLayer deployment.
DAO voters often need to review proposals that are long, unclear, risky, or missing supporting evidence. GovMind explores a workflow where an AI-assisted governance layer can help voters understand:
- Whether a proposal has enough context
- What benefits and risks it introduces
- Whether the treasury impact looks reasonable
- Whether the proposal may need revision before a vote
- How contributor reputation could appear in a governance dashboard
GenLayer is designed for intelligent contracts that can use AI and web data as part of contract logic. GovMind is structured around that idea:
- Proposals can include an evidence URL.
- The contract layer fetches evidence with
gl.nondet.web.get(). - The contract layer analyzes proposal quality with
gl.eq_principle.prompt_non_comparative(): every validator, not just the leader, independently fetches the evidence URL and runs its own LLM call, then judges its own result against an explicit criteria string (does the recommendation fit the actual proposal and evidence, is it specific rather than generic, etc). Consensus requires validators to agree the criteria is met, not just that a leader's output parses into the right JSON shape. - Each proposal can be analyzed exactly once. The AI analysis is locked in on-chain the first time
analyze_proposalsucceeds, so it can't be overwritten or re-rolled later. - Reputation is only granted once per proposal, and only for
APPROVEorNEEDS_REVISIONrecommendations — outcomes that reflect the proposal had real merit or a fixable idea.REJECTandINSUFFICIENT_CONTEXTearn nothing, so reputation can't be inflated by submitting proposals that produce some analysis regardless of quality. submit_proposalrejects titles, descriptions, and evidence URLs outside fixed length bounds, and stored analysis fields (summary, benefit/risk lists, etc) are clamped to fixed size limits after validators agree.
Validators judge the recommendation against explicit criteria via their own independent LLM call, which is a real improvement over structural-only checking, but this is still an AI-assisted signal, not a formal proof of correctness — treat analyze_proposal output as input for human DAO voters, not as ground truth.
- Home page with DAO overview
- Submit Proposal page with browser wallet connect support
- AI analysis result after proposal submission
- Dashboard that reads proposals from the service layer
- Proposal Details page that reads one proposal from the service layer
- Leaderboard that reads user reputation
- Real browser wallet connection via
window.ethereum - GenLayer service fully integrated with
genlayer-js - Beginner-friendly contract draft in
contracts/GovMindContract.py
- React
- Vite
- TailwindCSS
- JavaScript
- Python intelligent contract draft
govmind/
contracts/
GovMindContract.py
public/
src/
components/
AppLayout.jsx
config/
genlayerConfig.js
pages/
Dashboard.jsx
Home.jsx
Leaderboard.jsx
ProposalDetails.jsx
SubmitProposal.jsx
services/
genlayerService.js
App.jsx
index.css
main.jsx
.env.example
package.json
README.md
From the project folder:
npm installnpm run devThen open the URL shown in your terminal. It is usually:
http://127.0.0.1:5173
The service file is:
src/services/genlayerService.js
Create a local .env file from .env.example when you are ready to configure environment values:
VITE_GENLAYER_CONTRACT_ADDRESS=
VITE_GENLAYER_RPC_URL=Later, the real deployed GenLayer contract address will go here:
VITE_GENLAYER_CONTRACT_ADDRESS=your_contract_address_hereThe GenLayer RPC URL will go here:
VITE_GENLAYER_RPC_URL=your_rpc_url_here- Click
Connect Walletto connect your browser extension wallet (e.g. MetaMask). - Go to
Submit Proposal. - Fill in the proposal form.
- Submit the proposal.
- The app calls the service layer which prompts your wallet to send a real transaction to the GenLayer network.
- The AI analysis result appears on the page.
- Go to
Dashboardto see proposals from the service layer. - Go to
Proposal Detailsto inspect a proposal. - Go to
Leaderboardto see user reputation data.
npm run devStarts the local development server.
npm run buildCreates a production build.
npm run lintRuns ESLint.
npm run previewServes the production build locally.
These steps outline how to deploy the contract:
- Review and test
contracts/GovMindContract.pyin a GenLayer-compatible environment. - Deploy
GovMindContractto a GenLayer network. - Add the deployed contract address to
.env. - Add the GenLayer RPC URL to
.env. - Test proposal submission, analysis, proposal reads, and reputation reads against the deployed contract.
GovMind is a fully functional GenLayer integration:
- Real browser wallet connection (
window.ethereum) - Intelligent GenLayer contract (
GovMindContract.py) with Web Fetch and LLM prompt integration