Components
729 components across 4 layers
UI Components
A reusable card widget that displays a single organization's logo, name, and visual branding. Handle...
The pre-login entry point screen that presents available organizations for the user to select before...
WCAG 2.2 AA compliant email and password form widget. Renders accessible AppTextField components for...
The root screen for email/password authentication, composing the login form within a keyboard-aware,...
Accessible icon button embedded within the password field that toggles between obscured and visible ...
Screen presented after organization selection that lets the user choose between BankID, Vipps, or em...
Service Components
Business logic layer that manages the organization selection lifecycle. Loads the list of available ...
Application-layer service orchestrating authentication flows against the Supabase Auth backend. Abst...
Pure validation service containing rules for email format and password constraints. Returns structur...
BLoC (or Riverpod StateNotifier) managing the complete state of the login form. Handles field input ...
Centralized Supabase session lifecycle manager shared across all authentication methods. Persists, r...
Manages the BankID authentication lifecycle through a third-party BankID broker. Initiates the BankI...
Data Components
Data access layer responsible for reading and writing the selected organization ID to device-local s...
Data layer repository providing a stable interface for authentication persistence operations. Manage...
Secure local storage adapter for OAuth tokens (Vipps, BankID) and Supabase session data. Uses Flutte...
Manages persistence and retrieval of verified user identity data in Supabase, including personnummer...
Encrypted key-value store backed by flutter_secure_storage that persists the Supabase session token,...
Fetches and caches user role assignments from Supabase, providing a data access layer between the ro...
Infrastructure Components
Thin wrapper around the SharedPreferences plugin providing typed read/write helpers. Isolates the re...
Infrastructure component that loads and exposes the terminology and label mappings for the selected ...
Utility widget or mixin providing keyboard-aware scrolling behavior for form screens. Automatically ...
Infrastructure wrapper around the Supabase Flutter SDK's auth module. Provides an injectable singlet...
Integration client for the third-party BankID broker service. Manages session initiation requests, W...
Intercepts incoming deep links during OAuth flows for both Vipps and BankID. Registers the app's cus...
Shared Components
Data layer repository providing a stable interface for authentication persistence operations. Manage...
Utility widget or mixin providing keyboard-aware scrolling behavior for form screens. Automatically ...
Infrastructure wrapper around the Supabase Flutter SDK's auth module. Provides an injectable singlet...
Application-layer service orchestrating authentication flows against the Supabase Auth backend. Abst...
Secure local storage adapter for OAuth tokens (Vipps, BankID) and Supabase session data. Uses Flutte...
Intercepts incoming deep links during OAuth flows for both Vipps and BankID. Registers the app's cus...
Thin wrapper around Flutter Secure Storage providing a consistent interface for encrypted local pers...
Centralized Supabase session lifecycle manager shared across all authentication methods. Persists, r...
Wraps Flutter's local_auth package to manage device-level biometric authentication for returning use...
Wraps Flutter's local_auth package to manage device-level biometric authentication for returning use...
Encrypted key-value store backed by flutter_secure_storage that persists the Supabase session token,...
Centralized service responsible for Supabase session lifecycle operations including token refresh, s...
Core service that wraps the Flutter local_auth package and orchestrates the full biometric authentic...
Evaluates whether the current active role is authorized to access a specific screen, action, or data...
BLoC/Riverpod-based state manager that holds the current active role and exposes role change events ...
Shared widget that allows users holding multiple roles to switch their active role within the app se...
Bottom navigation bar that conditionally renders tabs and restricts navigation options based on the ...
Thin wrapper around the Flutter url_launcher package used by the admin portal link widget to open ex...
GoRouter redirect callback that intercepts navigation for users whose role is flagged as mobile-bloc...
Thin wrapper around the device key-value store (SharedPreferences on Flutter) providing a typed, asy...
Low-level Supabase client wrapper scoped to the activities table. Abstracts PostgREST query construc...
Riverpod AsyncNotifier that fetches activity types on login and holds them in memory for the session...
Riverpod provider that loads and exposes the per-organisation terminology overrides used throughout ...
Shared singleton that initialises and exposes the Supabase client instance used by all repository la...
Service that reads the JSON metadata column of an activity type and exposes strongly typed accessors...
Mobile screen shown during the activity registration wizard that allows a peer mentor to pick an act...
Fetches and parses the JSON field configuration stored in Supabase that defines org-specific form fi...
Wraps Flutter's speech_to_text package and exposes a simplified interface for per-field transcriptio...
A per-field microphone trigger widget that activates Flutter's speech_to_text package and appends th...
Adapter encapsulating all interactions with Supabase Storage for receipt image management. Handles i...
Reusable widget for capturing or selecting a receipt photo via the device camera or gallery using im...
Riverpod provider that exposes the coordinator's peer mentor contact list filtered and ready for use...
Searchable list of peer mentors drawn from the coordinator's existing contact list, allowing selecti...
Reusable inline widget that renders a subtle 'Recorded by coordinator' badge on any activity card or...
Service that determines the set of chapter IDs a coordinator is authorized to query. Handles NHF's m...
Flutter utility that receives a file URL or byte payload from the edge function and triggers the nat...
Resolves the organisational scope for export queries. Given a scope ID and level (local/region/natio...
Date range picker pre-configured with common Bufdir reporting periods (quarterly, annual). Users can...
Lightweight interceptor layer that injects the duplicate_reviewed field into the activity insert pay...
Data access layer for contacts and peer mentors backed by Supabase. All queries are scoped by organi...
Utility that constructs Supabase query filters aligned with the Row Level Security policies for the ...
Reusable card widget displaying a contact's key information (name, role, organization, notes snippet...
Accessible search input component with debounce support for filtering contacts by name and notes. Bu...
Reusable card widget for displaying peer mentor-specific information including availability status, ...
Data access layer for retrieving and updating full contact profiles, including extended attributes l...
Client-side validation utilities for the edit contact form, enforcing required field rules, format c...
Scrollable list section within the contact detail screen showing the contact's past activities, date...
Reusable chip/tag widget displaying a contact's membership across up to 5 local chapters simultaneou...
Data access layer for peer mentor profile records in Supabase. Provides typed Dart models for peer m...
Flutter ThemeData extension exposing the project's design token system (colors, typography, spacing,...
Riverpod provider supplying organization-specific terminology strings (e.g., 'peer mentor' vs 'likep...
Riverpod provider exposing the initialized Supabase client instance to all repository layers. Centra...
Reusable widget rendering a pill-shaped badge indicating a peer mentor's certification state: active...
Data access layer for reading and writing peer mentor status fields in Supabase. Manages the status ...
Service responsible for delivering push and in-app notifications to coordinators when a peer mentor ...
Data access layer for the contact_chapters junction table in Supabase, providing CRUD operations for...
Compares a pending activity submission against existing activity records for the same contact across...
Dismissible warning dialog surfaced during activity submission when the system detects a potential d...
Maintains a local Drift SQLite cache of contacts and notes fetched from Supabase, used by the offlin...
Wraps a RxDart or Timer-based debounce around the search input stream to prevent excessive Supabase ...
Reusable multi-select contact list widget that allows coordinators to pick one or more peer mentors ...
Encapsulates filtering logic for mentor search criteria including availability status and specializa...
Collapsible filter panel allowing coordinators to narrow visible mentor markers by availability stat...
Lightweight event tracker that records which expense types are selected and how often mutual exclusi...
Fetches and caches the organisation-level per-km reimbursement rate and auto-approval threshold from...
Wraps the Flutter image_picker package to provide a unified interface for both camera capture and ga...
Evaluates whether a receipt attachment is required or optional based on the org-configurable monetar...
Sends push notifications to the submitting peer mentor when their claim status changes (approved or ...
Shared Dart utility implementing the threshold decision logic used both client-side (immediate UX fe...
Compact, reusable chip widget that renders the current status of a claim (draft, submitted, approved...
Encrypts confidentiality declaration content before upload to Supabase Storage, consistent with the ...
Provides read access to organization-level feature flags, including the driver administration featur...
Utility that converts structured export records into a downloadable CSV or JSON file. Handles encodi...
Reusable UI component for selecting a configurable start and end date for export operations. Used in...
Enforces strict per-organization data isolation across all database queries, ensuring that NHF, Blin...
Ensures that unique participant counts are accurate by detecting and excluding double-counted record...
Manages the definition and boundaries of Bufdir reporting periods (typically annual). Determines whi...
Read-only data access layer that queries the aggregated activity records used by the Bufdir reportin...
Reusable date range selection widget used when predefined presets do not cover the required period. ...
Supabase Storage adapter managing upload, retrieval, and signed URL generation for exported Bufdir r...
Utility that enforces coordinator or higher role authorization before granting access to proxy regis...
Manages the distinction between who registered an activity and who it is attributed to. Ensures ever...
Detects conflicting activity entries by querying all registrations matching the triple (peer mentor ...
Modal dialog displayed when the duplicate detection service identifies a conflicting activity record...
Reusable activity form pre-configured for proxy entry. Shows all standard activity fields (date, typ...
Search and select widget that lets a coordinator pick one or more peer mentors from their chapter's ...
Supabase data access layer for peer mentor certification records. Stores certification type, issue d...
Supabase data access layer for peer mentor status records and pause history. Manages the peer_mentor...
Infrastructure component that schedules and triggers backend cron jobs, specifically the nightly cer...
Core business logic service handling all peer mentor status transitions. Enforces valid state machin...
Handles dispatch of push and in-app notifications to coordinators when a peer mentor's pause status ...
Reusable date selection widget used within the pause activation flow to capture an optional expected...
Full-screen modal allowing a peer mentor to activate or lift a pause. Collects optional expected ret...
Reusable badge/chip widget rendering the peer mentor's status enum (active, paused, expired_cert, re...
Database-level row-level security policy definitions for org_admin and super_admin roles in Supabase...
Generates CSV and Excel exports of org-level data for Bufdir grant reporting and internal governance...
Middleware service that enforces Supabase row-level security policies for org_admin and super_admin ...
Resolves and traverses the organisation tree structure, supporting both NHF's deeply nested model (n...
Business logic layer for creating, updating, deactivating, and role-assigning user accounts within a...
Reusable stat card widget displaying a single KPI metric (e.g., active peer mentors, activities this...
Tree-based navigation component for browsing deeply nested org structures (NHF: national association...
Uploads generated export files and attachment ZIPs to Supabase Storage under organisation-scoped pat...
Reusable date-range picker pre-configured for common Bufdir reporting periods (quarter, half-year, f...
Displays the audit log of past Bufdir exports for the current organisation, showing who triggered ea...
Wraps the Supabase Storage SDK to provide a typed interface for file upload, deletion, and signed UR...
Shared service that handles transitioning a peer mentor into and out of paused status. Used by the c...
Shared infrastructure service for dispatching push notifications to mobile devices. Used by certific...
In-memory cache for statistics query results with a 15-minute TTL to avoid repeated heavy Supabase q...
Thin adapter layer wrapping the fl_chart Flutter library to provide typed, app-specific chart config...
Validates and scopes statistics access based on user role. Coordinators may only see their own peer ...
Donut chart built with fl_chart showing breakdown of activities by type for the selected coordinator...
Bar chart built with fl_chart showing activity count per month for the selected period. Supports tap...
Horizontal filter bar allowing selection of time period (this month, last 3 months, this year, custo...
Row of stat cards displaying key coordinator KPIs: total activities this month and year-to-date, hou...
Unread count badge overlaid on the Notifications tab in the bottom navigation bar. Subscribes to a r...
Data access layer for persisting and retrieving in-app notification records displayed in the Notific...
Shared infrastructure service that delivers push notifications to mobile devices. Used by the remind...
Shared infrastructure component responsible for sending push notifications via Firebase Cloud Messag...
Reusable widget that visually communicates a peer mentor's certificate status across multiple surfac...
Data access layer for reading peer mentor pause status records and resolving coordinator relationshi...
Shared Firebase Cloud Messaging dispatch function that sends push notifications to device tokens and...
Shared infrastructure component responsible for sending push notifications via the platform push ser...
Manages Supabase Realtime channel subscriptions for the notifications table, scoped to the current u...
Reusable animated card that reveals a single statistic (e.g., total hours volunteered, number of peo...
Computes aggregated activity statistics for a peer mentor required by badge criteria evaluation, inc...
Executes aggregation queries over the activity table to compute session counts, total hours, and oth...
Middleware utility that enforces organisation-scoped row-level security on all summary-related Supab...
Sends push notifications to peer mentors and coordinators when their periodic summary is ready. Wrap...
Persistence layer for user-level notification preference records keyed by user ID and scenario type....
Data access layer for persisting and querying scenario-based push notification records, including tr...
Thin infrastructure wrapper around the FCM/APNs push delivery layer. Accepts a normalised notificati...
Business logic layer for reading, updating, and enforcing notification opt-out preferences per user ...
Mobile-side service that parses incoming push notification payloads and routes the user to the corre...
Service responsible for generating localised, personalised notification copy for each scenario type....
WCAG 2.2 AA compliant in-app banner component that renders scenario-based notification messages whil...
Processes incoming deep links containing referral tokens when a new member taps the referral URL. Ex...
Utility wrapper around a Flutter QR code rendering package (e.g., qr_flutter). Accepts a referral UR...
Wraps the Flutter Share plugin (share_plus) to invoke the native iOS and Android system share sheet....
Acts as the bridge between recruitment attribution events and the badge and recognition system. Eval...
Reads the volunteer's registered activity data and aggregates session count and total duration to pr...
Defines and persists the list of form fields throughout the app that are designated as containing se...
Abstracts Flutter's SemanticsService and platform accessibility APIs behind a unified interface to s...
Centralizes screen reader focus management for navigation transitions, dialog opens/closes, and dyna...
Detects whether a screen reader (VoiceOver or TalkBack) is active on the device and exposes this sta...
Business logic service that intercepts screen reader focus events on fields flagged as sensitive and...
Wraps bottom sheets and modal dialogs with correct focus trapping, initial focus placement, and focu...
Provides live-region announcements for asynchronous state changes such as loading completions, form ...
A reusable Flutter widget that wraps interactive elements with Flutter Semantics properties, providi...
An OS-level alert dialog that fires before a screen reader vocalises a field flagged as containing s...
Static registry mapping every application error code to a plain-language two-part message object con...
Stores and serves inline contextual help texts keyed by screen identifier and field identifier. Load...
Persists and retrieves partial wizard answers locally using shared preferences or Hive, enabling pau...
Ensures all UI components consume colour, typography, and spacing values exclusively from the projec...
Centrally manages all user-facing copy to ensure it meets plain-language guidelines. Provides keyed ...
BLoC-based state manager for all multi-step wizards, implementing pause-and-resume semantics. Persis...
A reusable summary screen inserted as the final step of every activity or report wizard. Lists all e...
Provides field-level and screen-level help text inline within the UI, replacing separate help sectio...
Flutter NavigationBar implementation that enforces labelled icons — no icon-only buttons. All tabs d...
Renders form and server errors in plain Norwegian using a two-part structure: what went wrong and ho...
A composable screen wrapper that enforces the cognitive accessibility rule of at most three primary ...
Displays current step position and total step count in all multi-step wizards. Enforces the maximum ...
Central repository of all design tokens (colors, typography, spacing, sizing, radii) for the applica...
Assembles the final Flutter ThemeData by composing the contrast-safe color scheme, the accessible te...
Provides a Flutter TextTheme derived entirely from design tokens, ensuring all body copy uses FontWe...
A Flutter widget wrapper that enforces a minimum 44×44 pt tappable area for all interactive controls...
A Flutter ThemeData color scheme built exclusively from contrast-verified token pairs. Exposes foreg...
Central GoRouter configuration that defines all application routes with accessibility constraints bu...
A Riverpod-backed service that tracks and restores per-tab navigation state using StatefulShellRoute...
A persistent five-tab bottom navigation bar built on StatefulShellRoute that preserves tab state acr...
A clearly labelled close IconButton injected into every ModalBottomSheet, AlertDialog, and full-scre...
A back control that appears on every screen that is not a root tab destination, providing an explici...
A scroll view wrapper that enforces vertical-only scrolling throughout the application, preventing h...
A shared utility that posts accessibility announcements to the platform's screen reader via Flutter'...
Data access layer responsible for fetching, caching, and exposing organization records from Supabase...
Infrastructure component that loads and exposes the organization-specific feature flag configuration...
Abstraction layer over Flutter's platform secure storage (Keychain on iOS, Keystore on Android) used...
Infrastructure utility that injects the selected organization ID into the Supabase client configurat...
go_router redirect guard that intercepts navigation for unauthenticated users or users without an ac...
Central service responsible for seeding and maintaining the active tenant context after an organizat...
Reusable card widget that displays a single partner organization with its logo, display name, and a ...
Persists terminology maps to device-local storage (e.g., SharedPreferences or Hive) so that labels a...
A compile-time constant registry of all label keys used across the application, defined as a Dart ab...
Defines the Riverpod provider graph for the terminology system: the root organizationLabelsProvider,...
Infrastructure utility that bridges the terminology system with Flutter's Semantics tree to satisfy ...
Stateless utility service that applies resolution logic to raw terminology maps: handles missing key...
A Riverpod StateNotifier that manages the active organization's terminology map lifecycle. On login ...
A drop-in replacement for Flutter Text widgets that automatically resolves label keys through the ac...
A centralized constants file defining all valid feature flag keys as typed string constants. Prevent...
A Riverpod provider that exposes the resolved feature flag map for the currently active organization...
A conditional rendering wrapper widget that gates any child widget behind a single boolean feature f...
Supabase data access layer for the organization_units table which implements a recursive adjacency-l...
Data access layer for the user_organization_unit_assignments junction table. Manages user-to-unit re...
Manages Supabase Row Level Security policies that join through the unit assignment junction table to...
Determines the set of organization units a given user may read or write data for, based on their ass...
Rolls activity data upward through the hierarchy tree from local chapter level to regional and natio...
Core business logic service for managing organization unit trees. Wraps Supabase queries for the rec...
Manages the junction table that links users to one or more organization units. Enforces the is_prima...
Slack-style workspace-switching bottom sheet that appears for users (typically NHF peer mentors) who...