Haitham Assoli

the project

All projects

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.

Rooh Al-Jouf

the facts

Role
Client project: mobile development
Year
2025
Status
Shipped
Category
Mobile

Built with

  • React Native
  • Expo Router
  • TypeScript
  • i18n
  • Firebase
  • React Query
  • Reanimated
  • Deep Linking

Where to find it

overview

What it is, and why it exists.

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.

problems

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.

after

Results

  • Shipped on both the App Store and Google Play for a Saudi client.
  • Fully bilingual with a properly mirrored right-to-left layout.
  • Content managed by the client without app releases.

screens

A few screens.

Rooh Al-Jouf — 1
Rooh Al-Jouf — 2
Rooh Al-Jouf — 3
Rooh Al-Jouf — 4
Rooh Al-Jouf — 5
Rooh Al-Jouf — 6

next

Next project

Sada

Arabic subtitles for English YouTube, translated on your device.