Skip to content
All Projects
AI Bot
Web2025

Araby Bot

Arabic RTL handled correctly — every widget, every edge case.

4.8★ user rating in the first week — Arabic RTL handled flawlessly end to end.

Araby Bot screenshot
4.8★
User rating
100%
RTL coverage
Flutter Web
Platform
4.8★ avg
Week 1

The Challenge

Arabic RTL support in Flutter Web is more complex than setting a text direction flag. Every input field, every animation, every layout component, and every streaming text renderer needs to be individually validated for right-to-left layout. The AI response streaming added a second layer: Arabic text had to appear correctly RTL even as tokens arrived character by character — partial grapheme clusters must never appear on screen mid-render.

The Solution

I built RTL support into the layout system from day one rather than patching it in after the fact. The MaterialApp-level textDirection is set to RTL for Arabic locale, so the entire widget tree inherits directionality without per-widget overrides. Every input field was tested for cursor positioning and selection handles. Every animation was checked for left/right mirroring. The streaming response renderer uses a grapheme cluster buffer — it holds incomplete characters until a full codepoint is received before rendering, so the user never sees a broken Arabic letter mid-stream.

Key Engineering Decisions

Root-level RTL inheritance

Setting Directionality at the MaterialApp level means every widget inherits RTL without explicit overrides. Custom widgets are built assuming RTL and use semantic start/end padding instead of left/right.

Grapheme-cluster-safe streaming

Arabic characters are multi-byte Unicode grapheme clusters. The streaming renderer buffers bytes until a complete cluster is formed before appending to the visible text, preventing broken character display mid-stream.

Auth-gated conversation history

Chat history is stored in Firestore under the authenticated user's UID. Conversations persist across sessions and devices — the user picks up exactly where they left off.

HTML renderer for web

Flutter Web's HTML renderer (not CanvasKit) was chosen for better text selection behaviour on desktop browsers — critical for a chat interface where users frequently copy AI responses.

Tech Stack

Flutter WebDartREST APIsFirebase AuthFirestoreProvider

Outcomes & Results

4.8★
User rating
Measured in the first week after launch
100%
RTL coverage
Every widget, every input, every animation validated
0
RTL layout bugs
At launch — no left/right mirroring issues reported

What the Client Said

Arabic-first AI chatbot — Flutter Web

Building a consumer product for Arabic speakers is hard — RTL layout, streaming responses, mobile keyboard quirks. Ahmed handled every edge case without being asked twice. The typography, the scroll behaviour, the loading states — everything was considered. Our Arabic users rated it 4.8 in the first week.

Mona Adel
Co-founder & CPO
Egypt

Live Links

Ready to build?

Need something similar built?

I'm available for new projects. Discovery calls are free and I typically respond within 24 hours. You'll work directly with me — from the first call to launch.