A Chrome extension that repairs how Persian, Arabic and bilingual text is displayed on the web, without changing what a site says or how it is built.
Text direction on the web is usually decided by the first character of a sentence. So a Persian sentence that opens with an English word, a username, a number or a technical term is displayed backwards: punctuation lands on the wrong side, lines break in the wrong place, and a paragraph that is perfectly correct in the database reads as broken on screen.
RAST finds those cases and presents them the way they were meant to be read. It sets direction and alignment; it does not rewrite the site’s content or disturb its layout.
Automatic detection of RTL, LTR and mixed-direction text, a one-click scan of the current page, and continuous processing of content that arrives after load: live messages, AI answers, infinite scroll, sections that update in place. Embedded frames are covered; pre and code elements are protected, because a code block that gets “corrected” is a code block that is now wrong.
Where the automatic pass is not enough, the reader takes over: pick an element or a region visually, choose its direction, decide whether the rule applies to that element alone or to everything inside it, and save it. Rules are per website, and the extension can be switched off for a site entirely.
AI chat applications, social networks, messaging platforms, forums, dashboards, content-management systems, educational sites, anywhere Persian or bilingual text is not handled correctly.
It earns its place most on content that constantly mixes Persian with English terminology, code, links, usernames, dates and numbers, which is most of the modern web for a Persian-speaking reader.
I took RAST from product definition through interface design, extension architecture, implementation, testing, privacy and Chrome Web Store preparation.
It started by cataloguing the ways RTL and mixed-language display actually fails, then narrowing the product to two promises: correct it automatically, and give the reader precise control over the rest. The popup was designed around that: status, page scan, region selection, saved rules, settings, themes and both language states.
The final popup is a design system of its own: colours, typography, spacing, components, animation and responsive compact and expanded states, rather than a settings panel bolted onto a script.
Persian localisation, full RTL interface support, light, dark and system themes, keyboard interaction, visual feedback and motion were all first-class. An extension that exists to make Persian readable cannot itself be an English-first afterthought.
Manifest V3, vanilla JavaScript, HTML and CSS: no framework and no build-time magic in the shipped package. Content scripts inspect rendered text, determine its direction and apply scoped presentation corrections; a MutationObserver-driven pipeline handles newly added content without rebuilding the whole page each time. On-page controls live in a Shadow DOM so the host site’s CSS and the extension’s never collide.
Preferences, per-site states and saved regions are stored through chrome.storage.local. There is no backend service, no remote JavaScript, no analytics SDK and no advertising system, which is a privacy decision first and a performance one second.
Unit tests on the core direction-detection logic, popup and control-state tests, editor and region-selection integration tests, English and Persian interface verification, RTL and LTR layout passes, dark and light theme validation, visual comparison against the original design, animation and interaction testing, and a Chrome Web Store permission and privacy review.
Everything RAST does happens on the reader’s own device. Page text, personal messages, form values and browsing information are never transmitted anywhere, and no remote code is executed. The full policy is published on this site in English and Persian.
Questions, bugs and suggestions go to rast@fenix.sbs, which is the extension’s own address rather than a shared inbox.