Now building, open source, Ghana
Every student in Ghana deserves to navigate the web on their own terms.
Extabilify is a free browser extension that reads the page aloud, takes voice commands, and repairs the structure of sites that were never built for a screen reader. It can also run a multiple choice test hands free.
Example: answering a test question by voice
- Extabilify
- Question 2 of 5. The Volta River is dammed at which town? A. Akosombo. B. Kpong. C. Bui. D. Yapei. Say the letter of your answer.
- Student
- "A"
- Extabilify
- A, Akosombo. Question 3 of 5. Which crop is Ghana the second largest producer of in the world? A. Coffee. B. Cocoa. C. Rubber.
- Student
- "B"
Why we are building this
Ghana's educational platforms were not built with everyone in mind.
Our team surveyed Ghana's major educational institution websites and spoke with students with disabilities, their teachers and their administrators about usability and accessibility. The pattern was the same across government portals, university enrolment systems, result checkers and school quiz platforms. Most showed no sign that WCAG or basic accessibility standards had shaped the build. Buttons carry no accessible name. Images have no description. Multiple-choice questions have no structural link to the options beneath them.
The problem, plainly: Ghana's educational institutions are adopting digital platforms without accessibility as a build requirement. Students with disabilities are being shut out of the same technology their classmates use without a second thought.
Mobility challenges are as much a part of this as visual impairment, and are often overlooked. Students who cannot reliably use a mouse or a keyboard are left out by assistive technology that is built almost entirely around sight. We are building Extabilify to close both gaps at once. Reading a page, answering a multiple-choice question, moving around a site: every one of those can already be done by voice alone, and we are actively working through the rest.
What it does
Six tools, one keyboard shortcut away.
Turn on only what you need. Every setting is saved to the device and applied on each page you open.
Quiz mode Featured
Reads each question and its lettered options, then listens. The student says the letter, it selects the radio button, and moves to the next question. No mouse, no keyboard.
Voice guide
Narrates every button, link, field and heading as the student moves over it or tabs to it, and announces when the pointer leaves the page.
Voice commands
Control any page by speaking. Scroll down, dark mode, find my assignment, click submit, read this. Built around natural Ghanaian English phrasing.
Smart reading
On pages built without accessibility markup, it adds the missing labels, roles and structure so the voice guide and voice commands work anyway.
My voice profile
The student records their own voice saying the confirmation phrases. Extabilify plays those back instead of the synthetic voice, so it sounds like them.
Visual aids
High contrast rendering, text scaling to 200 percent, dyslexia friendly spacing, distraction removal, and an adjustable hover delay for students with hand tremors.
Quiz mode in detail
A test a student can sit without seeing the screen.
Extabilify recognises the shape of a multiple choice test: repeated groups of radio buttons, each with a block of question text above it. It numbers the questions, letters the options, and links every option to its question. That is the connection the page's author left out.
Say quiz mode, or press Alt Shift Q. Extabilify reads a question, reads the options, and opens the microphone. The student says a letter. It confirms, selects the answer, and reads the next question. Say submit when finished, and it checks for blank answers first.
It understands the letter said plainly, spelled out as bravo, said as a number, or inside a sentence such as "the answer is B". The keys Alt Shift 1 to 9 also work.
A quiz session
- Extabilify
- Quiz mode. 5 questions. After each question, just say the letter of your answer.
- Extabilify
- Question 1 of 5. What is the capital of the Upper West Region? A. Bolgatanga. B. Wa. C. Damongo.
- Student
- "Wa, B"
- Extabilify
- B, Wa. Question 2 of 5.
- Student
- "submit"
- Extabilify
- Question 4 is not answered yet. Say "go to question 4", or say submit again to send anyway.
Built on the record
Grounded in the accessibility standards.
Every label and role Extabilify adds to a page comes from a defined set of W3C specifications. It follows the first rule of ARIA, which is to never add semantics an element already has, and it only ever repairs what is missing.
WAI-ARIA 1.2
The role and aria vocabulary the extension is permitted to apply. A W3C Recommendation since 2023.
AccName 1.2
The algorithm for working out an element's spoken name, which is the basis of every description.
ARIA APG
The interaction patterns for radio groups and checkboxes that quiz mode follows.
WCAG 2.2
The success criteria the broken pages fail, including 1.3.1, 2.4.6, 3.3.2 and 4.1.2.
ARIA in HTML
Which ARIA is valid on which element, and every element's implicit role.
Not an overlay
Extabilify is installed by the student for their own session and makes no compliance claim. It is a personal access aid.
Install
Five minutes, no administrator rights.
Works in Chrome and Edge on Windows, macOS, ChromeOS and Linux, including the low cost machines in a school computer lab. Firefox exposes speech recognition only behind a flag, so voice commands and quiz mode will not work there.
Download the extension
Get extabilify-v0.3.2.zip and unzip it into a folder you will keep.
Open the extensions page
Go to chrome://extensions or edge://extensions, and turn on Developer mode using the toggle at the top right.
Load it
Click Load unpacked and choose the folder you unzipped. The Extabilify icon appears in the toolbar.
Set it up
Click the icon, turn on Voice guide and any other tools, then open Change my settings to pick a voice, speed and text size. Your choices are saved on the device.
After installation it works offline. The only feature that needs a connection is the browser speech recognition engine used for voice commands. Nothing is sent to Extabilify, because there is no Extabilify server.
Documentation
Extabilify reference
Everything the extension does, how it decides, and how to make it behave. Current version 0.3.2.
Overview
A survey of Ghana's major educational institution websites, together with conversations with students with disabilities, teachers and administrators, found little evidence that WCAG and basic accessibility standards had shaped how those platforms were built. Extabilify is being built to close that gap from inside the browser, with particular attention to students with mobility challenges, who are often left out by assistive technology built almost entirely around sight. See the roadmap for the work in progress beyond the extension itself.
Extabilify is a Manifest V3 browser extension written in plain HTML, CSS and JavaScript, with no build step, no framework and no external dependency. One content script, content.js, runs on every page and does the work. A small service worker handles the right click menu. A popup and an options page hold the controls.
State lives in chrome.storage.local and is applied to every page you open. Nothing is transmitted anywhere. There is no account and no Extabilify server.
The three features you will use most are Voice guide, the screen reader; Voice commands, spoken control of the page; and Smart reading, which repairs pages that were not built for a screen reader and powers quiz mode.
Privacy and offline
- No server, no account, no analytics. Settings and voice profile recordings are stored only in the browser's local extension storage on that device.
- Voice profile recordings never leave the device. They are made by the student in the options page and played back locally.
- Speech recognition is the one exception. The browser
SpeechRecognitionengine sends audio to the browser vendor's servers in its current default. Chrome version 139 and later can run it on the device, and adopting that is the top roadmap item. - Text to speech is local. The voice guide and read aloud use the operating system's built in voices.
Voice guide
When it is on, moving the pointer over an element, or tabbing to it, speaks a description built the way the accessible name algorithm prescribes: aria-label first, then an associated label element, then alt or title, then the element's own text. Role and state come after the name, for example "Submit, button, disabled".
Hover delay
A student with a hand tremor whose pointer drifts across several elements hears a cascade of names. Set the hover delay, from 100 to 2000 milliseconds, in the options page, so the guide only speaks once the pointer settles.
Browser zone announcements
When the pointer leaves the page, the guide estimates which part of the browser chrome it entered, such as the address bar, the back button, the tab bar or the window controls.
Voice commands
Turn on Voice commands, then press Alt Shift M, or use the microphone button in the popup, to start listening. It does not stop after one command: it keeps listening, ready for the next one, until you say stop listening or press Alt Shift M again. Every unrecognised command is answered with "I did not understand, say help for a list", never with silence.
| Say | Effect |
|---|---|
scroll down, scroll up | Scroll the page by a screenful. |
go to top, go to bottom | Jump to the start or end of the page. |
go back, go forward, refresh | Browser history and reload. |
read, read page | Read the selection, or the main content if nothing is selected. |
read main | Find and read the densest block of text on the page. |
stop | Stop reading. |
bigger, smaller, zoom in, zoom out | Adjust text size in steps of 10 percent, from 80 to 200. |
dark mode, high contrast | Toggle the high contrast theme. |
focus mode, reading mode | Hide adverts, navigation and sidebars. |
reading space | Toggle dyslexia friendly spacing. |
voice guide, smart reading | Toggle the screen reader, or the page repair engine. |
find then some text | Highlight and jump to the first match on the page. |
click then a name | Activate the button or link whose name contains that text. |
quiz mode | Start hands free quiz mode. |
where am i, open settings, reset, help | Announce the page, open the options page, restore defaults, list commands. |
stop listening, pause listening | Turn the microphone off. It was left on continuously, so this is the only way it stops on its own. |
Smart reading
When Smart reading is on, Extabilify watches the page as it loads and adds the accessibility information the author left out. Following the first rule of ARIA, it only ever fills gaps, and it marks each element it has touched so a later pass cannot fight it.
| On the page | What it adds |
|---|---|
header, nav, main, aside, footer with no role | The matching landmark role, plus a label from the nearest heading. |
A clickable div or span with an onclick, a button like class, or role="button" | role="button", tabindex="0", and an aria-label from its visible text. |
An img with no alt | Alt text from a wrapping link, from title, or from a cleaned up file name. Decorative svg icons are hidden. |
An input, select or textarea with no label | An aria-label from the placeholder, a short preceding label, or the name attribute. |
| Text styled large and bold but not marked up as a heading | role="heading" with an aria-level inferred from its size. |
| Grouped radio buttons or checkboxes | A question model. See how pages are understood, below. |
Quiz mode
Start with quiz mode or Alt Shift Q. Extabilify reads the current question and its options, then opens the microphone and keeps it open. You never press anything between questions. After a single answer question it moves on automatically. Multi select questions wait for the word next.
Answering
| Form | Examples |
|---|---|
| The letter, plainly | B, the answer is B, choose B |
| Spelled out, NATO or homophone | bravo, bee |
| As a number | two, 2, which both mean option B |
| Keyboard | Alt Shift 1 to 9 |
Moving and finishing
| Say | Effect |
|---|---|
next, back | Next or previous question. |
repeat, read options | Hear the question again, or just the options. |
go to question 3 | Jump to a numbered question. |
progress | Reports how many are answered and which are still open. |
submit | Names any blank questions, then say submit again to send anyway. |
exit quiz | Leave quiz mode. |
Selection works on plain HTML radio buttons, on CSS styled controls where the real input is hidden, on framework controlled inputs such as React and Vue, and on ARIA role="radio" widgets.
Voice profile
In the options page, record your own voice saying each of the seven confirmation phrases, such as "Voice guide is on" and "Done reading". Extabilify stores them locally and plays your recording instead of the synthetic voice whenever it announces a state change. It is a phrase bank, not full speech synthesis, but it is the hook that the future personalised voice work plugs into.
Visual aids and settings
- Sharper screen. High contrast dark rendering that holds up against the high specificity stylesheets on portals such as GES and WAEC.
- Bigger letters. Scales relative unit text from 80 to 200 percent without collapsing fixed layouts.
- Reading space. Line height 1.75, letter spacing 0.02em, word spacing 0.08em, in line with WCAG 1.4.12.
- Clear the page. Hides adverts, navigation, cookie banners and sidebars by structure, so it works on any site, offline.
- Reading voice. Choose the voice, speed and pitch in the options page.
- Highlight colour. Set the hover outline colour, for students with colour vision differences.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
| Alt Shift D | Describe the focused element |
| Alt Shift R | Toggle the voice guide |
| Alt Shift M | Speak a command |
| Alt Shift Q | Start or stop quiz mode |
| Alt Shift N or P | Next or previous question, in quiz mode |
| Alt Shift 1 to 9 | Select that option, in quiz mode |
How pages are understood
To recognise a quiz, Extabilify tries the most reliable signal first and then falls back.
| Layer | Signal | Status |
|---|---|---|
| Declared data | Schema.org Quiz and Question in JSON-LD | Planned |
| Assessment standard | 1EdTech QTI 3.0 markup, such as qti-choice-interaction | Planned |
| Native HTML | A fieldset and legend, or an ARIA radiogroup | Implemented |
| Convention | Repeated radio buttons that share a name, with a text block above | Implemented |
| Structure | Repeating sibling blocks that each contain a choice control | Implemented |
Once a group is found, the question stem is taken from a legend, from an element with a question class, or from the nearest block of text above the options. Options are lettered A, B, C and so on, and each is linked to its question with an aria-label that the voice guide and quiz mode both read.
Standards
The full normative basis ships with the source as docs/STANDARDS.md. In brief:
| Specification | Governs |
|---|---|
| WAI-ARIA 1.2 | The role, state and property vocabulary applied to elements. |
| ARIA in HTML | Valid ARIA per element, implicit roles, and the first rule of ARIA. |
| AccName 1.2 | The accessible name computation the descriptions follow. |
| ARIA APG | Radio group and checkbox interaction patterns for quiz mode. |
| WCAG 2.2 | The success criteria the repairs target, including 1.1.1, 1.3.1, 2.4.6, 3.3.2 and 4.1.2. |
| Web Speech API | Voice recognition and synthesis. MDN is the working reference. |
| Schema.org Quiz, 1EdTech QTI 3.0 | Assessment structure, for the planned detectors. |
Extabilify is deliberately not an accessibility overlay. Overlays are installed by the site owner, affect every visitor, and are marketed as compliance products, an approach rejected by the Overlay Fact Sheet and, in the case of one vendor, by the United States Federal Trade Commission. Extabilify is installed by the student, affects only their own session, defers to existing semantics, and makes no compliance claim.
Troubleshooting
Quiz mode read the question but did not select the answer
This was fixed in version 0.3.1. Earlier versions missed CSS styled radio buttons and closed the microphone after one command. Update, and make sure you granted microphone permission when the browser asked.
The microphone stops listening after each command
Also fixed in 0.3.1. Quiz mode now re-opens the microphone automatically as soon as each spoken prompt finishes.
Nothing is read on this page
Turn on Voice guide, and turn on Smart reading for pages without proper markup. Extensions cannot run on browser pages that begin with chrome://, on the Chrome Web Store, or in the PDF viewer.
Voice commands are not supported
You need Chrome or Edge. Firefox keeps speech recognition behind a flag.
It reads too fast, or reads too much
Lower the speech rate in the options page, and raise the hover delay so the guide waits for the pointer to settle.
For developers
Plain JavaScript, no build step. Clone, load unpacked, edit, reload.
| File | Responsibility |
|---|---|
content.js | The engine. Voice guide, voice commands, smart reading annotation, and quiz mode. |
background.js | Service worker. Right click menu and cross tab messaging. |
popup.* | The toolbar popup. Feature toggles, microphone button, and start quiz. |
options.* | The settings page. Voice, hover delay, highlight colour, and voice profile recording. |
docs/STANDARDS.md | The full specification basis, mapped to functions. |
tests/ | The jsdom test scripts, run against the real content.js. |
test-pages/ | Manual test pages to open in a real browser with the extension loaded. |
Tests run the real content.js in jsdom against fixture quiz pages, covering clean markup, bare markup, and CSS hidden or ARIA controls.
cd tests npm install jsdom node test_smart.js # annotation and structured quiz node test_voice.js # quiz-mode continuous listening and auto advance node test_hidden.js # styled, hidden and ARIA controls node test_continuous.js # general voice commands listening continuously node test_nonsemantic_page.js # the manual test page below, run headlessly
test-pages/non-semantic-quiz.html is a manual test fixture: a page with no landmarks, no ARIA and five different quiz-markup patterns, for trying smart reading and quiz mode against a page that gives the extension nothing to work with. It documents, in its own comments, which patterns are currently detected and which are not.
Contributions that help students in Ghana and across Africa are welcome.
Changelog
Version 0.3.2
- Voice commands now listen continuously outside quiz mode too. Press Alt Shift M once and it keeps listening for one command after another, with no timer and no need to press it again.
- New command:
stop listening(orpause listening) turns the microphone off on request. - Leaving quiz mode now drops back to continuous general listening, instead of going silent, when voice commands are still turned on.
Version 0.3.1
- Reliable selection of radio buttons and checkboxes, including CSS hidden, framework controlled, and ARIA
role="radio"controls. - Quiz mode keeps the microphone open continuously.
- Forgiving answer parsing. A plain letter, a NATO word, a homophone, a digit, or a full sentence.
- Automatic advance after a single answer question.
Version 0.3.0
- Smart reading engine, with live DOM annotation.
- Quiz mode, with multiple choice detection and hands free answering.
Version 0.2.0
- Voice command navigation engine.
- Personal voice profile recording.
- Configurable hover delay and highlight colour. Text scaling raised to 200 percent.
Version 0.1
- Voice guide, read aloud, high contrast, spacing, focus mode, and browser zone tracking.
All documents
These ship with the source code.
README
Project overview, the mission, the feature list, and how to install.
README.mdStandards and reference basis
Every specification Extabilify is built on, mapped to the code.
docs/STANDARDS.mdResearch proposal
The formal study design. Objectives, questions, methodology, ethics, timeline, budget.
RESEARCH_PROPOSAL.mdResearch paper
The peer review draft. Abstract, related work, system design, evaluation, roadmap.
RESEARCH_PAPER.mdWhere this is going
Beyond the browser extension.
The extension is where we started. Two larger pieces of work are already in progress, alongside the language work. We do not think this is solvable by one extension or one team, and we would like NGOs, disability advocacy organisations and education stakeholders across Ghana to get involved.
In progress
The Extabilify Assist API
A public API a page can integrate to describe its own structure for assistive technology, meant for the many sites that will never be rebuilt to meet WCAG. When developers do not implement the guidelines, the page, a maintainer, or a community can publish a small machine readable description: what each control is, which text is a question, which options belong to it. Extensions like Extabilify, and any screen reader that chooses to, read that description and act on it. It is data, not a widget. Nothing rewrites the page or claims compliance.
In progress
A mobile platform for schools
Schools sign up, add their students, and give each one a phone or tablet application that reads learning material and school portals aloud, and takes voice and switch input. It is built for students who cannot use a mouse or keyboard reliably, including those with mobility impairments. Teachers get a simple view of which tools each student uses, and can send reading material to a class. Schools that sign up now will be included as this rolls out further across Ghana and, later, Africa.
The language work
A screen reader that speaks the language a student thinks in.
Students learn better when they hear instructions in a language they grew up with. This is future work, and nothing here has started yet. At a later stage, we plan to reach out to organisations that work on African language technology, such as GhanaNLP and Masakhane, to ask whether they would be able to help with translation and language modelling. Neither is currently involved with Extabilify.
On device speech recognition
Chrome 139 shipped an offline Web Speech API. Adopting it means voice commands stop sending audio to Google's servers.
Twi text to speech, online
Send selected text to a Twi text to speech service and play the audio back, once a suitable service is found. A deliberate single server dependency, accepted only for language synthesis.
Compressed models, on the device
As small neural models for low resource languages become deployable as WebAssembly, the screen reader can speak Twi, Ga, Ewe and Dagbani with no connection.
The student's own voice, everywhere
Neural voice conversion would let the screen reader speak in the student's own voice across all narration.
All current directions
| Work | What it is | Status |
|---|---|---|
| On device speech recognition | Use the offline Web Speech API in Chrome 139 and later, so voice input no longer leaves the device. | Next release |
| Ghanaian language text to speech | Twi first, then Ga, Ewe and Dagbani. Depends on reaching out to language technology projects; nothing is built yet. | Future goal, not started |
| The Extabilify Assist API | A public API a page can integrate to publish a machine readable description of its accessibility structure. | In progress |
| Mobile platform for schools | A phone and tablet application that schools provision for students, with voice and switch input. | In progress |
| Schema.org and QTI quiz detection | Recognise declared quiz structure before falling back to the current heuristics. | Planned |
The team
Who is building Extabilify.
A small team working with special needs schools in Accra.
Project overview
The team explains the whole project.
A short video walking through the problem, how Extabilify works, and where it is going.
The project overview video will appear here once it is added.
Read the transcript
The transcript of the project overview video will appear here once the video is added. A full text transcript is provided so the video is usable without sound or vision.
Team members
Ellen Boakye
Research assistant, developer and accessibility engineer
On the projectThe developer and accessibility lead for the extension, including the smart reading and quiz engine, and a research assistant on the study.
Outside the projectA rehabilitation specialist and web developer.
Prof. Wisdom Kwadwo Mprah
Academic advisor, disability and rehabilitation
On the projectAdvises on disability and rehabilitation research design for the study.
Outside the projectAssociate Professor and Head of the Centre for Disability and Rehabilitation Studies, KNUST School of Public Health. Known in the space with a lot of impact and more than 40 published papers on disability, education and inclusion.
Contact
For information and collaboration.
Get in touch about a school pilot or a partnership.
Ellen Boakye
Research assistant, developer and accessibility engineer
Phone+233 24 739 0102
Websitewww.ellenboakye.online
You can also join the pilot waitlist to be contacted when Extabilify reaches your area.
Join the pilot
Bring Extabilify to your school.
We are preparing classrooms for the first formal evaluation. We would like to hear from teachers, SEND coordinators, school administrators, researchers, parents, NGOs and disability advocacy organisations. Add your details and we will be in touch when the pilot reaches your area.
Open source
Built to be read, changed and kept.
Extabilify is plain HTML, CSS and JavaScript. There is no build step, no framework and no server. A developer in Ghana on a slow connection can read the whole codebase and change it. That is a deliberate decision about the code, not only about the product.
The most useful contribution is real use. Try it in a school, and when a page reads badly, open an issue with the address and what was said against what should have been said.
