Blind Dev article
Moni sites: what breaks for screen readers and how to fix it
A practical accessibility review: navigation, forms, semantic structure, and focus.
Based on Blind Dev personal experience and source posts; verify current details before applying.
Full English translation of the Teletype article published on 2025-10-24. Observations, estimates and technical claims describe the interfaces at publication time; this is not a new assessment of their current state.
Accessibility in web3 and fintech interfaces is still rarely treated as a mandatory part of the architecture. Most attention goes to visuals and functionality, while use without a mouse or a screen remains outside the focus. In this review, I examine Moni’s accessibility from a blind user’s perspective (I am blind myself), while offering specific technical recommendations that could improve the interface’s overall usability.
Introduction: improving accessibility
- Use
aria-label="Name"on elements where the design does not allow visible text. - To position focus, use
tabindex=-1and.focusin JS. - Separate page sections with h2 and h3 headings. This makes navigation easier.
Main website
Some buttons on the getmoni.io homepage also lack labels (apparently they are just icons), but this is not critical:
- Clicking them does nothing.
- This is an informational website.
For example, the buttons below “Alpha Reports” and the “Learn More” link (I mean their position in the HTML, not visually). They are also above the “MONI API” heading. Similar buttons appear below “LOVE IS MONI”.
On the Noti bot page, information is marked as headings from “Why choose Noti Bot?” to the “Add Noti to your group” link; from “➕” to the “Play” button; and from “Step 1” to “FAQ”.
Listening to text is very inconvenient when every line is a heading.
It sounds something like this:
heading level 1 Why choose Noti Bot? heading level 1 We get it—building a community before launch is tough. Noti Bot helps you boost virality, heading level 1 engagement, and hype. heading level 1 Alert received –> FOMO kicks in –> Community hype ignites heading level 2 Your community won’t miss a post from your Twitter account, increasing engagement for all heading level 2 participants.
The Moni extension page has a similar issue.
Extension

- Below “Dark Theme” there is another, unnamed button. Its purpose is unclear: it is an extra element that performs the same action. The same applies below “Sidepanel”.
- There should be a search button below “Check account”, but there is not. There is an element announced as “clickable”, but it has no description, making it harder to understand (elements announced as “clickable” do not always perform an action).
- Next comes a link containing a button and a graphic, followed by a list of five undescribed buttons. What they do is unclear.
- “Clear” in the search history is accessible: good.
- On an account’s page in the extension, below the X username, an undescribed button opens a choice between trusted account and scam account. It would be better to call it “rate” or something similar. There is a screenshot below the list; I hope it makes clear what I mean.

More on project data:
There are strings like “Smarts244+1”. Please always separate words with spaces. This particular case is fine, but sometimes it causes problems. For example, percentages on Debank are difficult to listen to because their numbers run into the balance numbers.
Everything else here is good.
The only thing I would like is to see Moni score data when visiting a project’s website, if the project is listed in Moni.
For example, I visit coredao.org and open the extension: the Moni score for its X account would immediately be visible.
Something similar could work when visiting X profile pages.
Extension data on Twitter pages
- Put Moni Score inside or next to the “Discover” button, rather than below the name and the “Provides details about verified accounts.” button. Also describe the account-rating button (with rating information and “Trusted account” / “Scam account” buttons). Currently I have to discover its purpose by trial and error.
- In the line showing the number of smarts and mentions by smarts, separate the number from the word Smart.
- Above the username in the tweet list is another unlabeled button that opens the extension. I suggest “Moni aX ccount data” or something similar. Above “More” there is a rating; describe that too.
Screenshot:

That is all for the extension.
The discover.getmoni.io website

Immediately below the name and what I assume is the logo, there is an undescribed button. Its code:
<button type="button" class="baseButton_container__Le7T_ sideNavigation_collapseBtn__WKZuf sideNavigation_collapseBtnCentered__7vZJX"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" fill="currentColor" width="18"><path d="M14.89 13.656H5.75V12.25h9.14v1.406Zm0-3.515H7.86V8.734h7.03v1.407Zm0-4.922v1.406H5.75V5.219h9.14ZM2.235 11.962l2.518-2.524-2.518-2.525.992-.991L6.74 9.438l-3.515 3.515-.992-.991Z"></path></svg></button>
I never worked out what it does, but I would like it to have a description.
Other elements:
- Below the wallet-address button is another unlabeled button and a list of five buttons inside a link.
- In “Trending”, below the image with alt text “fire”, there are two buttons. Perhaps call them “Prev” and “Next”, although I noticed no difference after pressing them. Perhaps remove them from interaction and make them purely visual instead.
- For projects, both Curated and Raw, clicking “Manage filters” does not move focus to the settings. This is inconvenient. Perhaps use a modal window (
role="dialog"and other ways of identifying an HTML block). - The project list has columns, but they are presented as buttons. It would be great to use a normal HTML table with table, tr, th, td and so on. Keep buttons for sorting, but name the columns so users can tell which data belongs where. Without remembering the labels, the list becomes an incomprehensible mixture. Here is a single-line example:
2D552 +573 53 +52 20 +20 4.24K +4 095
As you can imagine, that is difficult to understand.
About Watchlist

In “New list”:
Above “List name” is a symbol-selection button; call it “Select symbol”. Above that is the close button; call it “Close”. Do the same in the filter settings, too.
In the list of lists:
- The list-deletion button has no description. Give it “Delete”, as you did with “Edit”.
- Rename “Edit” to “Edit name”.
On a list’s page:
- Below the change periods is a “Feed” button. I could not tell what it did, as I noticed no changes. It turned out to open a feed in a modal, but focus does not move there immediately, which is inconvenient.
- A table would be better here, too.
- The last control below an item is an unlabeled button that opens list management. Call it “Manage”. Clicking again does not hide the controls, which is also inconvenient: I have to press the down-arrow key to reach the next list item.
- This is more of a usability suggestion, but bulk selection using
input type="checkbox"for each list item would be great. Clicking “Manage” below the list could allow adding or deleting several accounts.
About Mentions Feed

There are unlabeled buttons in Trending here, too.
There is another unlabeled button next to profile search. Call it “Search” if it actually starts a search.
Filter management also needs a modal or focus moved to the opened controls. Change the table structure in the list and label the “Manage” button used to manage list membership.
Smart Tracker

An additional point: explain at the beginning how a watchlist differs from “Smart Tracker”. I did not understand at first. For example, a watchlist provides a feed of new posts and some other features, whereas this section monitors smarts and their actions.
Also rename “Edit” to “Edit name”, and name the close and symbol-selection buttons.
Categories are great! But I would like to select several rather than one at a time. I thought I could see accounts from Researchers, Hyperliquid Degens and AI Agents Degens together, but could not.
Also name the “Manage” button in the list.
Reports, Mindshare and Checker
The Reports page:

Everything is fine here. The only suggestion is perhaps to host reports on your own website to avoid depending on Notion. Notion is not very accessible either: in particular, automatic translation of all the text is unsupported, and there are other shortcomings.

Surprisingly, everything is good here!
The exception is merged data on the Categories tab:
L117.62%-1.93%
Please separate it with spaces. It is also unclear what the percentages mean. Again, a table might be better.
Everything in “Projects” is excellent, as it is in Chains.
The only thing is that Chains would also benefit from a table.
Perhaps explain the settings before the list and how to use them. It is unclear whether they are filters or something else, and why, for example, only a short list of blockchains appears for projects. I prefer how the homepage filter works.
The Checker page:

In “Top Queries” there are two undescribed navigation buttons that have no effect when activated with the keyboard.
Everything else is good.
Referrals

Everything on the referral-program page is accessible.
At least at this stage: balance-related functionality is unavailable because I have 0 invitees and $0.
If you read my channel and have opened this article, I would appreciate you using my referral link: https://discover.getmoni.io/?ref=ORKFDD
Premium

Below “Pay with referal bonuses” is an unnamed button. Its purpose is unknown.
Everything else here is fine.
The Alerts page

In the list, above the name and other data, there is an unlabeled button. I never understood its purpose because I could not detect any changes.
Next to “Edit” is what I believe is a delete button: give it the name “Delete”.
When editing with “Edit” or creating with “New Alert”:
- Give the close button a name.
- It would be great to turn list selection into
input type="checkbox". You can click and check the count above, but that is inconvenient, and not everyone will realize that is what they should do. - “Alert Types” is also a text list. I configured this a long time ago and no longer remember exactly, but I think there was a configuration problem: I had to ask sighted people to help me understand it. Again, something like the homepage filter controls would be better. Although, thinking back, I believe I ultimately left this list untouched.
- There is an unlabeled button next to ID. Indicate that it selects an ID from a list.
- When creating an alert on the “Smart Tracker” tab, there is an “Alert Types” section. Again, it is unclear whether pressing Enter selects anything. Use checkboxes or
input type="radio"instead.
Portfolio tracker
Let us look at accessibility on https://app.getmoni.io.

What should change:
- Add a table to make columns easier to identify.
- The last element in the list is an unlabeled button. Call it “Actions”.
- In the creation interface, also name the close and symbol-selection buttons.
- Creating a watchlist takes me to its page, which is inconvenient: I have to select Global manually to choose other assets. Search is completely inaccessible: I entered HYPE, and something seemed to appear on screen, but I could not reach or navigate it with the keyboard. This is very bad! Screenshot below.

More points:
- The first and last pagination buttons are unlabeled. Call them “First” and “Last”.
- At the very bottom is another unlabeled button. I did not understand its purpose.
- When creating a portfolio, also name the close and symbol-selection buttons.
- Next to “Share Portfolio” (before it in the HTML) is an unlabeled button. It opens options to edit, exclude from the total, and delete. Call it “Actions”.
- Below “Portfolio created. Add balance to get started.” is an unlabeled button. Call it “Add transaction”.
- In the token list opened with “Select token”.
- When searching by ticker, tokens are not sorted by market capitalization for some reason. For example, entering ETH returned ETH+ first, which is inconvenient. I would also like to set the market price by clicking a corresponding button next to the price field.
- The last element in the transaction list is an unnamed button. Call it “Actions”.
- In “Sorter” on the Coins tab, each option has two buttons. Call them “Desc” and “Asc”, respectively.
- Strings run together: “Ethereum$395.790.1 ETH100%+0%”. Separate them with spaces. A standard table would be even better.
Conclusion
Some Moni interface elements are implemented correctly, but a substantial proportion of its functionality remains difficult for blind users to use. Based on my observations, approximately 40–60% of the interface needs accessibility improvements.
Most of these problems are not architecturally complex. They mainly concern correct use of ARIA attributes, a logical heading structure, and keyboard navigation. Fixing them does not require rebuilding the entire product, but it substantially affects whether users can interact with it fully.
If a product targets a broad audience, accessibility should be treated as an engineering requirement, not an optional extra.
If you are interested in practical accessibility reviews and detailed web3 project analysis using the 4K+ method (team, concept, coin, code + practice), subscribe to my channel: https://t.me/blind_dev