Scientific notation
Mantissa, power of ten, and the unit that follows.
Avogadro’s number is 6.022×10²³ mol⁻¹. An electron carries 1.602 x 10^-19 C. Light travels at 3e8 m/s, and a nanometre is 10⁻⁹ m.
Text-to-speech, word by word
A reader that speaks currencies, units, equations and chemistry the way a person would, and highlights the exact word as it is said.
Essay · 3 min listen
Why everyone says “home is best”, no matter how bad it gets.
“East or West, Home is Best.” 🏠
But what if home is a desert? A war zone? A slum? A mansion? A palace?
Why do we all defend our comfort zones—no matter how uncomfortable they actually are? 🤔
Everyone says: “Home is best.” 🏡
Same statement. Wildly different realities. 🌈
This is the Comfort Zone Paradox: humans defend what they know—even when what they know is killing them.
Look at the Sahara, the Arabian Desert, the Gobi, the Mojave—people survive there. Some regions get less than 25 mm of rain a year, and the ground can pass 70 °C.
Logical question: why don’t they just move to greener areas, perhaps 300 km away? 🌿🤷
Because moving costs more than money. A family that earns $2.5k a year cannot buy land worth $50k, and the unknown feels heavier than the heat.
So they stay in the desert. And they defend the desert. And they defend the desert as their home. 🏠
Pronunciation lab
Each card isolates a reading rule. Play it, follow the highlight, and open “Spoken as” to see exactly what the voice is given.
Mantissa, power of ten, and the unit that follows.
Avogadro’s number is 6.022×10²³ mol⁻¹. An electron carries 1.602 x 10^-19 C. Light travels at 3e8 m/s, and a nanometre is 10⁻⁹ m.
Formulas read element by element, with charges.
Water is H₂O and carbon dioxide is CO₂. Methane burns as CH₄ + 2O₂ → CO₂ + 2H₂O. Table salt is NaCl, and sulfate is SO₄²⁻.
Operators, powers and subscripts as words.
Einstein wrote E = mc². By Pythagoras, a² + b² = c². A circle’s area is π r², and x₁ + x₂ ≤ 10.
Letters and relations a scientist would say.
α, β and γ radiation. Δt ≈ 0.5 s, λ = 500 nm, σ ± 0.1, √2 ≈ 1.414, and the limit tends to ∞.
Halves and quarters, en-dash ranges, negatives.
Add ½ cup, walk 2¾ miles, and keep 3/4 of the class. It runs 10–20 km, from 1990–2000. Absolute zero is −273.15 °C; take ~5 kg.
Symbols, codes and magnitudes, before or after.
Price is $100, €50, and £75. Funding was $2.5M, €300k, and £3B. Also 100$, 300k€, and 2.5M£; CA$200, HK$ 300k, USD 100 and EUR 2.5M.
Titles, Latin and citations expanded.
Team A vs. Team B. Mr. Smith met Dr. Jones in the U.S. and the U.K., approx. 5 years ago, i.e. before 2020; e.g. see Fig. 3 and Eq. 2 (Smith et al., 2020), No. 7.
Number + unit, singular or plural.
1 m, 2m, 3.5 km, 10cm, 25 mm, 2.4GHz, 1 Hz, 2 Hz, 50%, 90 kW, 220 V, 10 A.
Prefix and base unit combined.
0.5 μm, 10 ps, 1 kΩ, 250 MW, 50 mA.
Degrees Celsius, Fahrenheit, kelvin and angles.
25°C, -10 °F, 300 K, and a 45° angle.
Squared and cubed units.
1 m², 12 cm², 3 km², 24 in², 2 ft². 2 m³, 15 cm³, 0.5 km³, 1 L, 250 mL.
Compound units like km/h and mmHg.
60 km/h, 27.8 m/s, 45 mph. 101 kPa, 1 atm, 14.7 psi, 760 mmHg, 1 bar, 50 mbar, 0.5 MPa.
Ohms, webers, newton-metres, watt-hours.
5 Ω, 2 Wb, 300 lm, 500 lx, 30 dB. 100 N, 250 J, 1 mol, 20 N·m. 400 Wh, 1.2 kWh, 2000 mAh, 2 Ah.
Grouped digits read as a whole.
A trillion dollars is $1,000,000,000,000, and the Sun is about 149,600,000 km away.
Use it in your product
Free and open source. The core has no dependencies and works with any framework; React bindings and a themeable stylesheet come with it.
From npm, with any package manager.
npm install audio-reader-highlightWrap what should be read; add the player once.
import { Readable, PlayerDock } from 'audio-reader-highlight/react';
import 'audio-reader-highlight/styles.css';
<Readable id="post" label="My post">
<h1>Title</h1>
<p>Body text…</p>
</Readable>
<PlayerDock defaultRegion="post" />The engine works on plain DOM, in a WebView too.
import { getReader } from 'audio-reader-highlight';
import 'audio-reader-highlight/styles.css';
const reader = getReader();
reader.register('post', document.querySelector('article'));
reader.play('post');
reader.subscribe(state => console.log(state.word));