UI Components

Service Components

Data Components

Infrastructure Components

Shared Components

Authentication Repository

Data layer repository providing a stable interface for authentication persistence operations. Manage...

shared low shared
Keyboard-Aware Layout Utility

Utility widget or mixin providing keyboard-aware scrolling behavior for form screens. Automatically ...

shared low shared
Supabase Auth Client

Infrastructure wrapper around the Supabase Flutter SDK's auth module. Provides an injectable singlet...

shared low shared
Authentication Service

Application-layer service orchestrating authentication flows against the Supabase Auth backend. Abst...

shared medium shared
Auth Token Store

Secure local storage adapter for OAuth tokens (Vipps, BankID) and Supabase session data. Uses Flutte...

shared low shared
Deep Link / OAuth Redirect Handler

Intercepts incoming deep links during OAuth flows for both Vipps and BankID. Registers the app's cus...

shared medium shared
Secure Storage Adapter

Thin wrapper around Flutter Secure Storage providing a consistent interface for encrypted local pers...

shared low shared
Authentication Session Manager

Centralized Supabase session lifecycle manager shared across all authentication methods. Persists, r...

shared medium shared
Biometric Authentication Service

Wraps Flutter's local_auth package to manage device-level biometric authentication for returning use...

shared medium shared
Biometric Authentication Service

Wraps Flutter's local_auth package to manage device-level biometric authentication for returning use...

shared medium shared
Secure Session Storage

Encrypted key-value store backed by flutter_secure_storage that persists the Supabase session token,...

shared low shared
Supabase Session Manager

Centralized service responsible for Supabase session lifecycle operations including token refresh, s...

shared medium shared
Biometric Authentication Service

Core service that wraps the Flutter local_auth package and orchestrates the full biometric authentic...

shared medium shared
Permission Checker Service

Evaluates whether the current active role is authorized to access a specific screen, action, or data...

shared medium shared
Role State Manager

BLoC/Riverpod-based state manager that holds the current active role and exposes role change events ...

shared medium shared
Role Switch Widget

Shared widget that allows users holding multiple roles to switch their active role within the app se...

shared medium shared
Role-Aware Bottom Navigation

Bottom navigation bar that conditionally renders tabs and restricts navigation options based on the ...

shared medium shared
URL Launcher Utility

Thin wrapper around the Flutter url_launcher package used by the admin portal link widget to open ex...

shared low shared
No-Access Route Guard

GoRouter redirect callback that intercepts navigation for users whose role is flagged as mobile-bloc...

shared low shared
Local Storage Adapter

Thin wrapper around the device key-value store (SharedPreferences on Flutter) providing a typed, asy...

shared low shared
Supabase Activity Client

Low-level Supabase client wrapper scoped to the activities table. Abstracts PostgREST query construc...

shared low shared
Activity Type Cache Provider

Riverpod AsyncNotifier that fetches activity types on login and holds them in memory for the session...

shared medium shared
Organization Labels Provider

Riverpod provider that loads and exposes the per-organisation terminology overrides used throughout ...

shared low shared
Supabase Client

Shared singleton that initialises and exposes the Supabase client instance used by all repository la...

shared low shared
Activity Type Metadata Resolver

Service that reads the JSON metadata column of an activity type and exposes strongly typed accessors...

shared low shared
Activity Type Selection Screen

Mobile screen shown during the activity registration wizard that allows a peer mentor to pick an act...

shared low shared
Organisation Field Config Loader

Fetches and parses the JSON field configuration stored in Supabase that defines org-specific form fi...

shared medium shared
Speech-to-Text Adapter

Wraps Flutter's speech_to_text package and exposes a simplified interface for per-field transcriptio...

shared medium shared
Speech-to-Text Field Overlay

A per-field microphone trigger widget that activates Flutter's speech_to_text package and appends th...

shared medium shared
Receipt Storage Adapter

Adapter encapsulating all interactions with Supabase Storage for receipt image management. Handles i...

shared medium shared
Receipt Capture Widget

Reusable widget for capturing or selecting a receipt photo via the device camera or gallery using im...

shared medium shared
Proxy Contact List Provider

Riverpod provider that exposes the coordinator's peer mentor contact list filtered and ready for use...

shared low shared
Peer Mentor Single Selector

Searchable list of peer mentors drawn from the coordinator's existing contact list, allowing selecti...

shared low shared
Proxy Audit Badge Widget

Reusable inline widget that renders a subtle 'Recorded by coordinator' badge on any activity card or...

shared low shared
Chapter Scope Resolver

Service that determines the set of chapter IDs a coordinator is authorized to query. Handles NHF's m...

shared medium shared
File Download Handler

Flutter utility that receives a file URL or byte payload from the edge function and triggers the nat...

shared low shared
Organisation Hierarchy Resolver

Resolves the organisational scope for export queries. Given a scope ID and level (local/region/natio...

shared medium shared
Export Period Picker

Date range picker pre-configured with common Bufdir reporting periods (quarterly, annual). Users can...

shared low shared
Duplicate Reviewed Flag Middleware

Lightweight interceptor layer that injects the duplicate_reviewed field into the activity insert pay...

shared low shared
Contact Repository

Data access layer for contacts and peer mentors backed by Supabase. All queries are scoped by organi...

shared medium shared
Contact RLS Query Builder

Utility that constructs Supabase query filters aligned with the Row Level Security policies for the ...

shared low shared
Contact Card Widget

Reusable card widget displaying a contact's key information (name, role, organization, notes snippet...

shared low shared
Contact Search Bar

Accessible search input component with debounce support for filtering contacts by name and notes. Bu...

shared low shared
Peer Mentor Card Widget

Reusable card widget for displaying peer mentor-specific information including availability status, ...

shared low shared
Contact Detail Repository

Data access layer for retrieving and updating full contact profiles, including extended attributes l...

shared medium shared
Contact Form Validator

Client-side validation utilities for the edit contact form, enforcing required field rules, format c...

shared low shared
Activity History List

Scrollable list section within the contact detail screen showing the contact's past activities, date...

shared low shared
Multi-Chapter Affiliation Chip Widget

Reusable chip/tag widget displaying a contact's membership across up to 5 local chapters simultaneou...

shared medium shared
Peer Mentor Repository

Data access layer for peer mentor profile records in Supabase. Provides typed Dart models for peer m...

shared low shared
Design Token Theme

Flutter ThemeData extension exposing the project's design token system (colors, typography, spacing,...

shared low shared
Organization Labels Provider

Riverpod provider supplying organization-specific terminology strings (e.g., 'peer mentor' vs 'likep...

shared low shared
Supabase Client Provider

Riverpod provider exposing the initialized Supabase client instance to all repository layers. Centra...

shared low shared
Certification Status Badge

Reusable widget rendering a pill-shaped badge indicating a peer mentor's certification state: active...

shared low shared
Mentor Status Repository

Data access layer for reading and writing peer mentor status fields in Supabase. Manages the status ...

shared low shared
Coordinator Notification Service

Service responsible for delivering push and in-app notifications to coordinators when a peer mentor ...

shared medium shared
Contact Chapter Repository

Data access layer for the contact_chapters junction table in Supabase, providing CRUD operations for...

shared medium shared
Duplicate Activity Detection Service

Compares a pending activity submission against existing activity records for the same contact across...

shared high shared
Duplicate Activity Warning Dialog

Dismissible warning dialog surfaced during activity submission when the system detects a potential d...

shared medium shared
Contact Cache Sync Repository

Maintains a local Drift SQLite cache of contacts and notes fetched from Supabase, used by the offlin...

shared low shared
Search Debounce Utility

Wraps a RxDart or Timer-based debounce around the search input stream to prevent excessive Supabase ...

shared low shared
Mentor Multi-Select Widget

Reusable multi-select contact list widget that allows coordinators to pick one or more peer mentors ...

shared medium shared
Mentor Filter Service

Encapsulates filtering logic for mentor search criteria including availability status and specializa...

shared low shared
Map Filter Panel

Collapsible filter panel allowing coordinators to narrow visible mentor markers by availability stat...

shared medium shared
Expense Type Analytics Tracker

Lightweight event tracker that records which expense types are selected and how often mutual exclusi...

shared low shared
Organisation Rate Configuration Repository

Fetches and caches the organisation-level per-km reimbursement rate and auto-approval threshold from...

shared low shared
Receipt Image Picker Integration

Wraps the Flutter image_picker package to provide a unified interface for both camera capture and ga...

shared low shared
Receipt Threshold Validator

Evaluates whether a receipt attachment is required or optional based on the org-configurable monetar...

shared low shared
Approval Status Notification Service

Sends push notifications to the submitting peer mentor when their claim status changes (approved or ...

shared medium shared
Threshold Evaluation Service

Shared Dart utility implementing the threshold decision logic used both client-side (immediate UX fe...

shared medium shared
Claim Status Badge

Compact, reusable chip widget that renders the current status of a claim (draft, submitted, approved...

shared low shared
Declaration Encryption Service

Encrypts confidentiality declaration content before upload to Supabase Storage, consistent with the ...

shared high shared
Organization Feature Flag Service

Provides read access to organization-level feature flags, including the driver administration featur...

shared low shared
CSV / JSON File Generator

Utility that converts structured export records into a downloadable CSV or JSON file. Handles encodi...

shared medium shared
Export Date Range Picker

Reusable UI component for selecting a configurable start and end date for export operations. Used in...

shared low shared
Multi-Organization Data Isolator

Enforces strict per-organization data isolation across all database queries, ensuring that NHF, Blin...

shared medium shared
Participant Deduplication Service

Ensures that unique participant counts are accurate by detecting and excluding double-counted record...

shared high shared
Reporting Period Service

Manages the definition and boundaries of Bufdir reporting periods (typically annual). Determines whi...

shared medium shared
Bufdir Aggregation Repository

Read-only data access layer that queries the aggregated activity records used by the Bufdir reportin...

shared low shared
Custom Date Range Picker

Reusable date range selection widget used when predefined presets do not cover the required period. ...

shared low shared
Report File Storage Client

Supabase Storage adapter managing upload, retrieval, and signed URL generation for exported Bufdir r...

shared low shared
Coordinator Role Guard

Utility that enforces coordinator or higher role authorization before granting access to proxy regis...

shared low shared
Activity Attribution Service

Manages the distinction between who registered an activity and who it is attributed to. Ensures ever...

shared low shared
Proxy Duplicate Detection Service

Detects conflicting activity entries by querying all registrations matching the triple (peer mentor ...

shared medium shared
Duplicate Activity Warning Dialog

Modal dialog displayed when the duplicate detection service identifies a conflicting activity record...

shared low shared
Proxy Activity Form

Reusable activity form pre-configured for proxy entry. Shows all standard activity fields (date, typ...

shared medium shared
Proxy Peer Mentor Selector

Search and select widget that lets a coordinator pick one or more peer mentors from their chapter's ...

shared medium shared
Certification Status Repository

Supabase data access layer for peer mentor certification records. Stores certification type, issue d...

shared low shared
Peer Mentor Status Repository

Supabase data access layer for peer mentor status records and pause history. Manages the peer_mentor...

shared medium shared
Nightly Job Scheduler

Infrastructure component that schedules and triggers backend cron jobs, specifically the nightly cer...

shared medium shared
Pause Management Service

Core business logic service handling all peer mentor status transitions. Enforces valid state machin...

shared medium shared
Pause Notification Service

Handles dispatch of push and in-app notifications to coordinators when a peer mentor's pause status ...

shared medium shared
Expected Return Date Picker

Reusable date selection widget used within the pause activation flow to capture an optional expected...

shared low shared
Pause Activation Screen

Full-screen modal allowing a peer mentor to activate or lift a pause. Collects optional expected ret...

shared low shared
Pause Status Indicator

Reusable badge/chip widget rendering the peer mentor's status enum (active, paused, expired_cert, re...

shared low shared
Supabase RLS Policy Configuration

Database-level row-level security policy definitions for org_admin and super_admin roles in Supabase...

shared high shared
Admin Export Service

Generates CSV and Excel exports of org-level data for Bufdir grant reporting and internal governance...

shared medium shared
Admin Row-Level Security Guard

Middleware service that enforces Supabase row-level security policies for org_admin and super_admin ...

shared high shared
Organisation Hierarchy Service

Resolves and traverses the organisation tree structure, supporting both NHF's deeply nested model (n...

shared high shared
User Management Service

Business logic layer for creating, updating, deactivating, and role-assigning user accounts within a...

shared high shared
Admin KPI Stat Widget

Reusable stat card widget displaying a single KPI metric (e.g., active peer mentors, activities this...

shared low shared
Organisation Hierarchy Navigator

Tree-based navigation component for browsing deeply nested org structures (NHF: national association...

shared high shared
Export File Storage Adapter

Uploads generated export files and attachment ZIPs to Supabase Storage under organisation-scoped pat...

shared low shared
Bufdir Period Selector Widget

Reusable date-range picker pre-configured for common Bufdir reporting periods (quarter, half-year, f...

shared low shared
Export History List

Displays the audit log of past Bufdir exports for the current organisation, showing who triggered ea...

shared medium shared
Supabase Storage Adapter

Wraps the Supabase Storage SDK to provide a typed interface for file upload, deletion, and signed UR...

shared low shared
Peer Mentor Pause Management Service

Shared service that handles transitioning a peer mentor into and out of paused status. Used by the c...

shared medium shared
Push Notification Service

Shared infrastructure service for dispatching push notifications to mobile devices. Used by certific...

shared medium shared
Statistics Cache Manager

In-memory cache for statistics query results with a 15-minute TTL to avoid repeated heavy Supabase q...

shared low shared
fl_chart Adapter

Thin adapter layer wrapping the fl_chart Flutter library to provide typed, app-specific chart config...

shared medium shared
Role Access Validator

Validates and scopes statistics access based on user role. Coordinators may only see their own peer ...

shared low shared
Activity Type Donut Chart

Donut chart built with fl_chart showing breakdown of activities by type for the selected coordinator...

shared medium shared
Monthly Activity Bar Chart

Bar chart built with fl_chart showing activity count per month for the selected period. Supports tap...

shared medium shared
Statistics Period Filter Bar

Horizontal filter bar allowing selection of time period (this month, last 3 months, this year, custo...

shared low shared
Statistics Summary Cards

Row of stat cards displaying key coordinator KPIs: total activities this month and year-to-date, hou...

shared low shared
Notification Badge Widget

Unread count badge overlaid on the Notifications tab in the bottom navigation bar. Subscribes to a r...

shared low shared
In-App Notification Repository

Data access layer for persisting and retrieving in-app notification records displayed in the Notific...

shared low shared
Push Notification Service

Shared infrastructure service that delivers push notifications to mobile devices. Used by the remind...

shared low shared
FCM Push Notification Sender

Shared infrastructure component responsible for sending push notifications via Firebase Cloud Messag...

shared medium shared
Certificate Expiry Status Indicator

Reusable widget that visually communicates a peer mentor's certificate status across multiple surfac...

shared low shared
Pause Status Record Repository

Data access layer for reading peer mentor pause status records and resolving coordinator relationshi...

shared low shared
FCM Notification Dispatcher

Shared Firebase Cloud Messaging dispatch function that sends push notifications to device tokens and...

shared medium shared
Push Notification Dispatcher

Shared infrastructure component responsible for sending push notifications via the platform push ser...

shared medium shared
Supabase Realtime Subscription Service

Manages Supabase Realtime channel subscriptions for the notifications table, scoped to the current u...

shared medium shared
Animated Stat Card Widget

Reusable animated card that reveals a single statistic (e.g., total hours volunteered, number of peo...

shared medium shared
Peer Mentor Stats Aggregator

Computes aggregated activity statistics for a peer mentor required by badge criteria evaluation, inc...

shared medium shared
Activity Aggregation Repository

Executes aggregation queries over the activity table to compute session counts, total hours, and oth...

shared medium shared
Organisation Data Isolation Guard

Middleware utility that enforces organisation-scoped row-level security on all summary-related Supab...

shared low shared
Push Notification Dispatcher

Sends push notifications to peer mentors and coordinators when their periodic summary is ready. Wrap...

shared medium shared
Notification Preferences Repository

Persistence layer for user-level notification preference records keyed by user ID and scenario type....

shared low shared
Scenario Notification Repository

Data access layer for persisting and querying scenario-based push notification records, including tr...

shared medium shared
Push Notification Dispatcher

Thin infrastructure wrapper around the FCM/APNs push delivery layer. Accepts a normalised notificati...

shared medium shared
Notification Preference Service

Business logic layer for reading, updating, and enforcing notification opt-out preferences per user ...

shared low shared
Scenario Deep-Link Router

Mobile-side service that parses incoming push notification payloads and routes the user to the corre...

shared medium shared
Scenario Notification Content Builder

Service responsible for generating localised, personalised notification copy for each scenario type....

shared medium shared
In-App Notification Banner

WCAG 2.2 AA compliant in-app banner component that renders scenario-based notification messages whil...

shared low shared
Deep Link Handler

Processes incoming deep links containing referral tokens when a new member taps the referral URL. Ex...

shared medium shared
QR Code Generator

Utility wrapper around a Flutter QR code rendering package (e.g., qr_flutter). Accepts a referral UR...

shared low shared
Share Sheet Bridge

Wraps the Flutter Share plugin (share_plus) to invoke the native iOS and Android system share sheet....

shared low shared
Badge Criteria Integration

Acts as the bridge between recruitment attribution events and the badge and recognition system. Eval...

shared medium shared
Activity Summary Aggregator

Reads the volunteer's registered activity data and aggregates session count and total duration to pr...

shared low shared
Sensitive Field Configuration

Defines and persists the list of form fields throughout the app that are designated as containing se...

shared low shared
Semantics Service Facade

Abstracts Flutter's SemanticsService and platform accessibility APIs behind a unified interface to s...

shared medium shared
Focus Management Service

Centralizes screen reader focus management for navigation transitions, dialog opens/closes, and dyna...

shared medium shared
Screen Reader Detection Service

Detects whether a screen reader (VoiceOver or TalkBack) is active on the device and exposes this sta...

shared medium shared
Sensitive Field Privacy Guard

Business logic service that intercepts screen reader focus events on fields flagged as sensitive and...

shared high shared
Accessible Modal Sheet Widget

Wraps bottom sheets and modal dialogs with correct focus trapping, initial focus placement, and focu...

shared high shared
Live Region Announcer

Provides live-region announcements for asynchronous state changes such as loading completions, form ...

shared medium shared
Semantics Wrapper Widget

A reusable Flutter widget that wraps interactive elements with Flutter Semantics properties, providi...

shared medium shared
Sensitive Field Warning Dialog

An OS-level alert dialog that fires before a screen reader vocalises a field flagged as containing s...

shared high shared
Error Message Registry

Static registry mapping every application error code to a plain-language two-part message object con...

shared low shared
Help Content Registry

Stores and serves inline contextual help texts keyed by screen identifier and field identifier. Load...

shared low shared
Wizard Draft Repository

Persists and retrieves partial wizard answers locally using shared preferences or Hive, enabling pau...

shared low shared
Accessibility Design Token Enforcer

Ensures all UI components consume colour, typography, and spacing values exclusively from the projec...

shared medium shared
Plain Language Content Service

Centrally manages all user-facing copy to ensure it meets plain-language guidelines. Provides keyed ...

shared medium shared
Wizard State Manager

BLoC-based state manager for all multi-step wizards, implementing pause-and-resume semantics. Persis...

shared medium shared
Confirm Before Submit Screen

A reusable summary screen inserted as the final step of every activity or report wizard. Lists all e...

shared medium shared
Inline Contextual Help Widget

Provides field-level and screen-level help text inline within the UI, replacing separate help sectio...

shared low shared
Labelled Navigation Bar

Flutter NavigationBar implementation that enforces labelled icons — no icon-only buttons. All tabs d...

shared low shared
Plain Language Error Display

Renders form and server errors in plain Norwegian using a two-part structure: what went wrong and ho...

shared low shared
Single-Action Screen Layout

A composable screen wrapper that enforces the cognitive accessibility rule of at most three primary ...

shared medium shared
Wizard Progress Indicator

Displays current step position and total step count in all multi-step wizards. Enforces the maximum ...

shared low shared
Design Token Provider

Central repository of all design tokens (colors, typography, spacing, sizing, radii) for the applica...

shared medium shared
Accessible Theme Builder

Assembles the final Flutter ThemeData by composing the contrast-safe color scheme, the accessible te...

shared medium shared
Accessible Text Style System

Provides a Flutter TextTheme derived entirely from design tokens, ensuring all body copy uses FontWe...

shared medium shared
Accessible Touch Target Wrapper

A Flutter widget wrapper that enforces a minimum 44×44 pt tappable area for all interactive controls...

shared low shared
Contrast-Safe Color Palette Widget

A Flutter ThemeData color scheme built exclusively from contrast-verified token pairs. Exposes foreg...

shared medium shared
Navigation Route Configuration

Central GoRouter configuration that defines all application routes with accessibility constraints bu...

shared medium shared
Tab State Manager

A Riverpod-backed service that tracks and restores per-tab navigation state using StatefulShellRoute...

shared medium shared
Accessible Bottom Navigation Bar

A persistent five-tab bottom navigation bar built on StatefulShellRoute that preserves tab state acr...

shared medium shared
Modal Close Button

A clearly labelled close IconButton injected into every ModalBottomSheet, AlertDialog, and full-scre...

shared low shared
Persistent Back Button

A back control that appears on every screen that is not a root tab destination, providing an explici...

shared low shared
Vertical Scroll Container

A scroll view wrapper that enforces vertical-only scrolling throughout the application, preventing h...

shared low shared
Accessibility Live Region Announcer

A shared utility that posts accessibility announcements to the platform's screen reader via Flutter'...

shared low shared
Organization Repository

Data access layer responsible for fetching, caching, and exposing organization records from Supabase...

shared medium shared
Feature Flag Provider

Infrastructure component that loads and exposes the organization-specific feature flag configuration...

shared low shared
Secure Storage Adapter

Abstraction layer over Flutter's platform secure storage (Keychain on iOS, Keystore on Android) used...

shared low shared
Supabase RLS Tenant Scope Configurator

Infrastructure utility that injects the selected organization ID into the Supabase client configurat...

shared medium shared
Organization Route Guard

go_router redirect guard that intercepts navigation for unauthenticated users or users without an ac...

shared medium shared
Tenant Context Service

Central service responsible for seeding and maintaining the active tenant context after an organizat...

shared high shared
Organization Card Widget

Reusable card widget that displays a single partner organization with its logo, display name, and a ...

shared low shared
Terminology Local Cache Adapter

Persists terminology maps to device-local storage (e.g., SharedPreferences or Hive) so that labels a...

shared low shared
Label Key Registry

A compile-time constant registry of all label keys used across the application, defined as a Dart ab...

shared low shared
Terminology Riverpod Providers

Defines the Riverpod provider graph for the terminology system: the root organizationLabelsProvider,...

shared low shared
WCAG Semantics Label Resolver

Infrastructure utility that bridges the terminology system with Flutter's Semantics tree to satisfy ...

shared low shared
Label Key Resolver Service

Stateless utility service that applies resolution logic to raw terminology maps: handles missing key...

shared low shared
Organization Labels Notifier

A Riverpod StateNotifier that manages the active organization's terminology map lifecycle. On login ...

shared medium shared
Terminology-Aware Text Widget

A drop-in replacement for Flutter Text widgets that automatically resolves label keys through the ac...

shared low shared
Feature Flag Key Constants

A centralized constants file defining all valid feature flag keys as typed string constants. Prevent...

shared low shared
FeatureFlagProvider (Riverpod)

A Riverpod provider that exposes the resolved feature flag map for the currently active organization...

shared medium shared
FeatureGate Widget

A conditional rendering wrapper widget that gates any child widget behind a single boolean feature f...

shared low shared
Organization Unit Repository

Supabase data access layer for the organization_units table which implements a recursive adjacency-l...

shared high shared
Unit Assignment Repository

Data access layer for the user_organization_unit_assignments junction table. Manages user-to-unit re...

shared medium shared
RLS Policy Manager

Manages Supabase Row Level Security policies that join through the unit assignment junction table to...

shared high shared
Access Scope Service

Determines the set of organization units a given user may read or write data for, based on their ass...

shared high shared
Hierarchy Aggregation Service

Rolls activity data upward through the hierarchy tree from local chapter level to regional and natio...

shared high shared
Hierarchy Service

Core business logic service for managing organization unit trees. Wraps Supabase queries for the rec...

shared high shared
Unit Assignment Service

Manages the junction table that links users to one or more organization units. Enforces the is_prima...

shared medium shared
Chapter Switcher

Slack-style workspace-switching bottom sheet that appears for users (typically NHF peer mentors) who...

shared medium shared