CASE STUDY

FsiBoard

Umrah and Hajj Management System Dashboard built to monitor pilgrim data and daily operations efficiently in real-time.

FsiBoard Hero Image
01

The Problem

Prior to this platform, Hajj and Umrah travel agencies managed thousands of pilgrims using fragmented systems: primarily chaotic Excel spreadsheets and unstructured WhatsApp groups. This led to scattered travel documents, lost passport data, uncoordinated flight schedules, and severe miscommunication between the central office administrators and the on-the-ground guides (mutawwifs) in Saudi Arabia. The lack of a centralized "source of truth" resulted in heightened anxiety for both the agency and the pilgrims.

02

Research & Insights

Through contextual inquiry and interviews with travel agency staff and field guides, we uncovered the core bottlenecks in their daily operations.

Insight 1: Time Drain

Administrators spent over 4 hours daily just manually reconciling pilgrim manifests and checking visa statuses across different portals.

Insight 2: Mobile Dependency

Field guides (Mutawwifs) needed a mobile-first way to update pilgrim statuses (e.g., "Arrived at Hotel") instantly without navigating complex desktop UIs.

03

Dual-Role User Flow Architecture

Two complete flows โ€” Admin (desktop-first) and Mutawwif/Field Guide (mobile-first) โ€” showing how both roles interconnect in real time. Each includes user actions, system responses, and decision nodes.

flowchart TD A([๐Ÿ‘ค Admin logs in โ€” Desktop]) --> B[Dashboard loads\nLive KPI widgets render] B --> C{Critical alerts\nflagged?} C -- ๐Ÿ”ด Yes โ†’ red badge --> D[Click alert badge\nExpanded alert drawer opens] D --> E{Alert type?} E -- Visa Expiry Warning --> F[Navigate to Manifest\nFiltered by expiry risk] E -- Flight Delay Detected --> G[Navigate to Flight Board\nAffected group highlighted amber] E -- Missing Document --> H[Navigate to Doc Verification\nIncomplete records queue] C -- โœ… No alerts --> I[Review KPI cards\nVisas approved ยท Pending ยท Rejected] I --> J[Navigate to Pilgrim Manifest] F --> J H --> J J --> K[Search or filter by\ngroup ยท status ยท flight] K --> L[Click pilgrim row\nSide panel slides in โ€” full profile] L --> M{Document status?} M -- โœ… All verified --> N[Mark pilgrim Ready\nBadge turns green ยท log entry created] M -- โš ๏ธ Pending review --> O[Open doc preview modal\nCompare vs requirements] M -- โŒ Missing or invalid --> P[Flag as Incomplete\nAuto-notif pushed to mutawwif] O --> Q{Document valid?} Q -- โœ… Approve --> R[Click Approve\nTimestamp + admin ID logged] Q -- โŒ Reject --> S[Click Reject โ†’ enter reason\nReason stored ยท visible to mutawwif] R --> N S --> T[Pilgrim enters\nAction Required queue] N --> U[Navigate to Flight Board] G --> U T --> U U --> V[View flight timeline\nGroups colour-coded by status] V --> W{Flight changes\nneeded?} W -- Yes --> X[Drag group chip to\nnew flight slot] X --> Y{Conflict\ndetected?} Y -- โœ… No conflict --> Z[Save ยท push to mutawwifs' devices\nActivity log entry created] Y -- โŒ Overbooking --> AA[Warning modal:\nSuggest alternative flight] AA --> X W -- No changes --> Z Z --> AB([โœ… Session complete\nAll changes logged and synced]) style A fill:#0EA5E9,color:#fff,stroke:none style AB fill:#10B981,color:#fff,stroke:none style C fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style E fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style M fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style Q fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style W fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style Y fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style T fill:#2d0a0a,color:#EF4444,stroke:#EF4444 style AA fill:#2d1f03,color:#F59E0B,stroke:#F59E0B style P fill:#2d1f03,color:#F59E0B,stroke:#F59E0B
Entry node
Success end
Decision node
Error / flagged state
Warning / conflict
Insight 1 (Time Drain) addressed: The alert badge system surfaces critical issues within 10 seconds of login โ€” no spreadsheet scanning. Approve/Reject is a single click with auto-logged timestamps, eliminating the 4-hour daily reconciliation entirely.
flowchart TD A([๐Ÿ“ฑ Mutawwif opens app\nmobile device]) --> B[PIN or biometric login\nNo complex password form] B --> C{Network\navailable?} C -- โœ… Online --> D[Live sync ยท admin updates\npull instantly] C -- ๐Ÿ“ด Offline --> E[Cached group loads\nAmber offline badge shown] D --> F[Home: My Group list\nPilgrim status cards visible] E --> F F --> G{Mini KPI row\nshows issues?} G -- โš ๏ธ Amber count > 0 --> H[Tap amber KPI chip\nList filters to problem pilgrims] G -- โœ… All clear --> I[Scroll full group list] H --> J[Tap pilgrim card\nStatus sheet slides up] I --> J J --> K{Action needed?} K -- Update location --> L[Tap Update Status\nPre-set tile grid opens] L --> M[Select tile:\nArrived Hotel ยท At Haram\nBoarded Bus ยท Needs Help] M --> N[Confirm tap\nHaptic + green flash] N --> O{Online?} O -- โœ… --> P[Status pushed to server\nAdmin dashboard updates instantly] O -- ๐Ÿ“ด --> Q[Status queued locally\nSyncs when connection resumes] Q --> P K -- Report an issue --> R[Tap Report Issue\nIssue type selector opens] R --> S[Select: Health ยท Lost Item\nMissed Bus ยท Passport Issue] S --> T[Optional note โ€” 200 chars max\nLarge tap-target text field] T --> U[Submit\nAdmin alert badge fires instantly] K -- View documents --> V[Tap Documents tab\nThumbnails load โ€” view only] V --> W{Admin-flagged\ndocuments?} W -- โŒ Flagged --> X[Read rejection reason\nshown in amber card] W -- โœ… Clear --> Y[View mode โ€” no edit access] P --> Z[Card status updates visually\nTimestamp + mutawwif name logged] U --> Z Z --> AA{More pilgrims?} AA -- Yes --> F AA -- No --> AB[Group summary screen\nAll statuses at a glance] AB --> AC([โœ… Field update complete\nAll synced to Admin Dashboard]) style A fill:#0EA5E9,color:#fff,stroke:none style AC fill:#10B981,color:#fff,stroke:none style C fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style G fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style K fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style O fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style W fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style AA fill:#1A2236,color:#94A3B8,stroke:#F59E0B,stroke-width:1.5px style E fill:#1A2236,color:#60A5FA,stroke:#60A5FA style Q fill:#1A2236,color:#60A5FA,stroke:#60A5FA style X fill:#2d0a0a,color:#EF4444,stroke:#EF4444
Entry
Success end
Decision
Offline fallback
Flagged / error
Insight 2 (Mobile Dependency) addressed: Pre-set status tiles eliminate keyboard typing entirely. The offline-first queue ensures no update is lost in low-signal zones like the Haram. Every update is timestamped and attributed โ€” replacing all WhatsApp coordination.
04

Screen-by-Screen Architecture

Four detailed blueprints โ€” three desktop-first, one mobile-first โ€” with annotated component specs, semantic colour logic, and Figma-ready layout descriptions.

S1

Admin Dashboard

Critical metrics surfaced in under 10 seconds of login

Desktop ยท 1440px
๐Ÿ—‚ Layout Structure

Fixed Sidebar + Fluid Main Area

  • Sidebar: 220px fixed, dark navy (#111827). Logo top, nav links (icon + label), avatar/logout anchored bottom. Never collapses on desktop.
  • Top bar: 60px sticky. Page title (Syne 700, 20px) left. Notification bell with red number badge. Global search center. Admin avatar right.
  • Alert drawer: slides down from top bar (320px height) on bell click โ€” overlays content without full navigation. Dismissible per alert.
  • Main content: fluid, 24px gutters. Scrollable independently of fixed sidebar.
๐Ÿ“Š Secondary Widgets

Activity Table + Trend Chart (below KPIs)

  • Left (55%): "Recent Activity" table โ€” Name, Status Badge, Group, Last Updated. 8 visible rows, then scroll. Status badge = semantic pill (green/amber/red dot + label).
  • Right (45%): "Processing Trend This Week" bar chart โ€” X: days, Y: count. Pure CSS bars in Figma. Current day bar = solid teal. Others = teal-dim. No chart library needed.
  • Section labels: Syne 600, 12px, uppercase, txt3. Consistent above every widget.
โšก Key Interactions โ€” Insight 1 Fix

Reducing the 4-hour daily time drain

  • Red badge on bell โ†’ pre-filtered view on click. Admin never searches manually.
  • Each KPI card click = 1-click contextual navigation to the problem area. No menus.
  • Keyboard shortcuts visible on hover (e.g. "Press M โ€” Manifest") for daily power users.
  • Live sync indicator: bottom-left, "Synced 12s ago" with green pulse โ€” removes doubt about data freshness vs. a stale spreadsheet.
Design rationale โ€” replacing Excel The four semantic KPI cards replace "scan 12 tabs." The mental model: admins navigate by colour, not cell reference. Green = no action. Amber = review soon. Red = act immediately.
S2

Pilgrim Manifest & Document Verification

Dense data grids transformed into scannable, actionable records

Desktop ยท 1440px
๐Ÿ“‹ Manifest Table โ€” Row Design

The scannable grid (replacing dense Excel rows)

  • Columns: Checkbox ยท Pilgrim Name (+ 28px avatar) ยท Passport No. ยท Visa Status ยท Document Status ยท Group ยท Actions.
  • Row height: 48px minimum. 16px horizontal cell padding โ€” no cramming.
  • Row-level semantic tinting: Approved = default dark row. Pending = amber row tint (rgba 4%). Flagged = red row tint (rgba 4%) + 3px red left-border accent.
  • Admins scan the left edge โ€” colour bleeds surface problem rows without reading any text. This is the core grid โ†’ card transformation.
  • Sticky header row on scroll. Bulk-select checkbox in header for batch actions.
๐Ÿท Status Badge System

Semantic pill badges โ€” the anti-spreadsheet pattern

  • Approved: Green dot + "Approved" โ€” #10B981 tint, green border + text.
  • Pending: Amber dot + "Pending Review" โ€” amber tint.
  • Rejected: Red dot + "Rejected" โ€” red tint. Tooltip on hover: rejection reason preview.
  • Incomplete: Grey dot + "Missing Docs" โ€” neutral tint + warning icon.
  • All badges: 18px height, 100px radius, 11px Outfit 600 uppercase. 5px dot left of label. Clicking a badge opens the document panel directly.
๐Ÿ” Filter Bar

Quick-filter chips โ€” instant triage

  • Chips: "All" ยท "Pending Review (14)" ยท "Issues Flagged (6)" ยท "Ready (203)" ยท "My Group [A]". Click = instant client-side filter, no reload.
  • Count in parentheses lets admin triage by volume โ€” highest-count problem first.
  • Search: filters by name, passport number, group ID in real time. 300ms debounce.
  • Export button (top right): generates filtered PDF manifest โ€” replaces manual Excel export entirely.
The grid โ†’ card shift Row tinting + badge pills + inline panel = admin reads the status of 200 pilgrims in 60 seconds by scanning left-edge colour. Only edge cases need the detail panel opened.
S3

Flight & Logistics Scheduling

Multi-group flight coordination without a spreadsheet

Desktop ยท 1440px
๐Ÿ—‚ Layout Structure

Timeline Board + Assignment Detail Panel

  • Main view: chronological flight card list (65% width). Each flight = a "flight row card" โ€” not a spreadsheet row.
  • Right panel (35%): Group Assignment detail on flight click. Lists assigned groups, headcount, pilgrim status breakdown.
  • Date tabs at top: Today ยท Tomorrow ยท +2 ยท +3. Today always active on load.
  • Filter row: Airline dropdown ยท Destination (Jeddah / Madinah / Istanbul) ยท Status (On Time / Delayed / Cancelled).
โœˆ Flight Card Row Anatomy

High-density but visually scannable

  • Left: departure + arrival time (Syne 600, 14px).
  • Center: flight number, route, group tag chip, seat count pill ("234/260").
  • Right: capacity progress bar (booked/total) + status badge.
  • Row states: On Time = green left-border + green bg tint. Delayed = amber. Cancelled = red. Upcoming = teal/neutral. Delayed rows show "+Xh" amber chip for delay duration.
๐Ÿ” Group Reassignment

Drag-to-reassign + conflict detection

  • Group chips inside flight rows are draggable on desktop. Drop onto another flight row triggers reassignment.
  • On drop: system checks seat capacity. OK โ†’ green toast + real-time push notification to all mutawwifs in that group ("Your flight has been updated โ€” new departure 14:30").
  • Conflict: modal mid-drag โ€” "SV 4823 has 48 seats. Your group has 62 pilgrims. Suggested: SV 4825 (80 seats free)."
  • All changes logged in sidebar Activity Log: timestamp + admin name + previous vs. new assignment.
๐Ÿ“ก Live Connection Indicator

Admin โ†” Mutawwif real-time visibility

  • Bottom of page: "โ— Live โ€” 4 mutawwifs online" with green pulse dot. Admin sees which field guides are active.
  • Saving a flight change auto-pushes an in-app notification to affected mutawwifs. No manual message. No WhatsApp.
Replacing WhatsApp coordination Every flight change auto-notifies the relevant mutawwif in-app. The "compose message to Group B" step is removed from the admin's workflow entirely โ€” the system handles distribution.
S4

Mutawwif Companion App

Field-first UI โ€” minimum taps, maximum clarity in the field

Mobile ยท 390px
Home ยท My Group
Live sync dot
Semantic borders
Status Update Sheet
โ†
54px tap targets
No keyboard input
๐Ÿ“ฑ Home โ€” My Group Screen

Header + Mini KPIs + Pilgrim Card List

  • Header: logo + "My Group โ€” [Name]" + live sync dot (green pulse, "Live") + avatar. No complex nav.
  • Mini KPI row: 2-card grid โ€” "Checked In: 38/42" (green) ยท "Needs Attention: 4" (amber). Tapping amber filters list immediately to problem pilgrims.
  • Filter chips: "All ยท Pending ยท Issues" โ€” 22px height, horizontal row. Active = teal tint.
  • Pilgrim card: 32px avatar circle + name + sub-label (room/group) + status pill right-aligned. Card border colour = semantic status. 56px min height for thumb-friendly tap.
  • Tap any card = status sheet slides up. No page navigation โ€” context preserved.
โœ… Status Update Sheet โ€” The 2-Tap Flow

Designed for one hand, in a crowd

  • Sheet slides up 85% of viewport. Pilgrim mini-card at top confirms identity before action.
  • Status grid: 2ร—2 large tile buttons (54px height). Labels: "Arrived at Hotel" ยท "At Haram" ยท "Boarded Bus" ยท "Needs Assistance" (red tint). Pre-set โ€” zero typing required.
  • Selected tile: coloured border + bg tint. Selecting auto-highlights, one tap per pilgrim update.
  • Optional note field: 52px text area. Keyboard opens only on tap โ€” not automatically.
  • Confirm: 48px full-width teal button. Haptic feedback + green flash + sheet dismisses + card list updates instantly.
๐Ÿ”” Push Notifications from Admin

In-app only โ€” no WhatsApp, no SMS

  • Flight update: "โš  Group B โ€” SV 4821 now departs 14:30 (was 12:00). Confirm group notified โ†’"
  • Document flag: "Pilgrim [Name] โ€” visa flagged by admin. Action required."
  • In-app banner (4 sec) + persisted in Notifications tab. One notification centre replaces multiple WhatsApp groups.
Insight 2 โ€” Mobile Dependency solved Zero typing for standard updates. The 2ร—2 tile grid means a mutawwif can log 10 pilgrim arrivals in under 60 seconds โ€” one hand, in a crowd, at full Haram capacity.
05

UI Design & Elements

The final interface utilizes a clean, high-contrast aesthetic. Crucial metrics like "Visas Approved" or "Flights Delayed" are highlighted using semantic color coding (greens for success, amber for warnings) to draw immediate attention to actionable items.

Pilgrim Tracker UI Design

Colors

Typography

Syne (Display)

Outfit (Body)

Components

06

Prototype & Outcome

The shift from spreadsheets to a unified dashboard reduced administrative sorting time by 75%. Agency owners reported significantly less anxiety during the peak Hajj season, as the real-time tracking allowed them to proactively address flight delays and visa issues before they cascaded into larger logistical nightmares.