| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A token- and badge-gated governance signaling app. A community runs "murmurs" (signaling rounds); eligible wallets allocate points across the options ("directions") in a round, and every allocation is recorded as a wallet-signed, publicly verifiable ballot. No funds are ever custodied or moved — the app only collects and tallies signed opinions.
Production: https://murmur.thedao.fund/
The repository has historically been named thedaolog; the product is Murmurations. You will still see thedaolog in a few load-bearing places that can't be renamed without an infra migration (the Postgres database name, the GHCR image names, and the deploy workflow). Those are intentional — see Naming.
There is no on-chain transaction to vote and nothing is spent — a ballot is a signed message, not a transaction.
Browser (React + wagmi/viem + RainbowKit) │ signs EIP-712 ballots / admin actions / option submissions ▼ /api (Fastify, Node) ──► Postgres (proposals + ballots) │ verifies every signature server-side │ reads token/badge balances over RPC to check eligibility ▼ Ethereum / L2 RPC (read-only: badge balanceOf, contract reads) Optional on-chain: a TallyCommit contract can anchor a finalized tally; ETHSecurity badge ERC-721s are the eligibility gate.
This app holds no funds, but it does make trust decisions off signatures and token balances. The parts worth scrutiny:
Known trust assumptions: admins are an allowlist; eligibility trusts the configured badge contracts; RPC reads trust the configured providers.
| Path | What it is |
|---|---|
| src/app.jsx | The entire SPA UI (rounds list, voting screen, direction detail, submit, admin). Large on purpose — it's the canonical UI source. |
| src/main.tsx | App entry: wallet provider, the wallet gate, role/badge derivation. |
| src/votingApi.ts | Client API wrapper + all EIP-712 type definitions (the signing schema). |
| src/eligibility.ts | Token registry + eligibility helpers. |
| server/api.mjs | Fastify API: proposals, options, ballots, signature verification, eligibility. |
| server/db.mjs | Postgres storage layer. |
| contracts/ | Badge ERC-721 + tally-commit Solidity. |
| scripts/ | Deploy/mint/migration utilities. |
| tests/ | Vitest suite — tests/server (API) and tests/client (UI + helpers). |
| public/ | Static assets. |
| API.md | Public read-API reference. |
| TESTING.md | How the test suite is structured and run. |
| DEPLOYMENT_GHCR.md | How production builds/deploys (GHCR images → VPS). |
Note: source-jsx/ and build-app.mjs are a legacy build path. The live app is built directly from src/ with vite build; edit src/app.jsx, not source-jsx/.
Requirements: Node 20+, pnpm, Docker (for Postgres).
pnpm install
pnpm db:up # starts Postgres in Docker
pnpm server # API on http://127.0.0.1:7101
pnpm dev # web on http://127.0.0.1:7100 (proxies /api → 7101)Open http://127.0.0.1:7100. Configuration is via .env (see .env.example) — DATABASE_URL, RPC URLs, and the admin allowlist.
pnpm test # full suite (server + client)
pnpm test:coverage # with coverageSee TESTING.md for structure and mocking notes.
The product is Murmurations. The name thedaolog survives only where a rename would be an infra migration rather than a cosmetic change, and is left intentionally:
Everything user-facing and in-app already reads as Murmurations. The EIP-712 signing domain is murmurations, so the branding and the cryptographic identity already agree.
| Back | FazBrowse Home | New Git URL |