Mobile2025
Rooh Al-Jouf
A digital guide to the Al-Jouf region and everything in it.
A bilingual tourism guide for Al-Jouf in Saudi Arabia: heritage and tourist sites, live events and festivals, a directory of local restaurants and cafés, and the historical and cultural background behind them. Built for both a first-time visitor and a resident.
- Production
- Rooh Al-Jouf
- Role
- Client project: mobile development
- Year
- 2025
- Status
- Shipped
- Format
- Mobile
- Built with
- React NativeExpo RouterTypeScripti18nFirebaseReact QueryReanimatedDeep Linking
- Where to find it
- App StoreGoogle Play


Treatment
Regional tourism apps usually fail in one of two ways: they are a brochure that never changes, or they are a map with pins and no reason to care about any of them. Al-Jouf has genuine depth in heritage sites, seasonal festivals and a food scene, and the client wanted all of it in one place.
تفشل تطبيقات السياحة الإقليمية عادةً بإحدى طريقتين: إما كتيّب لا يتغير، وإما خريطة بدبابيس بلا سبب يجعلك تهتم بأيٍّ منها. وللجوف عمق حقيقي في مواقعها التراثية ومهرجاناتها الموسمية ومشهد الطعام فيها، وأراد العميل ذلك كله في مكان واحد.
The app covers sites, events, and places to eat, each with the historical and cultural context that makes a visit worth making. It is fully bilingual, which for a Saudi tourism product is not a nice-to-have.
يغطي التطبيق المواقع والفعاليات وأماكن الطعام، ولكلٍّ سياقه التاريخي والثقافي الذي يجعل الزيارة تستحق. وهو ثنائي اللغة بالكامل، وهذا في منتج سياحي سعودي ليس ترفًا.
Challenges
Bilingual means the layout mirrors, not just the words
The problem
Switching to Arabic flips the entire interface: navigation direction, icon orientation, list alignment, back gestures. Translating strings alone produces an app that reads Arabic but behaves English.
What I did
Direction is a property of the whole tree rather than a per-screen fix, so layout, navigation and gestures all mirror together. Anything directional is expressed in start/end terms instead of left/right.
Events go stale faster than releases ship
The problem
A festival listing that is a week out of date is worse than no listing. Store review cycles are far slower than the pace at which a seasonal events calendar changes.
What I did
Events, sites and venues are all remote content the client edits directly. Shipping a build is never on the critical path for keeping the app current.
Heavy imagery on a tourist's connection
The problem
A guide is mostly photographs, and it is opened by people on roaming data at a heritage site with one bar of signal, the worst possible conditions for the app's heaviest content.
What I did
Images are served at the size they are displayed and cached on disk after first view, so browsing back through places already seen costs nothing.
Results
- Shipped on both the App Store and Google Play for a Saudi client.صدر على App Store وGoogle Play لعميل سعودي.
- Fully bilingual with a properly mirrored right-to-left layout.ثنائي اللغة بالكامل مع تخطيط منعكس بشكل صحيح من اليمين إلى اليسار.
- Content managed by the client without app releases.محتوى يديره العميل دون إصدارات جديدة للتطبيق.





