medium complexity extracted Organization Configuration & Multi-tenancy Confidence: 100%
3
Components
198
Shared
18
User Stories
Yes
Analyzed

Description

Each organization uses different words for the same roles and concepts — what NHF calls a 'koordinator' may differ in label from the equivalent role at HLF or Barnekreftforeningen, and 'likeperson' itself has nuanced meaning per organization. This feature provides a runtime label system where all user-facing strings that vary by organization are resolved through a per-tenant terminology map rather than hardcoded copy. The system must cover role names, activity type labels, report field names, navigation tab labels, and any organization-specific jargon surfaced in the UI. Labels are fetched from Supabase on login and cached locally so the app works offline. Adding a new organization or updating its terminology requires only a database change, not a code deployment.

Analysis

Business Value

Prevents the confusion and trust erosion that occurs when users see terminology from a different organization. It also reduces the per-organization customization work required when onboarding new partners, making the platform commercially scalable beyond the initial four organizations.

Implementation Notes

Implement as a Riverpod provider (e.g., `OrganizationLabelsNotifier`) that exposes a `label(key)` helper used throughout the widget tree. Store the terminology map as a JSONB column in an `organization_configs` Supabase table. Integrate with the existing 'Organization labels system' already referenced in the app architecture. Ensure all WCAG 2.2 AA accessible labels (aria equivalents in Flutter semantics) also resolve through this system.

Components (201)

User Interface (1)

Service Layer (1)

Data Layer (1)

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)

Feature Flag Integration for Terminology System Rollout Control
medium 3 pts

As a As a Peer Mentor (Likeperson)

I want the dynamic terminology system to be controlled by a feature flag so that it can be enabled progressively per organization during the rollout phase

So that my organization can adopt the custom terminology system at a pace that suits our onboarding readiness, without affecting organizations that are not yet configured

Acceptance Criteria
  • Given the terminology feature flag is disabled for my organization, When peer mentors use the app, Then all labels fall back to the default static strings without any errors
  • Given the terminology feature flag is enabled for my organization, When peer mentors use the app, Then all labels are resolved dynamically through the terminology pipeline
  • Given the feature flag state changes on the backend, When the app next fetches flag configuration, Then the terminology system enables or disables without requiring an app restart
  • +2 more
View Full Story →
Feature Flag Integration for Terminology System Rollout Control
medium 3 pts

As a As a Coordinator

I want the dynamic terminology system to be controlled by a feature flag so that it can be enabled progressively per organization during the rollout phase

So that my organization can adopt the custom terminology system at a pace that suits our onboarding readiness, without affecting organizations that are not yet configured

Acceptance Criteria
  • Given the terminology feature flag is disabled for my organization, When peer mentors use the app, Then all labels fall back to the default static strings without any errors
  • Given the terminology feature flag is enabled for my organization, When peer mentors use the app, Then all labels are resolved dynamically through the terminology pipeline
  • Given the feature flag state changes on the backend, When the app next fetches flag configuration, Then the terminology system enables or disables without requiring an app restart
  • +2 more
View Full Story →
Feature Flag Integration for Terminology System Rollout Control
medium 3 pts

As a As a Organization Administrator

I want the dynamic terminology system to be controlled by a feature flag so that it can be enabled progressively per organization during the rollout phase

So that my organization can adopt the custom terminology system at a pace that suits our onboarding readiness, without affecting organizations that are not yet configured

Acceptance Criteria
  • Given the terminology feature flag is disabled for my organization, When peer mentors use the app, Then all labels fall back to the default static strings without any errors
  • Given the terminology feature flag is enabled for my organization, When peer mentors use the app, Then all labels are resolved dynamically through the terminology pipeline
  • Given the feature flag state changes on the backend, When the app next fetches flag configuration, Then the terminology system enables or disables without requiring an app restart
  • +2 more
View Full Story →
Offline Terminology Cache Ensures Consistent Labels Without Connectivity
high 3 pts

As a As a Peer Mentor (Likeperson)

I want the organization's terminology labels to remain fully available and consistent when peer mentors use the app in areas without internet connectivity

So that volunteer work in the field — such as home visits or remote locations — is never disrupted by missing or reverted labels that would confuse or concern users

Acceptance Criteria
  • Given a peer mentor's device has no internet connection, When they open the app, Then all terminology labels render from the local cache with no errors or placeholders
  • Given the app was previously used with connectivity and terminology was synced, When the peer mentor goes offline and registers an activity, Then all form labels, button text, and navigation items use the cached organization terminology
  • Given the device regains connectivity, When the TerminologySyncService detects the connection, Then it automatically refreshes the terminology cache in the background without interrupting the user
  • +2 more
View Full Story →
View and Preview Organization-Specific Terminology Configuration
high 5 pts

As a As a Peer Mentor (Likeperson)

I want to preview how my organization's custom terminology appears across all app screens before it is published

So that I can verify that labels and terms correctly reflect our organization's language standards and avoid confusion among peer mentors and contacts before a live rollout

Acceptance Criteria
  • Given I am logged in as a Coordinator, When I navigate to the terminology admin preview screen, Then I see a list of all label keys resolved with my organization's configured values
  • Given I am on the terminology preview screen, When I select a specific screen or section (e.g., activity registration, contacts), Then all labels appear as they would for a peer mentor using that screen
  • Given a label key is not yet configured for my organization, When I view the preview, Then a clear placeholder or fallback value is displayed and flagged for my attention
  • +2 more
View Full Story →
WCAG-Compliant Screen Reader Labels Resolved from Organization Terminology
high 8 pts

As a As a Peer Mentor (Likeperson)

I want all accessibility labels (semantics) used by screen readers to be resolved from the organization's dynamic terminology configuration, not hardcoded English strings

So that peer mentors and contacts who use assistive technology such as VoiceOver hear the same organization-specific language that sighted users read on screen, providing a consistent and dignified experience

Acceptance Criteria
  • Given a peer mentor uses VoiceOver on iOS, When they navigate the activity registration wizard, Then the screen reader announces organization-specific terminology (e.g., 'Register peer mentor session' instead of 'Register activity') as configured for their organization
  • Given a label key is updated in the organization's terminology configuration, When the sync completes and the user navigates the app with a screen reader, Then the updated semantic label is announced without requiring an app restart
  • Given a terminology-aware widget is rendered, When Flutter's accessibility inspector examines it, Then the semantics node carries the resolved organization label, not the raw label key string
  • +2 more
View Full Story →
Offline Terminology Cache Ensures Consistent Labels Without Connectivity
high 3 pts

As a As a Coordinator

I want the organization's terminology labels to remain fully available and consistent when peer mentors use the app in areas without internet connectivity

So that volunteer work in the field — such as home visits or remote locations — is never disrupted by missing or reverted labels that would confuse or concern users

Acceptance Criteria
  • Given a peer mentor's device has no internet connection, When they open the app, Then all terminology labels render from the local cache with no errors or placeholders
  • Given the app was previously used with connectivity and terminology was synced, When the peer mentor goes offline and registers an activity, Then all form labels, button text, and navigation items use the cached organization terminology
  • Given the device regains connectivity, When the TerminologySyncService detects the connection, Then it automatically refreshes the terminology cache in the background without interrupting the user
  • +2 more
View Full Story →
View and Preview Organization-Specific Terminology Configuration
high 5 pts

As a As a Coordinator

I want to preview how my organization's custom terminology appears across all app screens before it is published

So that I can verify that labels and terms correctly reflect our organization's language standards and avoid confusion among peer mentors and contacts before a live rollout

Acceptance Criteria
  • Given I am logged in as a Coordinator, When I navigate to the terminology admin preview screen, Then I see a list of all label keys resolved with my organization's configured values
  • Given I am on the terminology preview screen, When I select a specific screen or section (e.g., activity registration, contacts), Then all labels appear as they would for a peer mentor using that screen
  • Given a label key is not yet configured for my organization, When I view the preview, Then a clear placeholder or fallback value is displayed and flagged for my attention
  • +2 more
View Full Story →
WCAG-Compliant Screen Reader Labels Resolved from Organization Terminology
high 8 pts

As a As a Coordinator

I want all accessibility labels (semantics) used by screen readers to be resolved from the organization's dynamic terminology configuration, not hardcoded English strings

So that peer mentors and contacts who use assistive technology such as VoiceOver hear the same organization-specific language that sighted users read on screen, providing a consistent and dignified experience

Acceptance Criteria
  • Given a peer mentor uses VoiceOver on iOS, When they navigate the activity registration wizard, Then the screen reader announces organization-specific terminology (e.g., 'Register peer mentor session' instead of 'Register activity') as configured for their organization
  • Given a label key is updated in the organization's terminology configuration, When the sync completes and the user navigates the app with a screen reader, Then the updated semantic label is announced without requiring an app restart
  • Given a terminology-aware widget is rendered, When Flutter's accessibility inspector examines it, Then the semantics node carries the resolved organization label, not the raw label key string
  • +2 more
View Full Story →
Offline Terminology Cache Ensures Consistent Labels Without Connectivity
high 3 pts

As a As a Organization Administrator

I want the organization's terminology labels to remain fully available and consistent when peer mentors use the app in areas without internet connectivity

So that volunteer work in the field — such as home visits or remote locations — is never disrupted by missing or reverted labels that would confuse or concern users

Acceptance Criteria
  • Given a peer mentor's device has no internet connection, When they open the app, Then all terminology labels render from the local cache with no errors or placeholders
  • Given the app was previously used with connectivity and terminology was synced, When the peer mentor goes offline and registers an activity, Then all form labels, button text, and navigation items use the cached organization terminology
  • Given the device regains connectivity, When the TerminologySyncService detects the connection, Then it automatically refreshes the terminology cache in the background without interrupting the user
  • +2 more
View Full Story →
View and Preview Organization-Specific Terminology Configuration
high 5 pts

As a As a Organization Administrator

I want to preview how my organization's custom terminology appears across all app screens before it is published

So that I can verify that labels and terms correctly reflect our organization's language standards and avoid confusion among peer mentors and contacts before a live rollout

Acceptance Criteria
  • Given I am logged in as a Coordinator, When I navigate to the terminology admin preview screen, Then I see a list of all label keys resolved with my organization's configured values
  • Given I am on the terminology preview screen, When I select a specific screen or section (e.g., activity registration, contacts), Then all labels appear as they would for a peer mentor using that screen
  • Given a label key is not yet configured for my organization, When I view the preview, Then a clear placeholder or fallback value is displayed and flagged for my attention
  • +2 more
View Full Story →
WCAG-Compliant Screen Reader Labels Resolved from Organization Terminology
high 8 pts

As a As a Organization Administrator

I want all accessibility labels (semantics) used by screen readers to be resolved from the organization's dynamic terminology configuration, not hardcoded English strings

So that peer mentors and contacts who use assistive technology such as VoiceOver hear the same organization-specific language that sighted users read on screen, providing a consistent and dignified experience

Acceptance Criteria
  • Given a peer mentor uses VoiceOver on iOS, When they navigate the activity registration wizard, Then the screen reader announces organization-specific terminology (e.g., 'Register peer mentor session' instead of 'Register activity') as configured for their organization
  • Given a label key is updated in the organization's terminology configuration, When the sync completes and the user navigates the app with a screen reader, Then the updated semantic label is announced without requiring an app restart
  • Given a terminology-aware widget is rendered, When Flutter's accessibility inspector examines it, Then the semantics node carries the resolved organization label, not the raw label key string
  • +2 more
View Full Story →
Synchronize Terminology Configuration from Backend on App Start
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want the app to automatically fetch and cache the latest terminology configuration for my organization whenever connectivity is available

So that any updates made to organizational labels by an administrator are reflected promptly across all users' devices without requiring manual intervention or app updates

Acceptance Criteria
  • Given I open the app with network connectivity, When the app initializes, Then the TerminologySyncService fetches the latest label configuration for my organization from Supabase
  • Given a successful sync has completed, When the app is used offline afterward, Then the TerminologyCacheAdapter serves the previously fetched labels without any visible degradation
  • Given the terminology configuration on the backend has changed since my last sync, When I open the app, Then the updated labels are fetched and the UI rebuilds to reflect the changes
  • +2 more
View Full Story →
Automatic Application of Organization Terminology Across All Screens
critical 8 pts

As a As a Peer Mentor (Likeperson)

I want all text labels and terminology throughout the app to automatically reflect my organization's configured language without any manual intervention

So that peer mentors and contacts see consistent, familiar language on every screen they interact with, reinforcing organizational identity and reducing cognitive load

Acceptance Criteria
  • Given I am a Coordinator in an organization with custom terminology, When I or a peer mentor opens any screen in the app, Then all label keys are resolved to organization-specific values without visible delay
  • Given the terminology configuration has been updated on the backend, When the app next syncs, Then all screens immediately reflect the updated labels without requiring an app restart
  • Given terminology is loaded from cache for offline use, When a peer mentor uses the app without connectivity, Then resolved labels remain consistent with the last synced configuration
  • +2 more
View Full Story →
Synchronize Terminology Configuration from Backend on App Start
critical 5 pts

As a As a Coordinator

I want the app to automatically fetch and cache the latest terminology configuration for my organization whenever connectivity is available

So that any updates made to organizational labels by an administrator are reflected promptly across all users' devices without requiring manual intervention or app updates

Acceptance Criteria
  • Given I open the app with network connectivity, When the app initializes, Then the TerminologySyncService fetches the latest label configuration for my organization from Supabase
  • Given a successful sync has completed, When the app is used offline afterward, Then the TerminologyCacheAdapter serves the previously fetched labels without any visible degradation
  • Given the terminology configuration on the backend has changed since my last sync, When I open the app, Then the updated labels are fetched and the UI rebuilds to reflect the changes
  • +2 more
View Full Story →
Automatic Application of Organization Terminology Across All Screens
critical 8 pts

As a As a Coordinator

I want all text labels and terminology throughout the app to automatically reflect my organization's configured language without any manual intervention

So that peer mentors and contacts see consistent, familiar language on every screen they interact with, reinforcing organizational identity and reducing cognitive load

Acceptance Criteria
  • Given I am a Coordinator in an organization with custom terminology, When I or a peer mentor opens any screen in the app, Then all label keys are resolved to organization-specific values without visible delay
  • Given the terminology configuration has been updated on the backend, When the app next syncs, Then all screens immediately reflect the updated labels without requiring an app restart
  • Given terminology is loaded from cache for offline use, When a peer mentor uses the app without connectivity, Then resolved labels remain consistent with the last synced configuration
  • +2 more
View Full Story →
Synchronize Terminology Configuration from Backend on App Start
critical 5 pts

As a As a Organization Administrator

I want the app to automatically fetch and cache the latest terminology configuration for my organization whenever connectivity is available

So that any updates made to organizational labels by an administrator are reflected promptly across all users' devices without requiring manual intervention or app updates

Acceptance Criteria
  • Given I open the app with network connectivity, When the app initializes, Then the TerminologySyncService fetches the latest label configuration for my organization from Supabase
  • Given a successful sync has completed, When the app is used offline afterward, Then the TerminologyCacheAdapter serves the previously fetched labels without any visible degradation
  • Given the terminology configuration on the backend has changed since my last sync, When I open the app, Then the updated labels are fetched and the UI rebuilds to reflect the changes
  • +2 more
View Full Story →
Automatic Application of Organization Terminology Across All Screens
critical 8 pts

As a As a Organization Administrator

I want all text labels and terminology throughout the app to automatically reflect my organization's configured language without any manual intervention

So that peer mentors and contacts see consistent, familiar language on every screen they interact with, reinforcing organizational identity and reducing cognitive load

Acceptance Criteria
  • Given I am a Coordinator in an organization with custom terminology, When I or a peer mentor opens any screen in the app, Then all label keys are resolved to organization-specific values without visible delay
  • Given the terminology configuration has been updated on the backend, When the app next syncs, Then all screens immediately reflect the updated labels without requiring an app restart
  • Given terminology is loaded from cache for offline use, When a peer mentor uses the app without connectivity, Then resolved labels remain consistent with the last synced configuration
  • +2 more
View Full Story →