New features and product changes, published on the day they ship. Written by Chainpy.eth,
Robinhood Chain, and tweet embeds
A fourth chain
Communities can now be anchored to Robinhood Chain, alongside Ethereum, Optimism, and Base. Pick it when creating a community and voting power is read from that chain exactly as on the others — an ERC-20 balance, an NFT count, delegated votes, or the native ETH balance.
Robinhood-anchored communities carry their own chain badge wherever the others do: Discover, the home feed, and community headers.
Link posts
A link post whose URL points at a tweet now shows that tweet inline on the post page. Both x.com and twitter.com links are recognized; every other link post looks exactly as it did before.
The tweet is fetched when the page renders, so no third-party widget script runs in your browser. A tweet that has since been deleted or made private shows a small placeholder card in its place.
Clearer errors and tidier empty states
Errors
When an action fails with an otherwise-unrecognized error, the modal now shows the underlying readable message (pulled from a viem error's error, shortMessage, or message) instead of a flat "Something went wrong", and the expandable technical details include the raw error field.
Presentation
Empty-state cards across Discover, search, the mod log, settings, profiles, the change log, and the start page now have real spacing between the message and its call-to-action button.
Supporter seals, and Discover scope
Adding supporter seal
A small accent-green check-mark now appears next to accounts supporting holders.vote — both author bylines and community h/<name> handles — marking it as a holders.vote supporter. Subdomains and other name services are excluded temporarily.
A post or comment where the author's identity matches the community's name, is marked as the owner: the merged home feed collapses the repeated "h/x.eth · x.eth" into "h/x.eth Owner", and other views add an Owner pill next to the author.
Discover
The All/Mine scope toggle and the sort controls are now visually separated, so switching scope no longer looks like part of the sort.
Elsewhere
A community with no description now shows a placeholder in its info rail — with an "Add a description" link for admins — and descriptions render as Markdown.
Link previews now describe the site as anchored to ENS, WNS, GNS, and HNS names.
Composer previews, favorites, and My Communities
Writing
Post and comment composers gained a Preview / Edit toggle, so you can see the rendered Markdown before publishing.
Discover
An All / Mine scope toggle (reached from the account dropdown, /discover?filter=mine) surfaces the communities you created or moderate.
Home feed
When you're signed in, the feed now defaults to your favorite token (set in Settings → Favorites), falling back to native ETH when you have none or your favorite no longer backs a community.
Chrome
The community info rail now defaults to open and remembers whether you last left it open or closed, persisted per browser.
Added a Feedback link to the footer.
Fixes
Fixed the vote arrows showing a previous account's vote after signing out and back in as a different wallet; vote state is now recomputed for the new identity.
Content attestations, and search
Onchain content attestations
Authors can opt in (unchecked by default) to attest a post or comment onchain via the Ethereum Attestation Service on Base.
Attribution comes from the author's active SIWE session; holders.vote's attester key signs the EAS attestation. No extra wallet transaction is asked of the author at publish time.
History is append-only (create / edit / retract). The UI shows Attesting → Attested (with an EAS Scan link) → Failed, and authors can retry a failed attestation.
Search
A search bar in the top nav searches posts and comments. Results open on /search, and can be scoped to a community or filtered to attested content only.
Typing a query on a community feed redirects into search scoped to that community.
Community page and chrome
Community rail restore control is labeled with h/<name> so the closed panel is easier to find.
Moderator pin / lock / hide / remove actions ask for confirmation before running.
HNS names
A fourth name service
.hns names now work everywhere .eth, .wei, and .gwei do: a community can be anchored to one, and a verified .hns name can be used as a posting alias. Admin eligibility is read from the HNS registry, and the hv text record lists extra admins there just as it does on the other services.
The HNS registry is live on mainnet, so .hns names resolve through the deployed registry.
Webhooks
Per-community outbound webhooks
Community admins can set three webhook URLs in community settings — one each for new posts, new comments, and votes. When the event happens, holders.vote POSTs the event's JSON to that URL.
Every delivery is signed with a per-community secret (HMAC-SHA256, sent as X-HV-Signature alongside X-HV-Timestamp and X-HV-Event) so a receiver can verify the request really came from us.
Each webhook has a Test button that sends a sample payload of the right shape, so you can wire up a receiver before any real activity arrives.
The payload shapes are documented in the OpenAPI spec and rendered at /docs/api.
A documented read API
Reading through the API
The /api/v1 API now reads, not just writes. GET /api/v1/posts?community=<name> lists a community's posts with the same sort, filter, and metadata as the feed, and GET /api/v1/posts/<id> returns a post with its full comment tree. Both need a key with the read scope.
The whole API is now documented with a machine-readable OpenAPI spec published at /openapi.yaml, and rendered as an interactive reference at /docs/api (linked from the footer) where you can paste your own API key and send live test requests to every endpoint.
Profile settings and an API
Your account
Signed-in users now have a Settings area to manage their account.
Write a Markdown profile that appears on your public page at /u/<address>.
Verify an email address against your account. It is kept private and nothing is sent to it yet.
Shortlist favorite communities and tokens.
Posting under a name
Prove you control an ENS (.eth), WNS (.wei), or GNS (.gwei) name, then choose to post or comment under it as an alias — picked per post. Your wallet address is always recorded alongside, and control is re-checked onchain when you post, so losing a name stops you posting as it.
API keys
Generate API keys to read and write — create posts and comments and cast votes as your address — through a new /api/v1 endpoint. Keys are read-only unless you opt into writing, can be given an expiry, and can be revoked at any time. They share your normal rate limits, and the key itself is shown only once.
Reliable voting power for Compound-style tokens
Snapshots
Fixed posting, commenting, and voting in communities whose token uses Compound/Bravo-style delegation (for example Nouns). Historical voting power is now read by pinning the call to the snapshot block, instead of asking the token for a past timepoint — which reverted at the latest block and blocked the action.
When voting power genuinely cannot be read, the action now fails with a clear message instead of silently recording zero weight.
Community info in a side panel
Layout
A community's identity, stats, actions, and description now sit in a collapsible right-hand panel, giving the post feed more room.
WNS and GNS names
Community names beyond ENS
Communities can now be anchored to .wei (WNS) and .gwei (GNS) names, alongside .eth names.
The create form accepts any of the three, and admin eligibility for a .wei or .gwei name is read from that name's own registry rather than the ENS registry.
The hv text record still works the same way on all three, so extra admins can be listed on the name regardless of which service it comes from.
Public change log
Developer-editable release notes
Added this public change log at /change-log.
Entries are managed by developers in this Markdown file, so shipped features can be explained without adding database-backed publishing tools.
Custom community styling
Per-community CSS
Community admins can add custom CSS from the community settings page, so a community can carry its own look instead of the default theme.
The how-it-works page documents what custom CSS can and cannot do, with examples.
Number formatting and snapshot polish
Vote weights
Vote weights and voting power below 1 now round to one significant digit instead of collapsing to 0.
Fixed formatting of native gas balances used as voting power.
Voters with zero voting power now see their 0 weight rather than a blank.
Presentation
The snapshot block on a post is now a card, with corrected margins.
Added a favicon.
Broader NFT support
Voting power sources
Added support for Compound-style NFT contracts as a voting-power source.
Fixed detection of whether an NFT contract supports ERC721Votes, so communities anchored to plain NFT collections configure correctly.
Voting reliability
Fixed an error that appeared when casting a vote before the signature completed.
Community settings and filters
Community settings moved behind a gear icon in the community header.
Fixed the visibility filter checks, so the "has an ENS name" and "has non-zero voting power" rules apply as configured.
Landing page and link previews
Landing page
Overhauled the landing page, with a redesigned card layout, sorted content, and a mobile layout that works on small screens.
Sharing
Added Open Graph images and descriptions, so links to communities, posts, and Discover render as previews when shared.
Posts now show a byline and description.
Numbers
Vote counts and voting power display to three significant figures.
Fixed a flash of unformatted decimals while values loaded.
Post types and moderation log
Post types
Posts can now be created as links, problems, or solutions, each with its own badge, in addition to plain text posts.
Link posts show the title of the linked page.
Moderation
Improved the moderation log so removals and restorations are readable and attributed.
Discover and Markdown
Discover
Added /discover, a directory of all communities on the site, with the chain logo shown for each.
Posts and comments
Posts and comments render Markdown.
Removed the redundant network button and address display from the community header.
Initial release
Communities
Launched holders.vote: communities anchored to ENS names at /h/<name>, with posts, threaded comments, and up/down votes weighted by onchain token, NFT, or native gas holdings.
Sign-in with Ethereum, community creation by the ENS name's admin, and per-community visibility filters with a reader-side toggle to reveal hidden content.
Communities display their token symbol.
Comment sections can be sorted.
Fixes
Fixed comment counts decrementing incorrectly after a moderation action.
Fixed navigation state not updating between pages.