New features and product changes, published on the day they ship. Written by Chainpy.eth,
Pick your theme, and pull requests that unfold
Light, dark, or the community's
A theme control now sits in the site footer, and beside the bell on mobile: Light (always light), Dark (always dark), System (match device), and — only on a page where the community ships its own CSS — Custom (community theme).
The site already followed your device's dark preference. Now the choice is yours, and it is remembered in that browser.
Your stored choice is applied before the page paints, so there is no flash of the wrong theme on load.
GitHub pull requests unfold in the feed
A post linking to a public GitHub pull request now renders a card rather than a bare host chip: owner/repo / pull N, a status of Open, Draft, Closed or Merged, the title, the opening of the description, who opened it and when, how many files changed, and +additions / −deletions with a bar in proportion. View PR ↗ opens it on GitHub.
The description keeps its shape — lists, code and paragraphs survive; headings flatten to plain text and images drop out. It is cut at a whole line, up to eight lines or 600 characters, rather than mid-sentence.
A private repository, a pull request that no longer exists, and a GitHub that doesn't answer within five seconds all fall back to the plain link card. A card that does load is cached for an hour.
A nudge to turn notifications on
Land a post with no email and no browser push connected, and a Stay in the loop card appears above it, linking to Set up notifications. Dismiss hides it for good — remembered per wallet, so a second wallet on the same browser is still asked once.
Communities behind an invite, and a trust graph to see through
Confidential communities
Creating a community now has a third step, Access: Public, which anyone can find, or Confidential, which only invited wallets can find. The choice is permanent.
A confidential community doesn't appear in Discover, in search, in the home feed, on the landing page, in link previews, or through the public API — to anyone without access.
Someone without access opening /h/<name> gets Invite only rather than the community.
An admin can't remove a member. A member can leave on their own, which drops their access until they are invited again. Whoever controls the community's name always has access, invite or not.
Invites
Community settings gains an Invites section: paste wallet addresses one per line or drop a CSV, up to 50 at a time, and get one link per address. Each link is single-use and bound to the wallet it names — forwarding it gets the recipient nowhere.
Each invite shows as Pending, Joined or Revoked, and one that hasn't been used can be Revoked.
Opening an invite shows You're invited, naming the wallet that has to sign in to accept it. A used, revoked or unknown link says which.
The account menu has a new Confidential entry at /confidential: invites you've been sent and communities you've joined, each with Leave.
Joining on trust instead of an invite
A confidential community's admin can point it at a trust list and set a Minimum score between 0 and 1. Wallets at or above it can read and post without an invite, and the gate page reads Members only rather than Invite only. Turn off removes it again.
Banners at first paint, registrar links that resolve
A profile whose Name sets a banner flashed the generated fallback banner on a hard refresh, and sometimes stayed on it — a banner already in cache, or one written inline as a data: image, finished loading before the page's JavaScript was ready to reveal it. The configured banner is now shown from the first paint, with no JavaScript involved.
The prompt offering you a name after you comment linked its free names to https://freename.id.wei and https://freename.id.gwei, which no browser can resolve, and its paid names to a stale wns.id and a parked gns.xyz. Free and paid both now point at wei.domains and gwei.domains, alongside app.ens.domains for .eth.
One Name, and a profile behind it
Choosing your identity
Settings → Names opens with an Identity section. One verified Name is your identity here: it names your posts by default, and it supplies the picture, banner, bio and links on your profile.
The per-name Make default buttons are gone — the identity picker replaces them. Picking a Name is a click; nothing is signed.
The first row is Primary Name — whatever this wallet reverse-resolves to onchain, across ENS, WNS (.wei), GNS (.gwei) and HNS. Leave it selected and your identity follows the chain. Refresh Primary Name re-reads it if you have just changed it elsewhere.
For a .hns Name you hold, Set as primary onchain writes this wallet's HNS reverse record from the same row, so the chain agrees with what you see here.
If a check can't reach the chain, the selected Name shows Temporarily unavailable and keeps being used — it no longer silently falls back to your address. A Name you have actually lost control of does fall back to your Primary Name.
Your Name profile
Your public profile at /u/<address> now renders the picture, banner, bio and links held in your identity Name's text records.
Pictures and banners can point at an HTTPS URL, an IPFS or IPNS URI, an inline data: image, or an NFT you own (eip155:…/erc721:…), which is checked against the token's owner before it is shown. Resolved media is cached for an hour.
With no banner record, your profile gets a faceted banner generated from your Name — the same one every time, different from anyone else's.
Website, X, GitHub and Farcaster records become buttons under your bio.
Settings → Profile is now two sections. Name profile edits those records: Preview resolves a picture or banner before you commit, and each is one onchain transaction for that one record. is the longer Markdown block as before, stored here rather than onchain.
Feed titles keep their last word
An RSS item with a title longer than 100 characters was cut at exactly 100, mid-word — "…the governance propos". Auto-generated titles now finish the word that straddles the limit, up to a 120-character ceiling.
A feed item with no title of its own, whose page title ran past 100 characters, used to be rejected outright rather than shortened. It now posts with a trimmed title.
Titles you type yourself are unchanged, still capped at 100 in the form.
Votes from a linked wallet say so
A vote cast from a wallet you have linked to a primary one is recorded, but carries no weight in any mode — that is by design, and it was invisible. The arrow lit up, the score didn't move, and in Count mode it flickered up and back as the server's answer arrived.
Voting from a linked wallet now explains itself once: the vote is recorded, it moves no score on its own, and it is your primary wallet that counts. Manage links in Settings → Linked wallets.
The score no longer jumps optimistically for that voter afterwards, so it stops flickering.
Replying under a Name
The comment box asks Comment as / Reply as only when you have two or more verified Names to choose between. With one Name, or none, it just posts — replies used to have no picker at all, and top-level comments always showed one.
Comment on a post without a verified Name and, once it's posted, you're offered somewhere to get one: the free .wei and .gwei names, or the paid .eth, .wei and .gwei registrars.
Notifications by email and push
Choosing what reaches you
Settings has a Notifications tab at /settings/notifications: a grid with each kind of activity down the side and each channel across the top — In-app, Email, Push.
In-app is on for everything unless you turn it off; email and push start from a default set per activity. Switching an activity off for In-app hides it from the bell and from your notifications page as well.
A channel you haven't connected shows Not connected, and its boxes stay greyed until you do.
Email
The separate Email settings page is gone. Your address now lives as a card on the notifications page, and links to /settings/email no longer resolve.
Your address and its verification state are held by the notification service rather than by holders.vote, and the verification mail comes from there. The link expires in 24 hours, and the settings page watches for the confirmation itself while one is pending — so opening the link in another tab, or on your phone, flips the card to Verified without a reload.
Addresses saved before this change were not carried over. Enter yours again if you want email.
Browser push
A Browser push card sits on the same page. Connect asks the browser for permission and turns push on for that browser on that device; Disconnect turns it off again. Connect in each browser you want notified.
holders.vote can now be installed to a home screen and opened as its own app, without browser chrome. On iOS that is also what makes push possible at all.
What you're notified about
Comments on your posts, replies to your comments, and votes on your posts and comments — reaching you in-app, by email, or by push, according to the grid. Your own activity still never notifies you.
Publish an RSS feed into a community
Linked feeds
Community admins can link up to five RSS or Atom feeds in community settings. Each new item that appears afterwards is published into the community as a link post — the item's title, its URL, and the opening of its summary as the body.
Items already in the feed when you link it are marked as seen rather than imported, so linking a long-running blog doesn't flood the community with its back catalogue.
Feeds are checked every 15 minutes, and at most five new items per feed are published per check, so a feed that publishes a burst catches up over a few rounds instead of all at once.
Automated posts are attributed to the admin who linked the feed, and count against that admin's normal posting rate limit.
Each linked feed shows its title, when it was last checked, and the reason if the last check failed. Remove a feed and the posts it already made stay put.
A feed URL has to be a public http/https address without embedded credentials, may redirect at most three times, and has to answer within five seconds with under 2 MB — a URL that isn't a readable feed is refused when you link it, with the reason shown.
Feed defaults, and a searchable token picker
Home feed
The feed now opens on New, across All tokens, weighted by Count.
"All" is only offered under New. Best, Hot, Top and Rising rank posts by how much of a token the voters hold, and balances in two different tokens are not comparable — so with All selected those four sorts are greyed out, with a tooltip pointing you at a single token, and the weighting is fixed to Count.
Choosing a specific token now survives a change of sort, instead of snapping back to All.
This supersedes part of the 2026-07-17 entry: your favorite token no longer decides the default on its own. It is used when it makes sense for the current sort, and otherwise the sort's own default applies — All under New, ETH elsewhere.
Picking a token
The token dropdown has a search box, focused as soon as it opens, so a long list can be narrowed by typing.
Options can be ordered A–Z or Z–A, and every token you have favorited carries a heart.
Chrome and mobile
The header stays pinned to the top of the window as you scroll, on both desktop and mobile.
The composer's post-type tabs (Discussion, Link, Problem, Solution) now fit a phone screen instead of overflowing it.
Fixed the mobile header being drawn narrower than the screen, and tooltips being washed out or clipped in dark mode.
Primary names beyond ENS
Your primary name
Your primary (reverse) name is now looked up across ENS, GNS (.gwei) and WNS (.wei), in that order, rather than ENS alone — so a .wei or .gwei primary name shows up in the header, on your public page at /u/<address>, and in linked-wallet settings, and is stored with your session when you sign in.
The safety check is unchanged: a reverse record is only trusted when the name resolves back to your address. Without that, the address is shown.
Writing
A link post whose URL isn't valid now says so under the field. Until now the Post button was simply disabled, with nothing to explain why.
Presentation
The supporter check-mark seal announced on 2026-07-20 has been removed, and no longer appears next to author bylines or community handles. The Owner pill described in that same entry is unaffected.
Webhook signatures, and Discover scope
Webhooks — receivers need updating
X-HV-Signature is now an HMAC-SHA256 of <X-HV-Timestamp>.<raw request body>, rather than of the request body alone, so a captured signature can no longer be replayed under a fresh timestamp.
If you already verify our webhook deliveries, update your check — signatures computed the old way will no longer match. The OpenAPI spec and the reference at /docs/api describe the new form.
The post payload now documents title as nullable: it is null for a post its author has deleted.
Discover
The All / Mine scope toggle and the filter URL parameter now always agree, so the toggle reflects the page you are actually on — and sharing or reloading a ?filter=mine link keeps that scope.
Notifications
A bell
When you're signed in, a bell in the header carries a red count of what's new — on desktop and on mobile.
You're notified when someone comments on your post, replies to your comment, or votes on your post or comment. Votes are grouped per post or comment ("received 3 upvotes") rather than listed one by one. Your own activity never notifies you, and hidden, removed, or deleted content is left out.
Each row opens the post, scrolled to the comment in question. The panel holds the 30 most recent items, newest first.
Opening the panel marks everything up to that moment as read. The mark is kept on your account rather than in the browser, so it follows you between browsers and devices. A first-time account sees the last seven days.
Signing in
Sign-in now starts with a choice — Use this device, for a wallet in this browser or a hardware wallet, or Use another device, for the six-digit pairing code added on 2026-07-24 — instead of going straight to the wallet modal.
Fixed a flash of the wrong screen during device pairing.
Simpler visibility filters
On or off
A community's two visibility filters — "has an ENS name" and "has a non-zero balance / voting power" — are now a simple checkbox each, instead of a three-way Ignored / Required / Forbidden dropdown.
The old "Forbidden" setting inverted a filter: it hid every author who had an ENS name, or had tokens. That was the opposite of what the filters are for, so it has been retired. Any community still set to Forbidden now has that filter switched off.
The settings copy no longer claims filters hide content "by default" — both filters start off, and an admin has to turn them on.
poidh bounty embeds
Link posts
A link post pointing at a poidh bounty now shows the bounty inline on the post page: its title, the reward in ETH and dollars, which chain it lives on, who posted it, and the opening of its description. A status pill says whether the bounty is open, in voting, or finished.
The bounty is read when the page renders and refreshed every few minutes, so the status stays current without any third-party script running in your browser. If poidh is unreachable the post falls back to the plain link it showed before.
Embedded tweets now appear on phones too — until now the tweet on a link post only showed on desktop.
Mobile, and signing in across devices
A mobile layout
Below 720px the site now has a layout built for a phone: a bottom tab bar (Feed, Discover, Create, You), a compact header, purpose-built post cards and post view, mobile community chrome with the info rail folded in, a mobile Discover list, and a settings nav that fits a narrow screen. The desktop layout is unchanged.
The footer's About links (How it works, Change log, API, Privacy, Feedback) appear as an end-of-page strip on mobile instead of the desktop footer bar.
Signing in across devices
You can now sign in on a device that has no wallet by pairing it with one that does. One device shows a six-digit code, the other enters it and signs — and it works in either direction, so you can approve a desktop sign-in from your phone or the reverse. Codes expire after five minutes and are single-use.
Pairing lives in the sign-in modal; the old /signin/pair page redirects into it.
Profiles
A profile page now lists the names that account has posted under, and its posts can be filtered to any one of them.
Fixes
Fixed the header still showing you as signed in after you revoked your own session.
Images, sharing, and sessions
Images in posts
Post bodies now take images: drag one onto the composer, paste it from the clipboard, or pick a file. The image uploads directly to our storage and the Markdown is inserted at your cursor, showing a placeholder until the upload finishes. PNG, JPEG, GIF, and WebP up to 10 MB.
Any image in rendered Markdown opens fullscreen when clicked, and closes on the next click, Escape, or a tap on the backdrop.
Sharing
Posts and comments now carry share buttons — X, Farcaster, Telegram, and copy link — on the post page, in comment threads, and on profile pages. Feed cards are left uncluttered.
A comment's share link opens the post scrolled to that comment, with the comment highlighted.
Sessions
Settings → Sessions lists every active sign-in for your address, with when it started, when it expires, and the browser it came from. Revoke any one of them, or all the others at once; revoking the current one signs you out.
Speed
Signing in resolves your primary ENS name once and stores it with the session, so /api/auth/session no longer reads the chain on every hit — and the home feed no longer refetches the session for each post card as you scroll.
The attestation worker only reads the attester balance after it actually attests something, instead of on every idle heartbeat.
Linked wallets, Robinhood Chain, and tweet embeds
Linked wallets
A signed-in account can link other wallets to it from Settings → Linked wallets, proving control of each by signing a statement with that wallet. From then on a linked wallet's balance and voting power count toward the primary on every new post, comment, and vote, and the linked wallet reads as zero on its own.
Under Count-based weighting a linked cluster is one head rather than one per wallet.
What each vote contributed is frozen when it is cast, so removing a link subtracts exactly what it added, and votes cast before linking keep their weight. Either side of a link can remove it.
Moderating comments
A moderator's Hide and Remove controls now sit inline on a comment, grouped behind a divider and separated from the author's own Edit and Delete, instead of hiding behind a popover menu that made the two sets of actions easy to confuse.
Setting up a new community
Creating a community now lands on a welcome screen that walks through the first four steps — write a description, point at a stylesheet, set onchain admins, add moderators — each linking straight to the right settings section. Only the community's admins see it.
Diagnostics
A /diagnostic page inspects any ENS, WNS, GNS, or HNS name: the normalized name and namehash, which resolver contract is used and where that came from, ownership, and the text records holders.vote reads.
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.
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.
Fixed excess RPC calls when reading voting power.
Fixed the QR code shown when connecting a wallet.
Choosing a trust graph
Settings → Trust graph lists the graphs available, each with its description, algorithm, root count and vouch count, plus None to opt out. Picking one is a click — nothing is signed.
Vouching
Other people's profiles carry a Vouch button. Vouching is one wallet signature, or one transaction where the graph lives onchain; your wallet is switched to the graph's network first, by name, rather than failing on a mismatch.
A vouch you've made reads ✓ Vouched, and hovering it offers Withdraw. While the graph catches up it reads ✓ Vouched · counting….
The graph keys on plain addresses, so linked wallets are guided rather than silently rewritten: vouching from a linked wallet says the vouch would carry no weight and points at your primary, and a profile that is itself a linked wallet points at the primary's profile.
With no graph chosen, Vouch is disabled under Choose a trust graph first.
The trust lens
With a graph chosen, posts and comments are shaded by their author's standing in it — full strength for people the graph trusts, faded for people it doesn't know. Nobody disappears: an unknown author still renders, just dimmer.
It covers the feed, post pages and comment threads, and keeps up as you scroll.
A pill at the bottom left names the lens in use and links to the setting. Change your graph and open pages re-shade themselves without a reload.
Signed out, no graph chosen, or a graph server that can't be reached: the page renders exactly as it would have, unshaded.
Save
About
Editing needs the wallet that controls the Name, on the right network — the page says which, and offers to switch. A free .hns Name still held in holders.vote custody is saved through custody instead, with no wallet transaction: the button walks through Queueing → Submitting → Confirming.
The bio is capped at 160 characters, and an inline data: image shows its size against the onchain byte limit as you paste.
Names in more places
Search results, the search box previews, moderator lists, the hv admin list in community settings, mod-log actor filters, linked wallets, the settings header and the account button all show a Name where there is one and a short 0x1234…abcd address where there isn't — one format everywhere, resolved from your identity rather than looked up per render.
Posts and comments keep the Name they were posted under. Changing your identity changes what you are called from now on, not what you were called then.
Settings copy now says Name throughout, rather than treating ENS as the only kind.
Sharing
The row of share icons is now a single Share button that opens a dialog: X, Farcaster, Telegram, WhatsApp, LinkedIn, Reddit and Email, plus More for your device's own share sheet where the browser offers one.
The link itself sits at the bottom of the dialog, shortened for display, with a Copy button that confirms.
Sharing a comment now carries the post's title in the shared text, and on a phone, opening a link to a specific comment scrolls to it and highlights it — it used to just drop you at the top of the post.
A vote notifies once, when someone first votes. Changing or withdrawing a vote is silent.
All your notifications
A notifications page at /notifications, reachable from See all notifications at the bottom of the bell. It loads 30 at a time as you scroll, with a Load more button if you would rather click.
Unlike the bell added on 2026-07-28, it isn't capped at the 30 most recent or the last seven days — it goes back over everything. Votes are still grouped per post or comment.
Names
Signing in now adds every primary name that checks out — ENS, WNS (.wei) and GNS (.gwei) — to Settings → Names for you, so they can be picked as a posting alias without your verifying them by hand.
A free .hns name bought here is added the moment the order completes, and counts as yours to post under while it is held for you — so buying a name and posting under it no longer needs a separate verification step.
Fixed a .hns registration reporting your commitment as unconfirmed after it had in fact been mined, which left the order stuck at Sign commitment.
A name check that fails because the chain is unreachable now says verification is temporarily unavailable, instead of telling you the name looks invalid.
On a phone
Checking a name on /create now fits a phone: one tab per service (ENS, WNS, GNS, HNS), each with a dot showing at a glance whether that ending is free, taken, or already yours, and a single panel and action button for whichever tab you're on.
A /h/<name> address for a community that doesn't exist yet now offers to create it from any of its pages, rather than showing a 404 on all but the main one.
Custom CSS
The example stylesheets linked from /how-it-works#custom-css were styling the community header as a full-width masthead, a layout that no longer exists — so a community pointing at one of the hosted examples got a boxed header inside the side rail. They now style type and colour only, and pick the fix up automatically.
The kitchen-sink example coloured vote scores through .hv-vote-score.is-up and .is-down, which never matched anything. The real states are .is-positive and .is-negative.
The selector reference is regrouped by area, and now says which hooks survive on mobile: the design tokens and the data-hv-* attributes apply on both layouts, while the community rail and the feed-card structure are desktop-only — wrap structural rules in @media (min-width: 721px).
.hv-post-excerpt, .hv-tag-link and .hv-eyebrow are no longer listed. Nothing renders them, so rules written against them were already doing nothing.
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.