A SIGNAL-BASED MOBILE APP FOR DISCOVERING PLACES AND PLANNING MULTI-STOP OUTINGS ACROSS MAKKAH AND JEDDAH

Pulse

Pulse helps users move from deciding where to go to shaping a complete outing. The product combines signal-based discovery, search and filtering, interactive map exploration, and practical place details. Users can also organize saved places into collections, compare alternatives, and generate an editable multi-stop plan from a selected place or saved list.

My roleProduct and UX Design, Flutter Application Development, and Local State and Data Management.
Product StrategyUI/UX DesignFlutterRiverpodGoRouterRepository ArchitectureLocal PersistenceAutomated Tests
StatusCompleted
Year2026

Private interactive demo. Access credentials are shared directly with recruiters and reviewers.

Pulse
Problem

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

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.

Solution

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

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 scope

How the solution is organized.

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.

Place Intelligence

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

Plans & Collections

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

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: 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: 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: 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.

Technical architecture

The implementation behind the interface.

Flutter UIResponsive bilingual product screens
Riverpod StateFeature controllers and derived state
Repository LayerReplaceable local and mock data sources
Structured JSON + SharedPreferencesPlace data and persisted preferences
Connected services & concerns
GoRouterArabic / EnglishFlutter Test
Evidence

What is implemented, constrained, and verified.

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.

Constraints & trade-offs

  • The current version is a frontend-only private demo using structured local and mock data.
  • No production backend, real authentication, payments, notifications, analytics, or live reservation service is claimed.
  • Status signals demonstrate the product model and interaction logic rather than live crowd telemetry.

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 demo validates the complete interactive frontend journey.
Gallery

From City Signals to an Outing Plan

The gallery follows the core Pulse journey, from the city radar, search, and filters to interactive map exploration and detailed place pages with galleries, menus, opening hours, and before-you-go information. It then continues through saved collections, place comparison, and the editable multi-stop planning experience.

Outcome

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

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, delivered as a completed interactive prototype using local data and on-device persistence.

Product & UX DesignInformation ArchitectureFlutterRiverpod State ManagementInteractive Maps & OpenStreetMapLocal Data Modeling & SharedPreferencesArabic–English Localization & RTL/LTR
Next project

VIN Fitness

VIN Fitness is an integrated digital fitness ecosystem that combines workout planning, body-signal tracking, nutrition, progress, community, learning, personal coaching, and fitness commerce. Its daily journey connects readiness with training and long-term progress, supported by experiences such as Train Like, Muscle Radar, Ask VIN, Coach Map, and VIN Badges.