low complexity extracted Contact & Peer Mentor Management Confidence: 100%
6
Components
198
Shared
18
User Stories
Yes
Analyzed

Description

Basic search functionality across contacts and associated notes, available to all organizations and all roles. Users can search by name, organization affiliation, or keywords within notes. Results are presented in a filtered list view using the same ContactCard and PeerMentorCard widgets as the main contact list. Search must be accessible via screen readers (VoiceOver/JAWS), with proper semantic labeling on the search input and results list. For Blindeforbundet, voice-to-text input should be supported in the search field as a progressive enhancement.

Analysis

Business Value

MUST HAVE across all four organizations. Enables fast lookup in large contact lists without manual scrolling. Reduces coordinator time-on-task for routine lookups, especially for HLF where a single peer mentor may have 380+ activity records.

Implementation Notes

Implement as a debounced Supabase ilike query on name and notes fields. For offline-first resilience, cache last-fetched contacts in local SQLite via drift and search locally when offline. Ensure the TextField has a11y label and results list uses Semantics widgets for screen reader compatibility.

Components (204)

User Interface (3)

Service Layer (1)

Data Layer (2)

Shared Components

These components are reused across multiple features

User Interface (59)

ui Role Switch Widget medium Shared ui Role-Aware Bottom Navigation medium Shared ui Activity Type Selection Screen low Shared ui Speech-to-Text Field Overlay medium Shared ui Receipt Capture Widget medium Shared ui Peer Mentor Single Selector low Shared ui Proxy Audit Badge Widget low Shared ui Export Period Picker low Shared ui Contact Card Widget low Shared ui Contact Search Bar low Shared ui Peer Mentor Card Widget low Shared ui Activity History List low Shared ui Multi-Chapter Affiliation Chip Widget medium Shared ui Certification Status Badge low Shared ui Duplicate Activity Warning Dialog medium Shared ui Mentor Multi-Select Widget medium Shared ui Map Filter Panel medium Shared ui Claim Status Badge low Shared ui Export Date Range Picker low Shared ui Custom Date Range Picker low Shared ui Duplicate Activity Warning Dialog low Shared ui Proxy Activity Form medium Shared ui Proxy Peer Mentor Selector medium Shared ui Expected Return Date Picker low Shared ui Pause Activation Screen low Shared ui Pause Status Indicator low Shared ui Admin KPI Stat Widget low Shared ui Organisation Hierarchy Navigator high Shared ui Bufdir Period Selector Widget low Shared ui Export History List medium Shared ui Activity Type Donut Chart medium Shared ui Monthly Activity Bar Chart medium Shared ui Statistics Period Filter Bar low Shared ui Statistics Summary Cards low Shared ui Notification Badge Widget low Shared ui Certificate Expiry Status Indicator low Shared ui Animated Stat Card Widget medium Shared ui In-App Notification Banner low Shared ui Accessible Modal Sheet Widget high Shared ui Live Region Announcer medium Shared ui Semantics Wrapper Widget medium Shared ui Sensitive Field Warning Dialog high Shared ui Confirm Before Submit Screen medium Shared ui Inline Contextual Help Widget low Shared ui Labelled Navigation Bar low Shared ui Plain Language Error Display low Shared ui Single-Action Screen Layout medium Shared ui Wizard Progress Indicator low Shared ui Accessible Text Style System medium Shared ui Accessible Touch Target Wrapper low Shared ui Contrast-Safe Color Palette Widget medium Shared ui Accessible Bottom Navigation Bar medium Shared ui Modal Close Button low Shared ui Persistent Back Button low Shared ui Vertical Scroll Container low Shared ui Organization Card Widget low Shared ui Terminology-Aware Text Widget low Shared ui FeatureGate Widget low Shared ui Chapter Switcher medium Shared

Service Layer (52)

service Authentication Service medium Shared service Authentication Session Manager medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Permission Checker Service medium Shared service Role State Manager medium Shared service No-Access Route Guard low Shared service Activity Type Metadata Resolver low Shared service Chapter Scope Resolver medium Shared service Organisation Hierarchy Resolver medium Shared service Coordinator Notification Service medium Shared service Duplicate Activity Detection Service high Shared service Mentor Filter Service low Shared service Receipt Threshold Validator low Shared service Approval Status Notification Service medium Shared service Threshold Evaluation Service medium Shared service Declaration Encryption Service high Shared service Organization Feature Flag Service low Shared service Participant Deduplication Service high Shared service Reporting Period Service medium Shared service Activity Attribution Service low Shared service Proxy Duplicate Detection Service medium Shared service Pause Management Service medium Shared service Pause Notification Service medium Shared service Admin Export Service medium Shared service Admin Row-Level Security Guard high Shared service Organisation Hierarchy Service high Shared service User Management Service high Shared service Role Access Validator low Shared service Peer Mentor Stats Aggregator medium Shared service Push Notification Dispatcher medium Shared service Notification Preference Service low Shared service Scenario Deep-Link Router medium Shared service Scenario Notification Content Builder medium Shared service Badge Criteria Integration medium Shared service Activity Summary Aggregator low Shared service Focus Management Service medium Shared service Screen Reader Detection Service medium Shared service Sensitive Field Privacy Guard high Shared service Plain Language Content Service medium Shared service Wizard State Manager medium Shared service Tab State Manager medium Shared service Organization Route Guard medium Shared service Tenant Context Service high Shared service Label Key Resolver Service low Shared service Organization Labels Notifier medium Shared service FeatureFlagProvider (Riverpod) medium Shared service Access Scope Service high Shared service Hierarchy Aggregation Service high Shared service Hierarchy Service high Shared service Unit Assignment Service medium Shared

Data Layer (33)

Infrastructure (54)

infrastructure Keyboard-Aware Layout Utility low Shared infrastructure Supabase Auth Client low Shared infrastructure Deep Link / OAuth Redirect Handler medium Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase Session Manager medium Shared infrastructure URL Launcher Utility low Shared infrastructure Local Storage Adapter low Shared infrastructure Supabase Activity Client low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client low Shared infrastructure Organisation Field Config Loader medium Shared infrastructure Speech-to-Text Adapter medium Shared infrastructure File Download Handler low Shared infrastructure Duplicate Reviewed Flag Middleware low Shared infrastructure Contact RLS Query Builder low Shared infrastructure Contact Form Validator low Shared infrastructure Design Token Theme low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client Provider low Shared infrastructure Search Debounce Utility low Shared infrastructure Expense Type Analytics Tracker low Shared infrastructure Receipt Image Picker Integration low Shared infrastructure CSV / JSON File Generator medium Shared infrastructure Coordinator Role Guard low Shared infrastructure Nightly Job Scheduler medium Shared infrastructure Supabase RLS Policy Configuration high Shared infrastructure Export File Storage Adapter low Shared infrastructure Supabase Storage Adapter low Shared infrastructure Peer Mentor Pause Management Service medium Shared infrastructure Push Notification Service medium Shared infrastructure fl_chart Adapter medium Shared infrastructure Push Notification Service low Shared infrastructure FCM Push Notification Sender medium Shared infrastructure FCM Notification Dispatcher medium Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Supabase Realtime Subscription Service medium Shared infrastructure Organisation Data Isolation Guard low Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Deep Link Handler medium Shared infrastructure QR Code Generator low Shared infrastructure Share Sheet Bridge low Shared infrastructure Semantics Service Facade medium Shared infrastructure Accessibility Design Token Enforcer medium Shared infrastructure Accessible Theme Builder medium Shared infrastructure Navigation Route Configuration medium Shared infrastructure Accessibility Live Region Announcer low Shared infrastructure Feature Flag Provider low Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase RLS Tenant Scope Configurator medium Shared infrastructure Label Key Registry low Shared infrastructure Terminology Riverpod Providers low Shared infrastructure WCAG Semantics Label Resolver low Shared infrastructure Feature Flag Key Constants low Shared infrastructure RLS Policy Manager high Shared

User Stories (18)

Quickly Access Recent and Frequent Contacts from Search
medium 3 pts

As a As a Peer Mentor (Likeperson)

I want to see recently viewed or frequently accessed contacts at the top of the search screen before I start typing

So that I can navigate to my most-used contacts in one tap without needing to type a query each time

Acceptance Criteria
  • Given the coordinator opens the search screen with no query entered, when the screen renders, then up to 5 recently viewed contacts are shown in a 'Recent' section
  • Given a recent contact is tapped, when navigating, then the contact detail screen opens directly without requiring a search query
  • Given the coordinator has viewed fewer than 5 contacts, when the recent section is shown, then only the contacts actually viewed are listed (no placeholder entries)
  • +2 more
View Full Story →
Quickly Access Recent and Frequent Contacts from Search
medium 3 pts

As a As a Coordinator

I want to see recently viewed or frequently accessed contacts at the top of the search screen before I start typing

So that I can navigate to my most-used contacts in one tap without needing to type a query each time

Acceptance Criteria
  • Given the coordinator opens the search screen with no query entered, when the screen renders, then up to 5 recently viewed contacts are shown in a 'Recent' section
  • Given a recent contact is tapped, when navigating, then the contact detail screen opens directly without requiring a search query
  • Given the coordinator has viewed fewer than 5 contacts, when the recent section is shown, then only the contacts actually viewed are listed (no placeholder entries)
  • +2 more
View Full Story →
Quickly Access Recent and Frequent Contacts from Search
medium 3 pts

As a As a Organization Administrator

I want to see recently viewed or frequently accessed contacts at the top of the search screen before I start typing

So that I can navigate to my most-used contacts in one tap without needing to type a query each time

Acceptance Criteria
  • Given the coordinator opens the search screen with no query entered, when the screen renders, then up to 5 recently viewed contacts are shown in a 'Recent' section
  • Given a recent contact is tapped, when navigating, then the contact detail screen opens directly without requiring a search query
  • Given the coordinator has viewed fewer than 5 contacts, when the recent section is shown, then only the contacts actually viewed are listed (no placeholder entries)
  • +2 more
View Full Story →
Filter Search Results by Contact Type and Chapter
high 5 pts

As a As a Peer Mentor (Likeperson)

I want to filter search results by contact type (peer mentor or contact person) and by chapter affiliation

So that I can narrow large result sets to exactly the relevant subset, especially when managing contacts across multiple chapters or organizational units

Acceptance Criteria
  • Given the coordinator is on the search screen, when they tap a filter control, then filter options appear for contact type (peer mentor / contact) and chapter affiliation
  • Given a chapter filter is selected, when the search query is executed, then only contacts affiliated with that chapter appear in results
  • Given a contact type filter is selected, when results are displayed, then only the selected contact type appears, and the active filter is visually indicated
  • +3 more
View Full Story →
Search Contact Notes and Activity Summaries
high 8 pts

As a As a Peer Mentor (Likeperson)

I want to search within notes and activity report content associated with contacts

So that I can find specific interactions, follow-up items, or contextual history without opening each contact record individually

Acceptance Criteria
  • Given the coordinator enters a search query, when results include contacts with matching note content, then note-matched results are visually distinguished from name-matched results
  • Given a note result is returned, when displayed in the results list, then a short excerpt of the matching note text is shown beneath the contact name
  • Given the coordinator's RLS scope covers only their chapter's contacts, when search results are returned, then only contacts within their permitted scope appear
  • +2 more
View Full Story →
Offline Search Against Locally Cached Contacts
high 8 pts

As a As a Peer Mentor (Likeperson)

I want to search my contact list even when the device has no internet connection

So that I can continue working during field visits, travel, or poor-connectivity situations without losing access to critical contact information

Acceptance Criteria
  • Given the device has no internet connection, when the coordinator searches for a contact by name, then results are returned from the local cache within 500ms
  • Given offline search results are displayed, when the list is rendered, then a persistent banner or indicator communicates that results are from local cache and may not be fully up to date
  • Given the device regains internet connectivity, when the cache sync service runs, then the local cache is updated with any server-side changes since the last sync
  • +2 more
View Full Story →
Filter Search Results by Contact Type and Chapter
high 5 pts

As a As a Coordinator

I want to filter search results by contact type (peer mentor or contact person) and by chapter affiliation

So that I can narrow large result sets to exactly the relevant subset, especially when managing contacts across multiple chapters or organizational units

Acceptance Criteria
  • Given the coordinator is on the search screen, when they tap a filter control, then filter options appear for contact type (peer mentor / contact) and chapter affiliation
  • Given a chapter filter is selected, when the search query is executed, then only contacts affiliated with that chapter appear in results
  • Given a contact type filter is selected, when results are displayed, then only the selected contact type appears, and the active filter is visually indicated
  • +3 more
View Full Story →
Search Contact Notes and Activity Summaries
high 8 pts

As a As a Coordinator

I want to search within notes and activity report content associated with contacts

So that I can find specific interactions, follow-up items, or contextual history without opening each contact record individually

Acceptance Criteria
  • Given the coordinator enters a search query, when results include contacts with matching note content, then note-matched results are visually distinguished from name-matched results
  • Given a note result is returned, when displayed in the results list, then a short excerpt of the matching note text is shown beneath the contact name
  • Given the coordinator's RLS scope covers only their chapter's contacts, when search results are returned, then only contacts within their permitted scope appear
  • +2 more
View Full Story →
Offline Search Against Locally Cached Contacts
high 8 pts

As a As a Coordinator

I want to search my contact list even when the device has no internet connection

So that I can continue working during field visits, travel, or poor-connectivity situations without losing access to critical contact information

Acceptance Criteria
  • Given the device has no internet connection, when the coordinator searches for a contact by name, then results are returned from the local cache within 500ms
  • Given offline search results are displayed, when the list is rendered, then a persistent banner or indicator communicates that results are from local cache and may not be fully up to date
  • Given the device regains internet connectivity, when the cache sync service runs, then the local cache is updated with any server-side changes since the last sync
  • +2 more
View Full Story →
Filter Search Results by Contact Type and Chapter
high 5 pts

As a As a Organization Administrator

I want to filter search results by contact type (peer mentor or contact person) and by chapter affiliation

So that I can narrow large result sets to exactly the relevant subset, especially when managing contacts across multiple chapters or organizational units

Acceptance Criteria
  • Given the coordinator is on the search screen, when they tap a filter control, then filter options appear for contact type (peer mentor / contact) and chapter affiliation
  • Given a chapter filter is selected, when the search query is executed, then only contacts affiliated with that chapter appear in results
  • Given a contact type filter is selected, when results are displayed, then only the selected contact type appears, and the active filter is visually indicated
  • +3 more
View Full Story →
Search Contact Notes and Activity Summaries
high 8 pts

As a As a Organization Administrator

I want to search within notes and activity report content associated with contacts

So that I can find specific interactions, follow-up items, or contextual history without opening each contact record individually

Acceptance Criteria
  • Given the coordinator enters a search query, when results include contacts with matching note content, then note-matched results are visually distinguished from name-matched results
  • Given a note result is returned, when displayed in the results list, then a short excerpt of the matching note text is shown beneath the contact name
  • Given the coordinator's RLS scope covers only their chapter's contacts, when search results are returned, then only contacts within their permitted scope appear
  • +2 more
View Full Story →
Offline Search Against Locally Cached Contacts
high 8 pts

As a As a Organization Administrator

I want to search my contact list even when the device has no internet connection

So that I can continue working during field visits, travel, or poor-connectivity situations without losing access to critical contact information

Acceptance Criteria
  • Given the device has no internet connection, when the coordinator searches for a contact by name, then results are returned from the local cache within 500ms
  • Given offline search results are displayed, when the list is rendered, then a persistent banner or indicator communicates that results are from local cache and may not be fully up to date
  • Given the device regains internet connectivity, when the cache sync service runs, then the local cache is updated with any server-side changes since the last sync
  • +2 more
View Full Story →
Search Contacts by Name or Identifier
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want to search for contacts and peer mentors by name, phone number, or other identifying information from a unified search screen

So that I can quickly locate the right person without scrolling through long lists, enabling faster response and assignment decisions

Acceptance Criteria
  • Given the coordinator is on any tab, when they navigate to the search screen, then a search input field is focused and ready for input
  • Given the coordinator types at least 2 characters, when 300ms have elapsed without further input (debounce), then results matching the query appear in the results list
  • Given search results are returned, when displayed, then each result shows the contact's name, role badge, and chapter affiliation
  • +3 more
View Full Story →
Search Accessible via Screen Reader and Keyboard Navigation
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want the search screen and all search interactions to be fully accessible via screen readers (VoiceOver, TalkBack) and keyboard/switch access navigation

So that coordinators and peer mentors who rely on assistive technology can use search equally effectively without encountering inaccessible barriers

Acceptance Criteria
  • Given a screen reader is active, when the search screen opens, then the search input field is announced with a descriptive label (e.g., 'Search contacts and notes')
  • Given search results update, when new results are rendered, then a live region announces the result count (e.g., '5 results found')
  • Given the results list is navigated via screen reader, when each result is focused, then the contact name, type (peer mentor or contact), and chapter are announced
  • +3 more
View Full Story →
Search Contacts by Name or Identifier
critical 5 pts

As a As a Coordinator

I want to search for contacts and peer mentors by name, phone number, or other identifying information from a unified search screen

So that I can quickly locate the right person without scrolling through long lists, enabling faster response and assignment decisions

Acceptance Criteria
  • Given the coordinator is on any tab, when they navigate to the search screen, then a search input field is focused and ready for input
  • Given the coordinator types at least 2 characters, when 300ms have elapsed without further input (debounce), then results matching the query appear in the results list
  • Given search results are returned, when displayed, then each result shows the contact's name, role badge, and chapter affiliation
  • +3 more
View Full Story →
Search Accessible via Screen Reader and Keyboard Navigation
critical 5 pts

As a As a Coordinator

I want the search screen and all search interactions to be fully accessible via screen readers (VoiceOver, TalkBack) and keyboard/switch access navigation

So that coordinators and peer mentors who rely on assistive technology can use search equally effectively without encountering inaccessible barriers

Acceptance Criteria
  • Given a screen reader is active, when the search screen opens, then the search input field is announced with a descriptive label (e.g., 'Search contacts and notes')
  • Given search results update, when new results are rendered, then a live region announces the result count (e.g., '5 results found')
  • Given the results list is navigated via screen reader, when each result is focused, then the contact name, type (peer mentor or contact), and chapter are announced
  • +3 more
View Full Story →
Search Contacts by Name or Identifier
critical 5 pts

As a As a Organization Administrator

I want to search for contacts and peer mentors by name, phone number, or other identifying information from a unified search screen

So that I can quickly locate the right person without scrolling through long lists, enabling faster response and assignment decisions

Acceptance Criteria
  • Given the coordinator is on any tab, when they navigate to the search screen, then a search input field is focused and ready for input
  • Given the coordinator types at least 2 characters, when 300ms have elapsed without further input (debounce), then results matching the query appear in the results list
  • Given search results are returned, when displayed, then each result shows the contact's name, role badge, and chapter affiliation
  • +3 more
View Full Story →
Search Accessible via Screen Reader and Keyboard Navigation
critical 5 pts

As a As a Organization Administrator

I want the search screen and all search interactions to be fully accessible via screen readers (VoiceOver, TalkBack) and keyboard/switch access navigation

So that coordinators and peer mentors who rely on assistive technology can use search equally effectively without encountering inaccessible barriers

Acceptance Criteria
  • Given a screen reader is active, when the search screen opens, then the search input field is announced with a descriptive label (e.g., 'Search contacts and notes')
  • Given search results update, when new results are rendered, then a live region announces the result count (e.g., '5 results found')
  • Given the results list is navigated via screen reader, when each result is focused, then the contact name, type (peer mentor or contact), and chapter are announced
  • +3 more
View Full Story →