WorkAboutProcessOpen my CVContact
WorkAboutProcessOpen my CVContact

Case study · 04

Pulse

A unified city radar that turns place signals into decisions and editable outing plans.

Role
Product and UX Design, Flutter Application Development, and Local State and Data Management.
Year
2026
Platform
Mobile app (Flutter)
Status
In development

The problem

Choosing a place and shaping a complete outing involves too many disconnected decisions.

Read the full context

Finding a place in Makkah or Jeddah requires more than a name and category. Users need practical context such as the place signal, atmosphere, opening hours, expected price range, location, and what to know before visiting. The decision becomes more fragmented when an outing includes multiple stops. Users must search for options, save them, compare their suitability, and manually arrange them around time, group size, and preferences. Traditional place lists expose information, but they do not connect discovery, evaluation, and planning into one continuous experience.

The idea

Pulse converts place discovery into a decision system built around live-feeling status signals, useful place context, comparison, saved collections, and multi-stop planning.

  • Product Strategy
  • UI/UX Design
  • Flutter
  • Riverpod
  • GoRouter
  • Repository Architecture
  • Local Persistence
  • Automated Tests
  1. 01

    City Radar

    Ranked sections such as Top Signal and Moving Now surface places through status, distance, category, and why-now context instead of a static directory.

  2. 02

    Place Intelligence

    Place pages combine status signals, opening hours, price range, vibe, practical notes, menu context, gallery media, and comparable alternatives.

  3. 03

    Plans & Collections

    Users can save places into collections, compare options, and generate multi-stop plans under time, budget, city, and preference constraints.

  4. 04

    Local-First Bilingual UX

    Flutter, Riverpod, repositories, structured JSON, and SharedPreferences keep the frontend modular while supporting Arabic/English direction changes and persistent preferences.

Design decisions

The key choices that shaped place discovery, decision-making, and outing planning.

01

Representing each place as a readable signal

Why?One signal language (status, movement, score) reads the same on the feed, the cards and the map.

Rather than organizing discovery around categories alone, Pulse assigns each place one of nine status families, a movement direction, a Pulse score, and an opening state. The same visual language is used across the home feed, viral view, cards, and map, allowing users to understand and compare places without relearning the interface on every screen.

02

Turning the place page into a decision hub

Why?The questions that come before a visit are answered on one page.

The details experience was designed to answer the questions that come before a visit instead of presenting only a description and image. It combines a quick read, recommended move, value note, atmosphere, pricing, opening hours, menus, parking and seating information, galleries, and parent-child venue relationships. This reduces the need to switch between several sources before making a decision.

03

Connecting discovery, saving, comparison, and planning

Why?Alternatives and actions sit under every place, so a choice keeps moving toward a plan.

Collections and planning are not treated as isolated tools. A place can become a plan anchor directly from its details page, while saved items or a specific collection can become the plan source. Users can compare two options before planning, then preserve preferred stops or replace unsuitable ones without losing the context of the original decision.

On mobile

From City Signals to an Outing Plan

  • City Radar
    City RadarRanked signals explain what is moving now and why each place is relevant.
  • City Map
    City MapPlace signals are explored spatially with a selected-place preview.
  • Gallery & Alternatives
    Gallery & AlternativesMedia, opening hours, comments, and similar places extend the place read.

How it's built

From the screen to the database.

  1. Flutter UIResponsive bilingual product screens
  2. Riverpod StateFeature controllers and derived state
  3. Repository LayerReplaceable local data sources
  4. Structured JSON + SharedPreferencesPlace data and persisted preferences

IntegrationsGoRouterArabic / EnglishFlutter Test

Engineering evidence

  • Feature folders separate controllers, screens, widgets, domain entities, repositories, and use cases.
  • SharedPreferences persists language, city, onboarding, account data, saved collections, reservations, and planning history.
  • Domain use cases handle ranking, filters, opening status, price formatting, comparisons, place reads, menu picks, and plan generation.
  • Automated tests cover domain behavior, controller state, storage and routes, and reusable widgets.

Validation

  • Flutter analysis and test suites cover domain use cases, state controllers, storage, routing, and widgets.
  • Arabic/English switching and persisted city and preference behavior are verified through storage and route tests.
  • The deployed private version runs the complete interactive journey.

Outcome

An interactive product that connects place discovery with outing decisions and multi-stop planning.

Read the full context

Pulse delivers a connected functional journey across 66 structured place records for Makkah and Jeddah, supported by 544 local content images and organized data for opening hours, pricing, menus, and before-you-go details. Users can move from reading a place signal to reviewing its details, saving it into a collection, comparing it with another option, or using it as the foundation of an outing plan. The planning journey generates two to four stops based on the available time, group size, outing intent, and selected rules. Plans can use different sources, preserve locked stops, replace individual choices, and be copied or stored in local history. The project demonstrates the design and implementation of a multi-flow Flutter product with clear information architecture, connected state management, and complete Arabic and English interface support. Pulse is in active development, and the current version runs on local data and on-device persistence.