Unseen Dubai
A mobile app proposal tackling the cultural tourism engagement gap in Dubai. Features AI-curated heritage trails, AR historical overlays, and multilingual support — backed by qualitative interviews and survey research.

Unseen Dubai is a mobile app concept designed to address a genuine gap: Dubai's cultural and heritage sites are rich, but largely invisible to the tourists who flock there for the skyline and shopping. The project began with research — interviews and surveys — to understand why.
The core insight: people don't know what they're missing. The problem is discoverability and context, not interest.
Dubai is often reduced to a handful of iconic landmarks. But the city has Al Fahidi, the Al Shindagha Museum, the Textile Souk, the Gold Souk — layers of history sitting alongside the glass towers. Most tourists walk past them without stopping.
Our research showed that the friction was informational: no good way to discover these sites, no context to make them meaningful, and no route that connected them into a coherent experience.
Unseen Dubai addresses this with three core features:
- AI-curated heritage trails — personalised routes based on interests and available time
- AR historical overlays — point your camera at a building and see what it looked like 50 years ago
- Multilingual support — for Dubai's genuinely international visitor base
The design was validated with user testing and refined through two rounds of iteration.
The core of the personalisation layer — a scored, ranked trail builder that weighs user interest vectors against site embeddings and filters out already-visited locations.
def recommend_trail(user_profile, available_time, location):
nearby = filter_by_proximity(location, radius_km=5)
scored = [
(site, score_site(site, user_profile))
for site in nearby
]
ranked = sorted(scored, key=lambda x: x[1], reverse=True)
trail = build_trail(ranked, max_duration=available_time)
return trail
def score_site(site, profile):
interest_match = cosine_similarity(
site.embedding, profile.interest_vector
)
recency_bonus = 1.0 if site.slug not in profile.visited else 0.2
return interest_match * recency_bonusFinal numbers, measured on a held-out evaluation set. The bottlenecks moved at every iteration; these are the steady-state values after the third rewrite.
Selected wireframe screens from the second iteration — the discovery feed and the AR overlay view.


Good UX research changes what you build. The AR overlay feature wasn't in the original spec — it came directly from a user interview where someone said they wished they could “see the old Dubai” while standing in the new one. That's the kind of insight you only get by talking to people.
I also learned that “AI-curated” only means something if the recommendation system actually understands context. Getting the trail recommendation algorithm right was the hardest part of the design.