Implementation Tasks
2691 tasks across 212 epics
Filter Tasks
All Tasks
Implement the ExportDateRangePicker as a self-contained Flutter widget with no upstream service dependencies. Render a s...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Implement the ExportConfirmationDialog as a self-contained Flutter modal widget with no upstream service dependencies. D...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Implement the ExportHistoryPanel Flutter widget that displays a scrollable list of past export runs for the current org....
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the ExportRunRepository class in Dart with full CRUD access to the export_runs table via Supabase. Implement metho...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the ApprovedClaimsQueryService that fetches approved expense claims filtered by org_id, date range (submitted_at b...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the ChartOfAccountsMapper that resolves org-specific mappings from expense_type and activity_type to accounting ac...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the DoubleExportGuard service that enforces the idempotency invariant: no approved claim may be included in more t...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the AccountingExporterService that orchestrates the full export pipeline: (1) run DoubleExportGuard pre-flight che...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Design and implement the export_runs table in Supabase with columns for run_id, org_id, initiated_by, status, date_range...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the CsvJsonFileGenerator infrastructure utility that serializes a list of structured accounting records into both ...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the AccountingCredentialsVault for secure server-side storage of per-org API credentials for Xledger and Dynamics....
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the generate-export Supabase Edge Function that serves as the secure server-side entry point for all export operat...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the XledgerExporter service that transforms a list of ApprovedClaim objects into Xledger-compatible accounting rec...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Build the DynamicsExporter service that transforms ApprovedClaim objects into Microsoft Dynamics 365-compatible accounti...
Accounting Export Foundation: Data Layer and Infrastructure · Accounting System Export and Integration
Extend the Export History Panel with proper empty state (no exports yet, with a helpful message) and error state (networ...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Build the Export History Panel Flutter widget that displays a chronological list of completed export runs for the curren...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Write unit tests for both XledgerExporter and DynamicsExporter. For each exporter: test field mapping correctness using ...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Define the shared AccountingExporter abstract interface (or abstract class in Dart) that both XledgerExporter and Dynami...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Implement the Double-Export Guard service that atomically filters out already-exported claims before a new export run be...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Implement the XledgerExporter class that implements the AccountingExporter interface. Map approved claim fields (amount,...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Extend the XledgerExporter with payload serialization: produce both a Xledger-compatible CSV and a JSON representation o...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Implement the DynamicsExporter class that implements the AccountingExporter interface for HLF. Map approved claim fields...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Extend the DynamicsExporter with payload serialization that produces a Dynamics-portal-compatible export payload (JSON f...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Wire the Double-Export Guard into the exporter execution pipeline. Before any exporter runs, invoke the guard to obtain ...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Write unit and integration tests for the Double-Export Guard. Test cases must cover: (1) claims already in a completed e...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Write an end-to-end integration test for the full export pipeline: seed approved claims in the test database, trigger an...
Export Engine: Idempotency Guard and Org-Specific Exporters · Accounting System Export and Integration
Based on the ExportResult type returned by AccountingExporterService, implement the two response branches in the Edge Fu...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Add the DoubleExportGuard check at the start of the orchestration pipeline: if an export run already exists for the same...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Write an integration test suite that invokes the Edge Function locally using the Supabase Functions test harness. Cover:...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Define the ExportResult data model (covering signed URL path, API push confirmation, export run ID, status, and error de...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Implement the factory/strategy pattern inside AccountingExporterService that reads the organisation's accounting system ...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Wire the ApprovedClaimsQueryService and ChartOfAccountsMapper calls into the AccountingExporterService orchestration seq...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Create the Supabase Edge Function 'generate-accounting-export'. Implement JWT verification using Supabase's built-in aut...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Wire the AccountingExporterService invocation into the Edge Function. Fetch accounting credentials from the server-side ...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Finalise the full orchestration sequence in AccountingExporterService: guard check → claims query → field mapping → file...
Export Orchestration: Exporter Service and Secure Edge Function · Accounting System Export and Integration
Build the ExportDateRangePicker Flutter widget with accessible date selection controls. Must support keyboard navigation...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Build the ExportConfirmationDialog widget that displays the export summary before the coordinator commits. Must show: se...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Build the ExportHistoryPanel widget that fetches and displays past export runs for the current organisation. Each row sh...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Implement a RoleGuard wrapper inside AccountingExportScreen that reads the current user role from the role state provide...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Add file download handling to AccountingExportScreen: on ExportSuccess state the BLoC emits a signed file URL; the scree...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Perform a full WCAG 2.2 AA accessibility review of all four components in this epic: AccountingExportScreen, ExportDateR...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Write flutter_test widget tests for ExportDateRangePicker (preset selection, invalid range validation), ExportConfirmati...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Create the AccountingExportScreenBloc (BLoC pattern) with states: Idle, LoadingConfig, ConfigLoaded(exporterType, orgNam...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Assemble the full AccountingExportScreen widget that hosts ExportDateRangePicker, a trigger button (visible only to coor...
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Integrate the Export Edge Function Dart client (wrapping Supabase Functions invoke) into the AccountingExportScreenBloc....
Accounting Export User Interface: Admin Screen and Coordinator Workflow · Accounting System Export and Integration
Write developer documentation covering: the database schema for all four badge tables including column descriptions and ...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Write unit tests for BadgeIconAssetManager covering: resolveIconPath returns correct asset path for locked and unlocked ...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Integrate the project's design token system into BadgeCardWidget. Earned badge cards must use an accent colour from the ...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Implement BadgeIconAssetManager as a Flutter service class that resolves asset paths for badge icons. Must support locke...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Create the badge icon asset directory structure under assets/badges/ with locked/ and unlocked/ subdirectories. Add plac...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Write unit and integration tests for BadgeRepository covering: fetchEarnedBadgesForUser returns only records scoped to t...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Write unit tests for BadgeDefinitionRepository covering: correct deserialisation of the criteria JSON column into typed ...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Write Flutter widget tests for BadgeCardWidget covering: earned badge renders unlocked icon and correct name label, lock...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Implement the BadgeRepository Dart class that provides full CRUD operations for earned_badges and tier_assignments table...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Implement BadgeDefinitionRepository Dart class for the badge_definitions table. Must support fetching all badge definiti...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Implement RecognitionTierRepository Dart class providing read and write access to the recognition_tiers table. Expose me...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Design and write Supabase migration scripts for badge_definitions, earned_badges, recognition_tiers, and tier_assignment...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Write and apply Row Level Security policies for all four badge-related tables (badge_definitions, earned_badges, recogni...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Implement the BadgeCardWidget as a stateless Flutter widget that renders a single badge. The widget must display: badge ...
Achievement Badges Foundation Data Layer · Achievement Badges & Status Recognition
Wrap RecognitionTierService in a Riverpod AsyncNotifierProvider with getCurrentTier(mentorId) and getEligibilitySummary(...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Write developer documentation for the four badge backend services: method signatures with parameter and return type desc...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Wrap PeerMentorStatsAggregator in a Riverpod AsyncNotifierProvider. Expose getStatsForMentor(mentorId) and getMilestoneS...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement BadgeConfigurationService as a Dart class with Riverpod provider. Implement loadOrgBadgeConfig(orgId) with in-...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Build the criteria validation sub-system inside BadgeConfigurationService. Rules include: numeric thresholds must be pos...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Wrap BadgeAwardService in a Riverpod Provider and expose awardBadge and getAwardedBadgesForMentor(mentorId) methods. Int...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement RecognitionTierService.evaluateEligibility(mentorId, orgId) which queries current mentor stats via PeerMentorS...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement RecognitionTierService.assignTier(mentorId, tier, orgId) and revokeTier(mentorId, orgId). Assignment writes a ...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Write unit tests for BadgeConfigurationService covering: valid criteria save successfully, negative threshold values are...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Create immutable Dart data classes for PeerMentorStats, AssignmentCount, StreakData, TrainingCompletion, and HonorarMile...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Create immutable Dart data classes for EarnedBadge, BadgeDefinition, BadgeCriteria, OrgBadgeConfig, and BadgeAwardResult...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Create immutable Dart data classes for RecognitionTier, TierEligibility, TierAwardPeriod, and TierAssignment. Include ti...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement business logic within PeerMentorStatsAggregator that accurately counts the 3rd and 15th assignment milestones ...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement BadgeAwardService.awardBadge(mentorId, badgeDefinitionId, orgId) using a Supabase upsert with a composite uniq...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Implement the core Supabase query layer inside PeerMentorStatsAggregator. Write efficient index-targeted queries for: to...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Write unit tests for PeerMentorStatsAggregator covering: correct 3rd and 15th assignment threshold detection, streak len...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Write unit tests for BadgeAwardService covering: successful badge award returns EarnedBadge with server timestamp, dupli...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Write integration tests that exercise the full pipeline: PeerMentorStatsAggregator computes stats → RecognitionTierServi...
Badge Backend Services & Stats Aggregation · Achievement Badges & Status Recognition
Create the badge-award-service that handles the business logic of awarding a badge to a peer mentor: validates the award...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-configuration-service that provides a typed, validated view of all active badge definitions by wrapping ...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Create the recognition-tier-service that determines and caches the current recognition tier for a peer mentor, detects w...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the peer-mentor-stats-aggregator service that computes activity counts, unique contact counts, and other metrics n...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-evaluation-service that evaluates all active badge definitions against the peer mentor's current stats f...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Create the recognition-tier-repository that fetches tier definitions (tier name, icon key, award period, threshold crite...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the reusable badge-card-widget Flutter UI component that renders a single badge in both earned (full colour, times...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-detail-modal Flutter bottom sheet UI component that displays full badge criteria text, earned timestamp ...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the recognition-tier-banner Flutter UI widget that displays the current tier name, tier icon, and award period. Im...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-icon-asset-manager infrastructure component that maps badge definition icon keys to Flutter asset paths ...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Implement the badge-criteria-edge-function Supabase Edge Function that orchestrates server-side badge evaluation on a tr...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Create the badge-repository data layer component that provides CRUD operations for earned badges stored in Supabase. Imp...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Create the badge-definition-repository that loads static badge definitions (criteria, icon keys, tier thresholds, displa...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-shelf-widget as a horizontally scrollable profile section showing all earned and locked badges using bad...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Build the badge-earned-celebration-overlay as a transient full-screen Flutter animation overlay triggered by badge-bloc ...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Implement the badge-bloc BLoC that loads earned badges for the current peer mentor, caches them in memory, reacts to bad...
Badge UI Components & BLoC State Management · Achievement Badges & Status Recognition
Add structured audit logging to the edge function that records each evaluation run: timestamp, peer_mentor_id, org_id, b...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Create deployment scripts for the badge-criteria-edge-function covering: Supabase CLI deploy command, environment variab...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the StreakCriteriaEvaluator class that detects consecutive activity streaks within a defined time window. Must...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the TrainingCompletionCriteriaEvaluator class that verifies whether a peer mentor has completed a required cer...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Wire the edge function to dispatch an FCM push notification via the existing push-notification infrastructure immediatel...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Write comprehensive Deno unit tests for ThresholdCriteriaEvaluator, StreakCriteriaEvaluator, and TrainingCompletionCrite...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Write end-to-end integration tests for the full badge evaluation pipeline using a seeded Supabase test database. Tests m...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Define TypeScript interfaces and abstract base classes for the three criteria evaluator types: threshold-based, streak-b...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the ThresholdCriteriaEvaluator class in Deno/TypeScript that checks whether a peer mentor's aggregated activit...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the badge definition loader within the evaluation service that fetches all enabled badge definitions for a giv...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the stats aggregation layer within the badge evaluation service that computes a peer mentor's current totals (...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Implement the main BadgeEvaluationService orchestrator that loads enabled badge definitions for the organisation, invoke...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Create the Supabase Edge Function scaffold for badge-criteria-edge-function in Deno. Implement the HTTP handler that val...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Configure the Supabase database webhook that fires on INSERT and UPDATE events to the activities table. Register the web...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Integrate the BadgeEvaluationService into the edge function handler so that, on each invocation, it calls the evaluation...
Badge Evaluation Engine & Edge Function Integration · Achievement Badges & Status Recognition
Write developer documentation covering: (1) the SQL view schema with column descriptions and Bufdir field mappings; (2) ...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write Flutter unit tests for TimeWindowService (all five TimeWindow values including leap year and DST boundary dates, c...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Extend the Stats Repository with a local Hive or shared_preferences cache so that the last-fetched StatsSnapshot and Pee...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Build the Bufdir Alignment Validator service that compares aggregated totals from the stats views against an independent...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Implement a PostgreSQL trigger function that calls REFRESH MATERIALIZED VIEW CONCURRENTLY on mv_peer_mentor_stats and mv...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write Flutter unit tests covering: fromJson/toJson round-trip for StatsSnapshot, PeerMentorStatRow, and ChartDataPoint; ...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write integration tests that run against a Supabase local dev instance (supabase start) and verify: fetchSnapshot return...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Create the typed Dart data models required by the statistics dashboard: StatsSnapshot (aggregate totals for a time windo...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Implement the TimeWindow Service that converts each TimeWindow enum value (week, month, quarter, year, custom) into a co...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Build the Chapter Scope Resolver that loads and caches a coordinator's authorized chapter IDs from Supabase. The resolve...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Build the Stats Repository Dart class that queries the Supabase materialized views. It must expose: fetchSnapshot(TimeWi...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write the Supabase SQL views that pre-aggregate activity data: (1) peer_mentor_stats_view — activity count, total hours,...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Convert the SQL views from task-004 into materialized views (mv_peer_mentor_stats, mv_chapter_stats) with REFRESH CONCUR...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write and apply Row-Level Security policies on mv_peer_mentor_stats and mv_chapter_stats so that a coordinator can only ...
Activity Statistics Dashboard — Data Foundation · Activity Statistics Dashboard
Write unit tests asserting that BufdirAlignmentValidator returns a passing AlignmentReport when both query paths return ...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Integrate the Chapter Scope Resolver into the StatsAsyncNotifier provider so that coordinators see chapter-scoped aggreg...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Implement a debounce mechanism inside the Stats Cache Invalidator so that rapid successive INSERT events on the activiti...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Create the BufdirAlignmentValidator service class that provides a diagnostic API for comparing dashboard aggregation res...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Extend the BufdirAlignmentValidator with an on-demand trigger method that can be called from a hidden developer settings...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Write unit tests covering: StatsAsyncNotifier initial fetch returns AsyncData with correct snapshot; time window change ...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Define the StatsSnapshot immutable data class that the Stats Async Notifier will expose via AsyncValue<StatsSnapshot>. T...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Implement the Riverpod AsyncNotifier that exposes AsyncValue<StatsSnapshot>. The notifier must trigger an initial fetch ...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Set up a Supabase realtime channel subscription on the activities table within the Stats Cache Invalidator component. Su...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Wire the Stats Cache Invalidator to call ref.invalidate(statsNotifierProvider) after the debounce resolves. Ensure the i...
Activity Statistics Dashboard — State Management & Realtime Invalidation · Activity Statistics Dashboard
Create Dart freezed data models for ChartDataPoint, ChartSeries, and the GranularityMode enum (day, week, month). Define...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Build the ActivityChartWidget using the fl_chart package. Implement bar chart for day/week granularity and line chart fo...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Extend ActivityChartWidget with tap-triggered tooltip overlays showing exact values for the tapped bar or data point. Wr...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Implement a single PeerMentorStatsListRow widget displaying a peer mentor's name, multi-chapter label (e.g., 'Chapter A,...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Build the PeerMentorStatsList widget as a scrollable ListView.builder that renders PeerMentorStatsListRow items from the...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Wire the PeerMentorStatsList onTap handler in CoordinatorStatsScreen to navigate to the individual peer mentor's stats v...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Write Flutter widget tests for TimeWindowSelector covering: correct segment rendering, callback emission on tap, Semanti...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Write Flutter widget tests for ActivityChartWidget covering: correct bar/line chart mode switching by granularity, toolt...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Write Flutter integration tests covering the full end-to-end stats dashboard flow: peer mentor logs in, navigates to sta...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Create the TimeWindow enum (week, month, quarter, year, custom) and associated value types used across all stats UI comp...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Implement the TimeWindowSelector as a Flutter segmented control widget that emits TimeWindow values via a callback. Each...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Build the StatsSummaryCards row consisting of three reactive KPI cards: session count, total hours, and reimbursement to...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Compose the PeerMentorStatsScreen using TimeWindowSelector, StatsSummaryCards, and ActivityChartWidget. Wire the screen ...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Ensure the PeerMentorStatsScreen enforces strict role-based data scoping by reading only the authenticated peer mentor's...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Create the CoordinatorStatsScreen scaffold with a page header, chapter scope label (showing the active chapter name), an...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Add ActivityChartWidget (chapter-aggregated data) and PeerMentorStatsList to the CoordinatorStatsScreen body. Ensure bot...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Enforce role-based data scoping at the CoordinatorStatsScreen level: the coordinator provider must only fetch data for p...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Run a comprehensive WCAG 2.2 AA audit across all stats dashboard UI components: TimeWindowSelector, StatsSummaryCards, A...
Activity Statistics Dashboard — User Interface · Activity Statistics Dashboard
Extend the existing OrganizationLabelsProvider (075-organization-labels-provider) to support activity type display name ...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Ensure the ActivityTypeCacheProvider is invalidated and refreshed whenever a create, update, or delete operation complet...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Write unit tests for the ActivityTypeRepository covering: successful fetch scoped to org_id, typed error mapping for Sup...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Write unit tests for every typed accessor on the ActivityTypeMetadataResolver. Cover default values when metadata fields...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Write integration tests that exercise the complete stack from Supabase client through repository, cache provider, and me...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Create the immutable ActivityType Dart class with all fields matching the database schema. Define typed domain errors (A...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Build the full ActivityTypeRepository with fetchAll(orgId), fetchById(id), create(activityType), update(activityType), a...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Document and enforce the JSONB metadata schema for activity types, covering fields such as requires_expense, requires_re...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Build the ActivityTypeMetadataResolver service that wraps an ActivityType and exposes strongly-typed boolean and value a...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Implement the in-memory Riverpod provider (073-activity-type-cache-provider) that holds the full list of active activity...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Write and apply a Supabase database migration that creates the activity_types table with all required columns: id, org_i...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Define and apply Row Level Security policies on the activity_types table scoped by org_id. Ensure coordinators and peer ...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Set up the Supabase client singleton following the project's existing pattern in 074-supabase-client. Ensure it is initi...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Integrate the ActivityTypeMetadataResolver with the ActivityTypeCacheProvider so that consumers receive pre-resolved met...
Activity Type Configuration — Data & Infrastructure Foundation · Activity Type Configuration
Enhance ActivityTypeSelectionScreen to meet WCAG 2.2 AA requirements. Set minimum 44x44dp touch targets on all list item...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Integrate the OrganizationLabelsProvider into ActivityTypeService so that each ActivityType returned to the UI has its d...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Write unit tests covering: org-scoped fetching returns only types for the authenticated org, triggersReimbursementWorkfl...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Write Flutter widget tests for ActivityTypeSelectionScreen covering: list renders all active types with correct resolved...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Write an integration test that boots the Riverpod provider graph with a real ActivityTypeCacheProvider backed by a mocke...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Create the typed ActivityType domain object with all metadata fields: id, orgId, label key, isActive, triggersReimbursem...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Build an in-memory cache layer wrapping the repository. Cache active activity types per orgId with a configurable TTL (d...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Build ActivityTypeService enforcing org-scoped business rules. Implement getActiveTypes(orgId), createActivityType, upda...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Build the ActivityTypeRepository class that queries the Supabase activity_types table using the authenticated org contex...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Implement the ActivityTypeSelectionScreen Flutter widget that reads active activity types from the ActivityTypeCacheProv...
Activity Type Configuration — Service Layer & Peer Mentor Selection · Activity Type Configuration
Define the complete controlled list of Bufdir category values as a Dart enum and a corresponding display-label registry....
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the four primary text and numeric input fields inside ActivityTypeFormScreen: (1) display_name — required text...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the three boolean metadata flag controls inside ActivityTypeFormScreen as clearly labelled toggle switches wit...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the Bufdir category selector inside ActivityTypeFormScreen as a searchable dropdown using the controlled list ...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the ActivityTypeListItem widget used inside ActivityTypeAdminScreen. Display: display name as card title, org_...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the archive action on ActivityTypeAdminScreen accessible via a long-press context menu and a three-dot overflo...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Write flutter_test integration tests covering the full coordinator CRUD workflow: (1) navigate to admin screen, verify e...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Define the ActivityType Dart class with all fields matching the database schema: id, orgId, displayName, orgLabelOverrid...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Create the Supabase database schema for the activity_types table including columns for display_name, org_label_override,...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Build the ActivityTypeFormScreen StatefulWidget with GoRouter integration supporting both creation mode (no argument) an...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Implement the ActivityTypeFormBloc (or Cubit) managing form state, validation, and async submission. Validate: display_n...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Build the ActivityTypeAdminScreen StatefulWidget that fetches and displays all activity types for the currently selected...
Activity Type Configuration — Admin Portal Interface · Activity Type Configuration
Extend AdminRepository with KPI-focused aggregate methods: getActiveUserCount(), getTotalActivitiesCount(), getPendingRe...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement and test the HLF-specific RLS policy extension that suppresses peer mentor visibility when certification has e...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Write the security contract document that specifies which tables have RLS coverage, what claims each role injects, the r...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement the AdminStatWidget reusable Flutter widget that accepts a label, value, trend indicator, and accent colour. T...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Create typed Dart domain models for all admin-scoped entities: OrgAdminScope, AdminUser, AdminActivity, AdminReimburseme...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement the AdminRlsGuard service that intercepts every Supabase client session for admin-role users and injects org-s...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Build AdminRepository with typed, RLS-enforced query methods for the primary admin use cases: getUsersInScope(), getActi...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Systematically audit Supabase tables (users, activities, reimbursements, organisations, user_roles) for missing or incom...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement Supabase row-level security policies scoped to the org_admin role across users, activities, reimbursements, an...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement Supabase row-level security policies for the super_admin role granting cross-organisation read access and rest...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Write a PostgreSQL recursive CTE function get_org_subtree(root_org_id UUID) that returns all child organisation IDs with...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Create a comprehensive test suite that exercises all RLS policies defined in tasks 003 and 004. Tests must verify: org_a...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement unit tests for AdminRlsGuard covering: successful org_id claim injection, missing session handling, claim inje...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Implement integration tests for AdminRepository against a local Supabase instance seeded with multi-org test data. Tests...
Admin Portal Foundation: Data Layer, RLS Policies, and Security Infrastructure · Organisation Admin Portal
Add cache invalidation on hierarchy changes, short-TTL refresh policy, and node search by name/code within the cached tr...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Add month-over-month trend computation to AdminStatisticsService for each KPI. Calculate delta values and percentage cha...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Extend UserManagementService with org-scoped write-access validation. Admins may only manage users within their hierarch...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement AdminNotificationDispatcher's admin-specific template registry. Define templates for: user status changes, cer...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement org-scoped targeting in AdminNotificationDispatcher. Given a notification type and org node ID, resolve all af...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Extend OrgHierarchyNavigator with an inline search field that filters visible nodes in real time using OrgHierarchyServi...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Ensure OrgHierarchyNavigator fully complies with WCAG 2.2 AA. Add semantic labels to every tree node, role='treeitem' se...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Write unit tests for OrgHierarchyService covering: tree construction from flat rows, subtree ID resolution for nested an...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Write unit tests for AdminStatisticsService covering: all five KPI computations with mocked repository data, subtree sco...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Write unit tests for UserManagementService covering: CRUD happy paths, invalid role transition rejection, out-of-scope w...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Write integration tests for AdminExportService that validate CSV and Excel output against Bufdir's required column struc...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Write Flutter widget tests for OrgHierarchyNavigator covering: initial render with mocked tree data, expand/collapse int...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement the core organisation hierarchy tree builder in OrgHierarchyService. Build recursive tree construction from fl...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Extend OrgHierarchyService with subtree resolution for RLS scope expansion. Given a node ID, return all descendant node ...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement AdminStatisticsService with core KPI aggregation: active peer mentors, monthly activities, pending reimburseme...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement UserManagementService with full CRUD operations for admin users. Enforce business rules for role transitions (...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Add downstream side-effect handling to UserManagementService: automatically remove paused mentors from chapter public li...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Implement AdminExportService CSV generation path. Query activities scoped to the selected org subtree, map columns to Bu...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Add Excel (.xlsx) export path to AdminExportService alongside the CSV path. Use a Dart Excel library to generate workboo...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Build the OrgHierarchyNavigator Flutter widget with an expandable/collapsible tree view. Each node renders name and type...
Admin Portal Core Services: Hierarchy, Statistics, User Management, and Exports · Organisation Admin Portal
Build the AdminKpiStatWidget Flutter widget that displays a single KPI tile (label, value, trend indicator, icon). The w...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement the RoleAssignmentPanel as a modal bottom sheet or dialog. The panel must display the target user's current ro...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Integrate the RoleAssignmentPanel with the AdminPortalBloc by adding RoleAssignmentRequested and RoleAssignmentConfirmed...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement the ActivityLogViewer widget as a scrollable, filterable list of activities across all org chapters within the...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Add activity log pagination and filter state management to the AdminPortalBloc. Implement LoadActivityLog, ActivityLogFi...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement the AdminExportPanel widget that allows admins to configure and trigger CSV/Excel exports. The panel must incl...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Add export job lifecycle state management to the AdminPortalBloc. Implement ExportTriggered, ExportProgressUpdated, Expo...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Add pagination and filter state management for both the user list and activity list to the AdminPortalBloc. Define filte...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Adapt the AdminDashboardScreen and all governance panels for Flutter Web wide-screen rendering. Implement a sidebar pane...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Write unit tests for the AdminPortalBloc covering all event/state transitions: dashboard stat loading, scope propagation...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Run flutter_accessibility_lint and manual screen-reader testing (TalkBack/VoiceOver) across all admin portal screens and...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Create the AdminPortalBloc using Riverpod and flutter_bloc, defining all state classes (AdminPortalState, AdminPortalEve...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Add org hierarchy scope selection logic to the AdminPortalBloc so that when an admin selects an organisation unit (org, ...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement the AdminDashboardScreen that renders the KPI stat widget grid using AdminKpiStatWidget tiles. The screen must...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Wire the AdminPortalBloc to the AdminStatisticsService for loading KPI dashboard statistics. Implement event handlers fo...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement the CertificationStatusPanel widget that groups peer mentors with expiring or expired certifications by chapte...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Add certification reminder state management to the AdminPortalBloc. Implement SendCertificationReminder event that invok...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Compose the complete AdminDashboardScreen by integrating the KPI grid, ActivityLogViewer, CertificationStatusPanel, Admi...
Admin Portal Dashboard UI: State Management, Dashboard Screen, and Governance Panels · Organisation Admin Portal
Implement navigation from the user list row to the individual user profile detail screen. Pass the user ID via route arg...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Implement backend logic for sending user invitations by email with role pre-assignment. Create the invitation record in ...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Implement the filter bar UI allowing admins to compose filters by role, chapter, status, and certification state. Filter...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Integrate the Role Assignment Panel into the User Account Management Screen so admins can assign or change a user's role...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Implement the account activation and deactivation toggle on each user row. Toggle must call UserManagementService to upd...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Build the invite new user flow: an email input field plus role selector (pre-populated with available roles in the admin...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Profile and optimise the screen for organisations with hundreds to thousands of users. Implement list virtualisation, de...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Audit the entire User Account Management Screen against WCAG 2.2 AA requirements. Verify screen reader semantics for use...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Write integration tests and widget tests covering: paginated list rendering, filter combination correctness against Supa...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Build the composable filter query builder that supports simultaneous filtering by role, chapter, account status, and cer...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Implement the data access layer for the User Account Management Screen, including Supabase queries that respect RLS-enfo...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Design and implement the data model supporting NHF's requirement that a single user may belong to up to 5 local chapters...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Implement the BLoC managing all state for the User Account Management Screen: paginated user list, active filter state, ...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Build the paginated user list Flutter widget showing all users within the admin's org scope. Each user row must display ...
Admin Portal User Management: Full Account Management Screen · Organisation Admin Portal
Extend WrappedAnimationController to support Rive StateMachineController instances alongside Flutter AnimationController...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Build the ScreenshotCaptureUtility class using a RepaintBoundary and RenderRepaintBoundary to capture any widget subtree...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Extend ScreenshotCaptureUtility with a shareWidget(globalKey, shareText) method that captures the widget, writes the PNG...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Write Flutter unit tests covering the SummaryOfflineCache: put and get round-trip serialisation, cache miss returns null...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Write Flutter unit tests for AnnualSummaryRepository using mock Supabase client and mock SummaryOfflineCache. Cover: cac...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Write Flutter widget tests verifying WrappedAnimationController lifecycle: controllers are initialised before first fram...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Write Flutter integration tests (running on device/emulator) for ScreenshotCaptureUtility: captureWidget returns a non-e...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Create the core Dart domain model classes for AnnualSummary, AnnualSummaryPeriod, and AnnualSummaryStatus. Include fromJ...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Build the SummaryOfflineCache class exposing put(summary), get(mentorId, year), getAll(mentorId), delete(mentorId, year)...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Create the AnnualSummaryRepository class with fetchSummary(mentorId, year), saveSummary(summary), and deleteSummary(ment...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Write and apply a Supabase database migration that creates the annual_summaries table with columns for peer_mentor_id, y...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Create the WrappedAnimationController class that owns and manages a set of named Flutter AnimationControllers for the Wr...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Define the Hive TypeAdapter and box schema for persisting AnnualSummary objects to local device storage. Register the ad...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Extend AnnualSummaryRepository to implement a cache-then-network read strategy: serve cached data immediately if present...
Annual Impact Summary — Data Foundation & Infrastructure · Annual Impact Summary (Wrapped)
Extend the AnnualStatsAggregationService to read from the local SQLite offline cache when network is unavailable. Cache ...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Implement the configuration loading layer for MilestoneDefinition records. Definitions should be stored as a JSON asset ...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Implement the top-level SummaryShareService.share() method that orchestrates the complete sharing workflow: (1) wait for...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Implement the storage layer that persists which milestone IDs a user has previously unlocked, so the MilestoneDetectionS...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Implement the screenshot capture layer within SummarySharaService that uses Flutter's RenderRepaintBoundary to capture t...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Add iOS-specific photo library permission flow to SummaryShareService. Request NSPhotoLibraryAddUsageDescription permiss...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Add Android-specific handling to SummaryShareService. Implement WRITE_EXTERNAL_STORAGE / MediaStore permission flow for ...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Write comprehensive unit tests for AnnualStatsAggregationService covering: correct total hours computation across activi...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Write unit tests for MilestoneDetectionService covering: correct threshold crossing detection for all metric types (hour...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Write integration tests for SummaryShareService covering: screenshot capture produces non-null Uint8List output, iOS per...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Design and implement the SummaryPeriod model, PeriodType enum (rolling-12-month, half-year, custom), and the event/state...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Define the Dart data classes for AnnualStatsResult (total_hours, unique_contacts_helped, activity_type_distribution as M...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Implement the AnnualStatsAggregationService class with methods to: (1) accept a SummaryPeriod and user ID, (2) query Sup...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Build the MilestoneDetectionService that accepts an AnnualStatsResult and the list of MilestoneDefinitions and returns a...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Write the Supabase RPC calls and PostgREST queries that retrieve activity records filtered by peer mentor user ID and a ...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Build the SummaryPeriodSelector Flutter widget with toggle buttons for Rolling 12-Month, Last 6-Month, and Custom Date R...
Annual Impact Summary — Core Business Services · Annual Impact Summary (Wrapped)
Write developer documentation for all five components (StatCardWidget, MilestoneBadgeWidget, ActivityTypeBreakdownWidget...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Create golden file snapshot tests for all four widgets covering: stat card in locked/counting/completed animation states...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement the StatCardWidget scaffold with icon slot, value display, and descriptive label. All colours, typography, and...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Integrate with WrappedAnimationController to drive the numeric count-up animation on the stat card value field. The anim...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement the MilestoneBadgeWidget scaffold supporting two visual states: locked (muted, padlock icon overlay) and unloc...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Integrate with WrappedAnimationController to drive the pop (scale + fade) entrance animation when a milestone badge tran...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement the ActivityTypeBreakdownWidget scaffold with support for rendering multiple activity type segments as a bar o...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Drive bar/pie segment entrance animations via WrappedAnimationController (staggered reveal per segment). Implement tap-t...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement the SummaryShareOverlay as a modal bottom sheet using design token classes for all styling. The sheet must con...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Integrate with ScreenshotCaptureUtility to render a live preview of the shareable image card inside the SummaryShareOver...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Write Flutter widget integration tests verifying that SummaryAccessibilityProvider is correctly wired into all four widg...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Wire SummaryAccessibilityProvider into StatCardWidget to attach Semantics nodes with the generated announcement strings....
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Wire SummaryAccessibilityProvider into MilestoneBadgeWidget to attach Semantics with the generated announcement strings ...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Wire SummaryAccessibilityProvider into ActivityTypeBreakdownWidget to produce a Semantics node per segment with a comple...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Wire SummaryAccessibilityProvider to the SummaryShareOverlay to ensure all share action buttons have descriptive Semanti...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Define the SummaryAccessibilityProvider interface including the contract for generating semantically complete announceme...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement system reduced-motion preference detection using Flutter's MediaQuery.disableAnimations and AccessibilityFeatu...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Implement the announcement string generation logic inside SummaryAccessibilityProvider for each widget type: stat card (...
Annual Impact Summary — UI Widgets & Accessibility · Annual Impact Summary (Wrapped)
Add an offline banner widget inside WrappedSummaryScreen that appears when WrappedSummaryBloc emits WrappedSummaryOfflin...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Integrate the SummaryPeriodSelector widget into WrappedSummaryScreen so peer mentors can switch between available annual...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Write widget tests for all WrappedSummaryScreen UI states: loading skeleton, loaded first slide, loaded slide navigation...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Implement the ChangePeriod event handler in WrappedSummaryBloc. When a new period is selected (e.g., previous year), the...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Implement the NavigateSlide event handler to manage current slide index within WrappedSummaryLoaded state. The handler m...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Implement the ShareSlide event handler in WrappedSummaryBloc. The handler delegates to the summary share service (screen...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Wire the summary offline cache into WrappedSummaryBloc so that every successful LoadSummary or ChangePeriod call persist...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Integrate the SummaryShareOverlay into WrappedSummaryScreen. A share button on each slide opens the overlay; confirming ...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Conduct a full WCAG 2.2 AA accessibility audit of WrappedSummaryScreen. Verify logical focus traversal order through sli...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Gate the entire Annual Impact Summary feature behind a feature flag using the existing feature-flag-provider and feature...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Wire the push notification deep-link handler to navigate directly into WrappedSummaryScreen when a summary-ready notific...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Write bloc_test unit tests covering all BLoC event handlers: LoadSummary success and network-failure paths, ChangePeriod...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Write integration tests (flutter_test with integration_test package) covering the complete Wrapped flow: push notificati...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Define the complete set of BLoC events (LoadSummary, ChangePeriod, ShareSlide, NavigateSlide) and states (WrappedSummary...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Implement the LoadSummary event handler inside WrappedSummaryBloc. The handler calls the annual stats aggregation servic...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Build the full-screen WrappedSummaryScreen scaffold with a Hero transition entry animation. The screen must occupy the f...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Implement the PageView inside WrappedSummaryScreen that renders each slide widget (StatCard, MilestoneBadge, ActivityTyp...
Annual Impact Summary — BLoC Orchestration & Full Screen Integration · Annual Impact Summary (Wrapped)
Write unit tests for the PushNotificationService wrapper covering: sendToUser happy path, sendToTopic happy path, FCM to...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Implement the PushNotificationService infrastructure wrapper that encapsulates FCM token management and push dispatch. E...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Write unit tests for ReminderConfigRepository using flutter_test and a Supabase mock client. Cover: successful fetch, up...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Write unit tests for InAppNotificationRepository covering: insert a notification record, mark as read, fetch unread for ...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Write unit tests for AssignmentContactTrackingRepository covering: update last_contact_date, fetch overdue assignments w...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Write an integration test that exercises all four repository/service components against a local Supabase instance or sta...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Implement the ReminderConfigRepository Dart class that reads and writes reminder_days and escalation_days from the org_s...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Implement the InAppNotificationRepository Dart class backed by the notification_log table. Expose methods: insertNotific...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Implement the AssignmentContactTrackingRepository Dart class that queries the assignments table for last_contact_date da...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Create the database migration script to add the notification_log table with columns for notification_id, assignment_id, ...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Add the last_contact_date timestamp column to the assignments table via a migration script. Include an index on (org_id,...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Add reminder_days (integer, default 10) and escalation_days (integer, default 14) columns to the org_settings table. Inc...
Assignment Follow-up Reminders — Data Foundation · Assignment Follow-up Reminders
Write flutter_test widget tests for all three components covering: ReminderNotificationCard renders elapsed days and CTA...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Create the stateless Flutter widget for ReminderNotificationCard displayed in the Notifications tab for peer mentors. Im...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Implement the dismiss and mark-as-read gesture and button interactions on ReminderNotificationCard. Wire up swipe-to-dis...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Create the Flutter widget for CoordinatorEscalationNotificationCard shown exclusively to coordinators when a reminder es...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Add acknowledgement action buttons to CoordinatorEscalationNotificationCard: acknowledge (closes the escalation loop) an...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Implement the ReminderThresholdSettingsUI section embedded in the org settings screen. Create numeric input fields for c...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Implement client-side validation for ReminderThresholdSettingsUI: first-reminder threshold must be ≥ 1, escalation thres...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Audit and fix all three components (ReminderNotificationCard, CoordinatorEscalationNotificationCard, ReminderThresholdSe...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Connect both ReminderNotificationCard and CoordinatorEscalationNotificationCard to the shared notification BLoC/Riverpod...
Assignment Follow-up Reminders — Notification UI & Settings · Assignment Follow-up Reminders
Integrate structured logging throughout ReminderEvaluationService. Log evaluation inputs (assignment ID, days since cont...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Integrate structured logging throughout ReminderDispatchService. Log dispatch attempts with assignment ID and notificati...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Integrate structured logging throughout ReminderSchedulerService. Log daily run start with timestamp and open assignment...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Create the Dart domain types and abstract interfaces for the ReminderEvaluationService. Define the ReminderEvaluationRes...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Implement the concrete ReminderEvaluationService Dart class with injectable dependencies on AssignmentContactTrackingRep...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Create the Dart domain types and abstract interfaces for ReminderDispatchService. Define payload types for peer mentor p...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Implement the concrete ReminderDispatchService Dart class with injectable dependencies on PushNotificationService and In...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Implement the reminder_sent_at idempotency check in ReminderDispatchService. Before dispatching any notification, query ...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Create the Dart domain types and abstract interfaces for ReminderSchedulerService. Define the SchedulerRunResult type ca...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Implement the concrete ReminderSchedulerService Dart class with injectable dependencies on ReminderEvaluationService, Re...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Enhance ReminderSchedulerService with configurable batch sizing to prevent overwhelming downstream services during large...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Write comprehensive unit tests for ReminderEvaluationService covering: result is none when days are below remind thresho...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Write comprehensive unit tests for ReminderDispatchService covering: peer mentor push payload composition, coordinator e...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Write comprehensive unit tests for ReminderSchedulerService covering: all open assignments are evaluated, remind results...
Assignment Follow-up Reminders — Business Logic Services · Assignment Follow-up Reminders
Write an operations runbook documenting the cron schedule registration, execution log schema, advisory lock mechanism, a...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Implement a PostgreSQL advisory lock or idempotency guard on the cron trigger to prevent concurrent overlapping executio...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Add structured execution logging to the cron trigger that captures start time, completion time, total duration, number o...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Configure alerting logic that fires when the cron trigger fails on two or more consecutive executions. Integrate with Su...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Write integration tests covering the full cron trigger lifecycle: successful run with logging, advisory lock preventing ...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Add a database trigger or service hook that updates last_contact_date on the relevant assignment record whenever a peer ...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Configure and register the pg_cron or Edge Function cron schedule that triggers the daily reminder evaluation cycle. Def...
Assignment Follow-up Reminders — Cron Infrastructure & Activation · Assignment Follow-up Reminders
Build the VippsOrgCostConfig infrastructure component that fetches and validates per-organization Vipps subscription sta...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Create the vipps_org_cost_config table in Supabase with columns: org_id (FK to organizations), subscription_active (bool...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Create widget and integration tests for the SecureStorageAdapter and AuthTokenStore using flutter_test and mocktail. Tes...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Write integration tests that exercise the full stack: UserIdentityRepository persisting personnummer to Supabase and rea...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Implement the AuthTokenStore data component that persists access tokens, refresh tokens, and token expiry timestamps usi...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Build the UserIdentityRepository that reads and writes user identity data (personnummer, BankID verification status, Vip...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Create the user_identities table in Supabase with columns: id (uuid PK), user_id (FK to auth.users), personnummer (text,...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Create the typed SecureStorageAdapter abstraction layer wrapping flutter_secure_storage. Define the interface contract w...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Provide the concrete implementation of the SecureStorageAdapter interface using flutter_secure_storage. Configure IOSOpt...
BankID & Vipps Login — Secure Storage and Identity Foundation · BankID and Vipps Login
Write developer documentation covering the public interfaces of the Vipps API Client, BankID Provider Client, and Deep L...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Write integration tests for the Vipps API Client, BankID Provider Client, and Deep Link Handler using test-environment c...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Build the Vipps API Client infrastructure component responsible for all HTTP communication with the Vipps Login OAuth 2....
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Build the BankID Provider Client that communicates with the backend Supabase Edge Function responsible for BankID server...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Create a shared typed error model layer covering all expected failure modes from both Vipps Login OAuth 2.0 and BankID a...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Create the Supabase Edge Function that receives BankID assertion tokens from the mobile client, validates them against t...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Build an environment configuration module that resolves the correct Vipps Login OAuth 2.0 base URLs (test vs. production...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Build the Deep Link and OAuth Redirect Handler that intercepts incoming OAuth callback deep links for both Vipps and Ban...
BankID & Vipps Login — External API Clients and OAuth Infrastructure · BankID and Vipps Login
Implement the post-authentication biometric enrollment flow in the Biometric Authentication Service: after successful Ba...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Build the Biometric Authentication Service session resumption path: authenticate the user via local_auth, retrieve the p...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Build the Biometric Authentication Service foundation: integrate the local_auth Flutter plugin, implement availability d...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Build the foundational Authentication Session Manager with JWT storage, retrieval, expiry checking, and secure token per...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Add proactive token refresh logic to the Auth Session Manager: detect tokens approaching expiry (within configurable win...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Expose a reactive auth state stream from the Auth Session Manager that broadcasts AuthState changes (authenticated, unau...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Complete the Vipps Authentication Service post-authentication flow: upsert the authenticated Vipps user into Supabase (c...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Implement the BankID assertion validation step in the BankID Authentication Service: poll or receive callback for the co...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Complete the BankID Authentication Service post-validation flow: link the verified BankID identity to an existing Supaba...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Build the Vipps Authentication Service flow initiation: generate PKCE code verifier and challenge, construct the Vipps a...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Handle the OAuth redirect callback in the Vipps Authentication Service: validate the received authorization code and sta...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Build the BankID Authentication Service session initiation: call the BankID Provider Client to start an authentication s...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Write integration tests covering the full authentication service layer: Vipps PKCE flow with personnummer extraction, Ba...
BankID & Vipps Login — Authentication Business Services and Session Management · BankID and Vipps Login
Implement the Biometric Authentication Screen using the Flutter local_auth package. The screen must show a branded promp...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Add fallback logic to the Biometric Authentication Screen for devices where biometrics are unavailable or not enrolled. ...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Write integration tests covering the complete user-facing authentication flows: BankID path (method selector → BankID sc...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Build the Authentication Method Selector Screen with three method cards (BankID, Vipps, Biometric). Each card must displ...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Apply full WCAG 2.2 AA accessibility to the Authentication Method Selector Screen: correct semantic labels on all method...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Implement the Vipps Authentication Screen that triggers the Vipps OAuth redirect flow. The screen must show the Vipps lo...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Handle the OAuth deep-link callback on the Vipps Authentication Screen: parse the incoming URL from DeepLinkHandler, ext...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Build the BankID Authentication Screen that launches the BankID provider flow via WebView or system browser redirect dep...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Implement the BankID deep-link and WebView callback handling on the BankID Authentication Screen: detect successful auth...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Build the Personnummer Confirmation Widget that displays the user's personnummer in a partially masked format (e.g., XXX...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Add a privacy policy link and GDPR data-sharing disclosure to the Personnummer Confirmation Widget. The disclosure must ...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Implement screen-reader live region announcements for all five authentication screens. Each screen state transition (loa...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Conduct a structured WCAG 2.2 AA audit across all five authentication UI components: Auth Method Selector, Vipps Auth Sc...
BankID & Vipps Login — Authentication UI Screens and User Flows · BankID and Vipps Login
Write comprehensive unit tests for BenefitCalculationResult: verify all typed fields serialize and deserialize correctly...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Write unit tests for BenefitMultiplierConfigRepository covering: successful fetch from mocked Supabase client returns co...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Write unit tests for ActivitySummaryAggregator covering: correct aggregation of sessionCount and averageDurationMinutes ...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Create the immutable BenefitCalculationResult value object in Dart with typed fields for hourlyRateEquivalent, travelCos...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Create the BenefitMultiplierConfig data class representing organisation-specific multiplier parameters: hourlyRateEquiva...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Build the BenefitMultiplierConfigRepository that fetches organisation-specific multiplier values from a Supabase table (...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Build the ActivitySummaryAggregator service that queries completed activity records for the current peer mentor from Sup...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Create the ActivitySummary data class with fields: sessionCount (int), averageDurationMinutes (double), totalDurationMin...
Benefit Calculator Data Foundation · Volunteer Benefit Calculator
Write exhaustive unit tests for BenefitCalculationService covering nominal inputs, zero values, fractional hours, large ...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Write bloc_test unit tests for BenefitCalculatorBloc covering: successful config load → correct initial state, InputChan...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Create the immutable BenefitCalculationResult data class that holds all computed output fields: hours_saved, travel_cost...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Implement the BenefitMultiplierConfigRepository that loads organisation-specific multiplier configuration (hourly value ...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Implement BenefitCalculationService as a stateless class with a single calculate(ActivityInput input, BenefitMultiplierC...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Define the BLoC events (InputChanged, ResetRequested, ShareRequested) and states (BenefitCalculatorInitial, BenefitCalcu...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Implement the BenefitCalculatorBloc class. On init, call BenefitMultiplierConfigRepository.fetchConfig() and emit a load...
Benefit Calculation Engine and State Management · Volunteer Benefit Calculator
Create the data layer repository that loads and caches benefit multiplier configuration values (e.g., societal value per...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Define the immutable Dart data model that holds the output of a benefit calculation: personal metrics (hours volunteered...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Build the service that queries the local database for a peer mentor's activity records and aggregates them into session ...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Create the pure business-logic service that accepts session count and duration inputs alongside multiplier config values...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Implement the Flutter widget that renders labelled numeric input fields with stepper controls for session count and sess...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Implement the reusable accessible tile Flutter widget that renders a single benefit metric with icon, formatted numeric ...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Implement the visually rich Wrapped-style Flutter card widget that displays personal and societal benefit metrics using ...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Compose the main BenefitCalculatorScreen as a single scrollable view that integrates CalculatorInputPanel at the top, li...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Build the BLoC that manages calculator screen state: handles input change events from CalculatorInputPanel, calls Benefi...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Build the service that captures the BenefitResultsCard RepaintBoundary as a PNG image and invokes the native platform sh...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Write a comprehensive test suite covering: unit tests for BenefitCalculationService formula correctness and edge cases (...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Apply full WCAG 2.2 AA compliance across all five components: add live region announcements on calculation completion so...
Benefit Calculator UI Components and Share Flow · Volunteer Benefit Calculator
Write inline Dart documentation for all public methods and classes in SecureSessionStorage and LocalAuthIntegration. Cre...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Create a Riverpod provider (preferably a Provider or StateNotifierProvider) for SecureSessionStorage so that dependent c...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Create a Riverpod provider for LocalAuthIntegration following the same conventions used for SecureSessionStorage in task...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Write flutter_test unit tests for SecureSessionStorage using a mocked FlutterSecureStorage. Cover: writeSession persists...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Write flutter_test unit tests for LocalAuthIntegration using a mocked LocalAuthentication. Cover: isAvailable returns fa...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Create a Dart file defining the SecureStorageKey enum (sessionToken, sessionExpiry, biometricEnabled, userId, refreshTok...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Implement the SecureSessionStorage class wrapping FlutterSecureStorage. Expose typed async methods: writeSession(StoredS...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Create a sealed class or enum hierarchy for LocalAuthFailure domain codes: notAvailable, notEnrolled, lockedOut, permane...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Implement the LocalAuthIntegration class wrapping the local_auth LocalAuthentication instance. Expose: isAvailable() ret...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Add flutter_secure_storage and local_auth packages to pubspec.yaml. Pin to versions compatible with the project's Flutte...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Add NSFaceIDUsageDescription to iOS Info.plist with a clear user-facing rationale string. Verify Keychain entitlements a...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Add USE_BIOMETRIC and USE_FINGERPRINT permissions to AndroidManifest.xml. Ensure minSdkVersion is compatible with the Bi...
Secure Storage and Platform Abstraction Foundation · Biometric Session Authentication
Implement offline session validation logic in BiometricAuthService that defers Supabase network calls when connectivity ...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the step-up authentication API on BiometricAuthService that allows sensitive screens (such as encrypted contac...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the signOut() method in SupabaseSessionManager that calls Supabase Auth signOut, clears all cached session tok...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the sessionStateStream in SupabaseSessionManager and wire it to Riverpod providers so that session state chang...
Biometric Authentication Core Services · Biometric Session Authentication
Wire BiometricAuthService into the existing auth repository layer so that successful biometric authentication updates th...
Biometric Authentication Core Services · Biometric Session Authentication
Write unit tests covering all BiometricAuthService methods and BiometricAuthBloc state transitions. Tests cover: device ...
Biometric Authentication Core Services · Biometric Session Authentication
Write integration tests using flutter_test that cover the complete authentication flow end-to-end: biometric verificatio...
Biometric Authentication Core Services · Biometric Session Authentication
Create typed domain result objects for all biometric authentication outcomes: BiometricAuthSuccess, BiometricAuthFailure...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the device capability detection logic within BiometricAuthService that queries LocalAuthIntegration to determi...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the outcome routing logic in BiometricAuthService that maps raw LocalAuth results to typed BiometricAuthResult...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the Bloc/Cubit state machine that models the complete biometric authentication flow with states: idle, prompti...
Biometric Authentication Core Services · Biometric Session Authentication
Define the abstract interface (contract) for SupabaseSessionManager that specifies the shared session lifecycle API used...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the proactive token refresh mechanism in SupabaseSessionManager that monitors session token expiry and refresh...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the core method in BiometricAuthService that invokes the native biometric authentication dialog via LocalAuthI...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the Supabase session token refresh step within BiometricAuthService that executes immediately after a successf...
Biometric Authentication Core Services · Biometric Session Authentication
Implement the validateCurrentSession() method in SupabaseSessionManager that validates the current session against Supab...
Biometric Authentication Core Services · Biometric Session Authentication
Implement a debounce mechanism within SessionResumeManager to prevent duplicate biometric prompts when the app rapidly t...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Implement the revocation flow triggered when the user disables biometrics via the settings toggle. This must clear all s...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Annotate all interactive and informational elements in BiometricPromptOverlay with Semantics widgets. Set meaningful lab...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Implement BiometricUnavailableBanner as an inline banner/modal widget that uses the organisation's dynamic terminology s...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Implement the one-tap deep link in BiometricUnavailableBanner that opens the OS biometric settings screen (using url_lau...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Create the one-time onboarding prompt displayed after a user's first successful credential login, offering them the opti...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Add a biometric authentication toggle switch to the app settings screen. When toggled on, trigger the opt-in flow; when ...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Write flutter_test widget tests covering: BiometricPromptOverlay rendering with correct logo and prompt text, successful...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Write unit tests for SessionResumeManager covering: lifecycle observer registration and teardown, debounce prevents dupl...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Write an integration test that exercises the complete biometric session resume flow end-to-end: user logs in with creden...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Register SessionResumeManager as a WidgetsBindingObserver and implement the didChangeAppLifecycleState callback to detec...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Read the stored session from SecureSessionStorage on resume, validate expiry timestamp, and route to the appropriate scr...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Create the BiometricPromptOverlay as a full-screen Flutter widget using design tokens exclusively (zero inline styles). ...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Wire the native biometric dialog trigger into BiometricPromptOverlay by calling BiometricAuthService on widget mount (in...
Session Lifecycle Orchestration and UI Layer · Biometric Session Authentication
Implement the ActivityCategoryMappingConfig Dart class that reads the bufdir_category_mappings table, exposes a lookup m...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Write the PostgreSQL migration that adds the is_proxy_registered boolean column (default false) to the activities table....
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Implement the MultiOrgDataIsolator Dart class that sets the app.current_org_id session variable on every Supabase reques...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Implement the SupabaseAggregationRpc Dart class that wraps the generate_bufdir_report Supabase RPC call with typed param...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Design and document the Row Level Security policy schema for strict per-organization data isolation. Define the org_id p...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Implement the PostgreSQL migration file that creates and enables Row Level Security policies on all relevant tables (act...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Write the PostgreSQL migration that creates the bufdir_category_mappings table. The table maps internal activity type ID...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Write the PostgreSQL server-side generate_bufdir_report(p_org_id UUID, p_period_start DATE, p_period_end DATE, p_mapping...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Deploy all database migrations (RLS policies, bufdir_category_mappings table, is_proxy_registered column, generate_bufdi...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Write integration tests that verify the complete multi-tenant isolation and aggregation pipeline. Tests must confirm: (1...
Multi-Tenant Infrastructure & Database Foundation · Bufdir Data Aggregation
Add typed query builder methods for Supabase view-based queries (as opposed to RPC calls): raw activity records, raw eve...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Implement the write and cache operations in the Bufdir Metrics Repository: saveMetricSnapshot (persist computed aggregat...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Write integration tests that execute the Aggregation Query Builder and Bufdir Metrics Repository methods against a real ...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Write comprehensive unit tests for the Aggregation Query Builder and Bufdir Metrics Repository using flutter_test and mo...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Create strongly typed Dart model classes for all aggregation-related data structures: activity records, event records, c...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Build the org-isolation filter layer inside the Aggregation Query Builder that automatically appends organization_id con...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Implement typed Dart function signatures in the Aggregation Query Builder that wrap each Supabase RPC function call (act...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Define the abstract Dart interface (abstract class) for the Bufdir Metrics Repository. The interface must declare all me...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Implement the concrete Bufdir Metrics Repository class for all read operations: delegating fetchRawActivities, fetchRawE...
Aggregation Query Builder & Metrics Repository · Bufdir Data Aggregation
Add historical period lookup methods to ReportingPeriodService: getPeriodById(), listHistoricalPeriods(), getPeriodByDat...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Write unit and integration tests for ReportingPeriodService covering: period boundary edge cases (midnight UTC vs local)...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Write integration tests for GeographicDistributionService using a seeded test database reflecting NHF's 1,400-chapter st...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Create the ReportingPeriod domain model with start/end date boundaries, period type enum (monthly, quarterly, annual, cu...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the core ReportingPeriodService with period definition methods: createPeriod(), getActivePeriod(), listAvailab...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the core deduplication algorithm in ParticipantDeduplicationService that identifies participants double-counte...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Extend ParticipantDeduplicationService to handle NHF members belonging to up to 5 local chapters simultaneously. Impleme...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the final deduplication output stage: getUniqueParticipantCount(period, bufdirCategory, orgId) method that ret...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement org hierarchy traversal in GeographicDistributionService that walks NHF's 3-tier structure (12 national associ...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the core geographic breakdown computation in GeographicDistributionService: getRegionBreakdown(period, orgId) ...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Extend GeographicDistributionService to prevent double-counting members active in multiple chapters within the same regi...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the BufdirAggregationService (Tier 4) orchestrator that coordinates the full aggregation pipeline: invoke Repo...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Integrate activity category mapping into BufdirAggregationService: translate internal activity type IDs to Bufdir-requir...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Implement the final output stage of BufdirAggregationService: assembleMetricsPayload(period, orgId) that structures dedu...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Write comprehensive tests for ParticipantDeduplicationService: proxy double-counting scenarios, 5-chapter member scenari...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Write end-to-end integration tests for the complete BufdirAggregationService pipeline using realistic seeded data: multi...
Core Aggregation Business Logic Services · Bufdir Data Aggregation
Write flutter_test widget tests covering: AggregationProgressIndicator renders correct stage highlights for each BLoC st...
Aggregation User Interface Components · Bufdir Data Aggregation
Build the AggregationProgressIndicator Flutter widget that renders the four-stage pipeline (fetching → categorising → de...
Aggregation User Interface Components · Bufdir Data Aggregation
Extend AggregationProgressIndicator with a dismissible warning banner that surfaces when the BLoC emits AggregationWarni...
Aggregation User Interface Components · Bufdir Data Aggregation
Define the AggregationSummaryData model that the AggregationSummaryWidget will render: participant counts (total, dedupl...
Aggregation User Interface Components · Bufdir Data Aggregation
Build the read-only AggregationSummaryWidget Flutter widget with sections for: participant count card, activity hours by...
Aggregation User Interface Components · Bufdir Data Aggregation
Extend AggregationSummaryWidget with a warning section that lists activity types that could not be mapped to a Bufdir ca...
Aggregation User Interface Components · Bufdir Data Aggregation
Audit both AggregationProgressIndicator and AggregationSummaryWidget against WCAG 2.2 AA requirements: verify contrast r...
Aggregation User Interface Components · Bufdir Data Aggregation
Define the BLoC state classes and events that both UI components will consume: AggregationInitial, AggregationInProgress...
Aggregation User Interface Components · Bufdir Data Aggregation
Build the Dart service class that wraps Supabase Storage operations for the bufdir-exports bucket. Implement uploadRepor...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Implement the export period picker as a stateless Flutter widget that presents predefined period presets (Q1, Q2, Q3, Q4...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Implement the export confirmation dialog as a stateless Flutter widget that displays a summary of the export parameters ...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Implement the export progress indicator as a stateless Flutter widget showing step-by-step export progress: querying dat...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Build the file download handler that retrieves a signed URL from export storage and triggers the native device save/shar...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Write unit tests for GeneratedReportsRepository covering: successful audit record creation, status update on completion ...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Write unit tests for ExportDataQueryBuilder with fixture datasets covering: single-chapter scope, multi-level hierarchy ...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Write unit tests for BufdirCategoryMapper covering: successful mapping of all known activity types to their Bufdir codes...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Write integration tests against the real Supabase test environment verifying: coordinator can upload and download files ...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Build the Dart repository class that wraps all CRUD operations for the generated_reports table. Implement methods: creat...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Implement the query builder service that encapsulates all complex join logic needed for Bufdir export data. Queries must...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Build the organisation hierarchy resolver that, given a coordinator's scope ID (chapter, region, or national level), exp...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Build the category mapper service that translates internal activity types to the official Bufdir category codes, reading...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Design and implement the generated_reports audit table in Supabase with columns for report_id, org_id, generated_by, per...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Create the bufdir-exports Supabase Storage bucket. Configure org-scoped access policies so that files stored at path {or...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Write unit tests for OrgHierarchyResolver covering: national-level scope expanding to all 1400 leaf IDs, region-level sc...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Run integration tests for ExportDataQueryBuilder against the Supabase test database seeded with realistic activity data ...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Perform end-to-end integration verification of all Tier 0 components together: GeneratedReportsRepository creates an aud...
Bufdir Export Foundation — Data Layer and Infrastructure · Bufdir Report Export
Add a secondary endpoint or query parameter to the edge function that accepts an export_id and returns a fresh signed do...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Write technical documentation for the Bufdir export edge function API: request/response schemas, supported scope levels,...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the export history list Flutter widget that reads from the generated_reports repository and displays past expo...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Add duplicate detection logic to the aggregation service that identifies activities where the same peer mentor registere...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Add a validation pass to the Bufdir format serializer that checks the produced payload against Bufdir submission rules: ...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the CSV generation service that consumes the canonical Bufdir JSON payload and produces a UTF-8 CSV file confo...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the PDF generation service using a server-side PDF library (pdf package or equivalent) to produce a structured...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Wire the Bufdir canonical payload data into the PDF template: populate peer mentor rows, category breakdowns, totals, or...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the generated_reports repository layer that persists export history records to the Supabase database. Each rec...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Write integration tests covering the full export pipeline: seed test activity data for a multi-chapter org, call the edg...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Define the canonical Bufdir JSON payload TypeScript interfaces and Dart models that represent the intermediate represent...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Extend the activity aggregation service to support region and national scope_level values. When scope is region, aggrega...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the Bufdir format serializer's category mapping layer that translates internal activity_type values to the can...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Build the main transformation function in the Bufdir format serializer that converts the raw aggregation output into the...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Integrate the activity aggregation service and Bufdir format serializer into the edge function processing pipeline. For ...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the finalize export path in the edge function that runs aggregation, serialization, then invokes either the CS...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement the core Supabase query in the activity aggregation service that fetches all activity records for a given org_...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Create the Supabase Edge Function entry point for Bufdir export. Implement request parsing and validation for the input ...
Bufdir Export Core Backend — Aggregation, Serialization, and File Generation · Bufdir Report Export
Implement requestPreview() in BufdirExportService. This path invokes the edge function with a preview flag, routes the r...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Implement the internal routing logic that inspects the edge function response and the requested ExportFormat to dispatch...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Connect the ExportScopeSelector widget to the export screen's Riverpod provider so that scope selection updates are refl...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Write integration tests covering the full export orchestration flow: (1) scope selector renders only permitted scopes fo...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Implement the access-resolution logic that queries the authenticated user's role and org-unit membership to determine wh...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Define the abstract BufdirExportService interface with two primary methods: requestPreview(scope, period) and requestFin...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Implement requestFinalExport() in BufdirExportService. Invoke the edge function, route the response to the correct file ...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Define the ExportScope enum (local_chapter, region, national), the ExportScopeState class, and the Riverpod StateNotifie...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Implement the ExportScopeSelector Flutter widget that consumes the Riverpod provider from task-001 and the permitted-sco...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Implement the HTTP call from BufdirExportService to the Bufdir export edge function. Pass scope, period, and format para...
Bufdir Export Orchestration — Client Service and Scope Selection · Bufdir Report Export
Add a metadata header section inside ExportPreviewPanel that displays the selected organisational scope (organisation na...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Within ExportPreviewPanel, render a collapsible warning section that lists unmapped activity types (types present in the...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Add an ExportReadinessBanner widget at the top of BufdirExportScreen that computes and displays overall export readiness...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Write flutter_test widget tests and integration tests covering the full user journey from opening BufdirExportScreen to ...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Define the ExportPreviewState data model covering aggregated activity counts per Bufdir category, scope metadata, period...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Build the ExportPreviewPanel Flutter widget that renders a scrollable table of Bufdir activity categories, showing categ...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Create the BufdirExportScreen as a StatefulWidget that owns a multi-phase navigation state machine with three phases: Co...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Embed the ExportScopeSelector and ExportPeriodPicker widgets into BufdirExportScreen's Configuration phase. Wire their o...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Mount the ExportPreviewPanel inside BufdirExportScreen's Preview phase. When the user navigates from Configuration to Pr...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
In BufdirExportScreen's Execution phase, show the ExportConfirmationDialog when the user taps 'Confirm Export'. On confi...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Connect ExportPreviewCubit to BufdirExportService.fetchPreview(), passing the selected organisational scope and reportin...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Audit the completed ExportPreviewPanel widget against WCAG 2.2 AA criteria: ensure all interactive and informational ele...
Bufdir Export User Interface — Preview Panel and Main Export Screen · Bufdir Report Export
Add a submission_mode configuration field (values: file_based, direct_api) to the org-level feature flag system. The buf...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
After successful API submission, store the Bufdir-issued reference number in the generated_reports audit record. Add the...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Implement secure storage and rotation of Bufdir API credentials within the bufdir-api-client. Credentials must be stored...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Write technical documentation for the bufdir-api-client covering: the shared interface contract between file-based and A...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Implement authentication with Bufdir's API inside the bufdir-api-client. Support OAuth2 client-credentials flow and API-...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Build the HTTP submission layer in the bufdir-api-client: POST to the Bufdir API endpoint, parse the confirmation respon...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Design and document the abstract interface for the bufdir-api-client that is shared with the file-based export path. Def...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Implement the request mapper inside the bufdir-api-client that translates the canonical internal Bufdir JSON payload (pr...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Wire the bufdir-api-client into the bufdir-export-service submission routing. When submission_mode is direct_api, call b...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Write comprehensive tests for the bufdir-api-client: unit tests for the request mapper covering all required and optiona...
Bufdir Export Phase 3 — Direct API Integration Client · Bufdir Report Export
Write developer documentation covering: the bufdir_report_history table schema with column descriptions and constraints,...
Report History Data Foundation · Bufdir Report History & Audit Log
Write unit tests for ReportHistoryRepository using Mockito-generated mocks for the Supabase client. Cover: successful pa...
Report History Data Foundation · Bufdir Report History & Audit Log
Write unit tests for ReportFileStorageClient covering: uploadReportFile constructs organization-scoped path correctly, u...
Report History Data Foundation · Bufdir Report History & Audit Log
Create the ReportHistoryRepository class in Dart using the Supabase Flutter client. Implement methods: fetchReportHistor...
Report History Data Foundation · Bufdir Report History & Audit Log
Define the ReportHistoryRecord immutable data class using freezed in Dart. Include all fields matching the database sche...
Report History Data Foundation · Bufdir Report History & Audit Log
Create the ReportFileStorageClient class wrapping Supabase Storage operations. Implement uploadReportFile(organizationId...
Report History Data Foundation · Bufdir Report History & Audit Log
Design and implement the Supabase PostgreSQL migration for the bufdir_report_history table. Include columns for id, orga...
Report History Data Foundation · Bufdir Report History & Audit Log
Write and apply Row Level Security policies on the bufdir_report_history table enforcing multi-tenant organization scopi...
Report History Data Foundation · Bufdir Report History & Audit Log
Create the bufdir-reports Supabase Storage bucket with a 5-year retention policy. Configure bucket-level RLS so that onl...
Report History Data Foundation · Bufdir Report History & Audit Log
Write integration tests that verify the RLS policies are correctly enforced. Tests must cover: (1) coordinator from org ...
Report History Data Foundation · Bufdir Report History & Audit Log
Extend ReportHistoryService fetch methods to accept optional date range (start/end) and reporting period filter paramete...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Integrate the permission system into ReportHistoryService so that only users with coordinator or organization admin role...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Add a method to ReportHistoryService that accepts a stored file reference from a history record and delegates to the rep...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
After successful re-export, have the ReportReexportCoordinator persist the newly generated file reference in the report ...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Add audit trail event logging to the ReportReexportCoordinator that records every re-export action as an immutable audit...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Write unit tests for all public methods in ReportHistoryService covering pagination, role enforcement, signed URL resolu...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Build the core fetch method in ReportHistoryService that retrieves paginated report history records scoped to the authen...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Implement the initial step of the ReportReexportCoordinator that loads the stored period parameters (date range, reporti...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Wire the ReportReexportCoordinator to call the existing Bufdir export pipeline from the bufdir-report-export feature, pa...
Report History Business Logic & Re-export Services · Bufdir Report History & Audit Log
Ensure all three components (ReportHistoryScreen, ReportHistoryListItem, ReportSummaryMetricsWidget) exclusively use the...
Report History User Interface · Bufdir Report History & Audit Log
Write flutter_test widget tests for ReportHistoryScreen, ReportHistoryListItem, and ReportSummaryMetricsWidget covering:...
Report History User Interface · Bufdir Report History & Audit Log
Write developer documentation for the three report history UI components covering: widget API (constructor parameters, r...
Report History User Interface · Bufdir Report History & Audit Log
Build the ReportSummaryMetricsWidget Flutter widget that displays snapshot key figures captured at report generation tim...
Report History User Interface · Bufdir Report History & Audit Log
Build the ReportHistoryListItem Flutter widget that renders a single past Bufdir report entry. It must display period ra...
Report History User Interface · Bufdir Report History & Audit Log
Implement the year, period type, and status filter controls for the report history screen. Filter state must persist for...
Report History User Interface · Bufdir Report History & Audit Log
Build the ReportHistoryScreen Flutter widget as the main entry point for the report history feature. Implement a paginat...
Report History User Interface · Bufdir Report History & Audit Log
Create the BLoC or Riverpod provider/notifier for the report history feature that manages paginated loading, filter stat...
Report History User Interface · Bufdir Report History & Audit Log
Audit and enforce WCAG 2.2 AA compliance across ReportHistoryScreen, ReportHistoryListItem, and ReportSummaryMetricsWidg...
Report History User Interface · Bufdir Report History & Audit Log
Wire the re-export action buttons on ReportHistoryListItem to the ReportReexportCoordinator via the state layer. Tapping...
Report History User Interface · Bufdir Report History & Audit Log
Implement a Flutter widget that displays a scrollable, selectable list of organisation-scoped period presets. Each list ...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Implement an accessible Flutter date range picker widget that provides dual calendar controls for selecting start and en...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Write an integration test that exercises the full data path from Supabase through both repositories into the PeriodPrese...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Write unit tests for PeriodConfigurationRepository and BufdirAggregationRepository using flutter_test and Mockito stubs ...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Write Flutter widget tests for PeriodPresetList and CustomDateRangePicker. Tests must verify: preset selection triggers ...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Perform a structured WCAG 2.2 AA accessibility audit on PeriodPresetList and CustomDateRangePicker. Verify contrast rati...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Build the Dart repository class that reads and writes period configuration presets to Supabase. Include offline caching ...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Build the Dart repository class that wraps the Supabase aggregation RPC functions. Expose getActivityCountForPeriod(orgI...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Create the Supabase database table and RLS policies for per-organisation period configuration presets. The table must st...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Implement Supabase RPC functions or materialized views that support range-based activity count queries against the activ...
Data Foundation & Reusable UI Primitives · Bufdir Report Period Selection
Write integration-level smoke tests that wire PeriodPresetService, PeriodRecordCountService, and ReportPeriodValidator a...
Business Services & Validation Logic · Bufdir Report Period Selection
Create the PeriodPreset domain model class, the PeriodPresetIdentifier enum (e.g., currentCalendarYear, lastCalendarYear...
Business Services & Validation Logic · Bufdir Report Period Selection
Implement the PeriodPresetService class that reads org-specific preset configuration from the PeriodConfigurationReposit...
Business Services & Validation Logic · Bufdir Report Period Selection
Implement PeriodRecordCountService that accepts a DateTimeRange and orgId, queries the BufdirAggregationRepository async...
Business Services & Validation Logic · Bufdir Report Period Selection
Define the ReportPeriodValidator abstract interface with a validate(DateTimeRange range, String orgId) method returning ...
Business Services & Validation Logic · Bufdir Report Period Selection
Implement the first two validation rules inside ReportPeriodValidatorImpl: (1) verify that the range start is the first ...
Business Services & Validation Logic · Bufdir Report Period Selection
Extend ReportPeriodValidatorImpl with the overlap detection rule: query PeriodConfigurationRepository for previously sub...
Business Services & Validation Logic · Bufdir Report Period Selection
Wrap ReportPeriodValidatorImpl in a Riverpod Provider (reportPeriodValidatorProvider) with the PeriodConfigurationReposi...
Business Services & Validation Logic · Bufdir Report Period Selection
Write flutter_test unit tests for PeriodPresetService (preset resolution and DateTimeRange mapping for standard and cust...
Business Services & Validation Logic · Bufdir Report Period Selection
Implement RecordCountBanner as a BlocBuilder widget that consumes PeriodSelectionBloc state. Display record count promin...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Wrap RecordCountBanner content in a Semantics widget configured as a live region (liveRegion: true) so screen readers an...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Within RecordCountBanner, add a secondary informational section that compares the selected period against the last submi...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Write bloc_test unit tests for all PeriodSelectionBloc event handlers covering happy path, loading states, validation fa...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Define the PeriodSelectionBloc class with all state classes (PeriodSelectionInitial, PeriodSelectionLoading, PeriodSelec...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Implement the LoadPresets event handler inside PeriodSelectionBloc to call PeriodPresetService, map results to PeriodPre...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Add the FetchRecordCount event handler to PeriodSelectionBloc. On each preset selection or custom range change, debounce...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Implement the ConfirmPeriod event handler in PeriodSelectionBloc. Call ReportPeriodValidator with the selected DateTimeR...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Create PeriodSelectionScreen as a StatelessWidget with a BlocProvider for PeriodSelectionBloc. Apply role-based access c...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Assemble PeriodPresetList, CustomDateRangePicker, RecordCountBanner, and the confirm action button inside PeriodSelectio...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Add a BlocListener in PeriodSelectionScreen that reacts to PeriodConfirmed state: write the confirmed DateTimeRange to R...
BLoC State Management & Period Selection Screen Assembly · Bufdir Report Period Selection
Extend BufdirPreviewRepository with an offline-capable local cache using Hive or shared_preferences so that after the fi...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Add a second Riverpod stream to BufdirPreviewRepository that fetches the equivalent aggregated data for the prior report...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Write comprehensive tests covering: BufdirPreviewRepository stream emissions for loaded/error/cache-hit states using a m...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Build the full BufdirPreviewRepository class exposing reactive Riverpod StreamProvider streams for current-period report...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
In BufdirReportStructureMapper, declare the canonical ordered list of all Bufdir form sections (e.g., demographic catego...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Implement the mapping table in BufdirReportStructureMapper that converts the app's internal activity category IDs (as st...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Extend BufdirReportStructureMapper so that when the aggregated data has no value for a required field, the field is stil...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Design and implement the Supabase query methods inside BufdirPreviewRepository that fetch aggregated activity data for a...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Build BufdirAccessibilityUtils with three capabilities: (1) a set of WCAG 2.2 AA compliant color tokens (foreground/back...
Bufdir Preview Foundation: Data Layer and Structure Mapping · Bufdir Report Preview
Implement the anomaly detection rule class. For each numeric field, compare the current period value to the prior-period...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Extend BufdirPreviewService with session state: store the most recently assembled BufdirPreviewModel (selected period, a...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Write comprehensive unit tests for all three rule classes and the orchestration method using flutter_test. Cover: empty ...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Write integration tests for the full preview assembly pipeline using flutter_test with mocked repository and mapper depe...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Create the core Dart data models for the validation layer: ValidationIssue (with severity enum: error/warning/info, fiel...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Implement the completeness rule class within BufdirFieldValidationService. For each required field in a BufdirReportSect...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Implement the threshold compliance rule class. For numeric fields that have a Bufdir-defined minimum value (configured v...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Wire all three rule evaluators (completeness, threshold, anomaly) into the main BufdirFieldValidationService.validate() ...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Define the BufdirPreviewModel Dart class that the preview service produces and the UI consumes. It must contain: the sec...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Implement BufdirPreviewService.assemblePreview(periodId, orgId). The method must: (1) fetch aggregated data via BufdirPr...
Bufdir Preview Core Logic: Validation Engine and Preview Orchestration · Bufdir Report Preview
Define BufdirValidationSummaryData model containing total error count, total warning count, and a list of BufdirValidati...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Build the BufdirValidationSummaryBanner as a sticky widget pinned at the top of the preview screen using a SliverPersist...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Extend BufdirValidationSummaryBanner with an expandable issue list panel that slides down when the banner is tapped. The...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Integrate Flutter SemanticsService and live region semantics into BufdirValidationSummaryBanner so that when the validat...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Connect all three widgets to the decorated preview model from BufdirPreviewService via Riverpod providers. BufdirReportS...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Write flutter_test widget tests covering: BufdirFieldRowWidget rendering in all three validation states with correct ico...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Define the Dart data model for BufdirFieldRowData including label, value, validationState enum (normal, warning, anomaly...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Build the BufdirFieldRowWidget StatelessWidget with a two-column layout: left column shows the field label, right column...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Extend BufdirFieldRowWidget to display a validation state icon (warning triangle or anomaly indicator) using WCAG-compli...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Define BufdirReportSectionData model containing section title, semantic heading level, list of BufdirFieldRowData items,...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Build BufdirReportSectionWidget as a collapsible card (ExpansionTile or custom AnimatedContainer) that renders a semanti...
Bufdir Preview UI Components: Field Rows, Sections, and Validation Banner · Bufdir Report Preview
Create the BufdirPeriodDiffView StatefulWidget as an optional overlay panel. Implement the diff toggle button in BufdirP...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Wire BufdirPeriodDiffView to BufdirPreviewRepository to load prior-period report data only when the diff panel is toggle...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Inside BufdirPeriodDiffView, for each Bufdir field render a comparison row showing the prior-period value beside the cur...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Add threshold-based visual highlighting to BufdirPeriodDiffView rows. Fields where the absolute percentage delta exceeds...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Write flutter_test widget tests covering: diff panel is hidden by default, toggle opens panel and triggers prior-period ...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Write an integration test that drives the full coordinator flow from period selection through preview to export: navigat...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Create the top-level BufdirPreviewScreen StatefulWidget with full-screen layout, AppBar with header actions (export butt...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Mount the BufdirValidationSummaryBanner at the top of BufdirPreviewScreen. Pass validation results from BufdirFieldValid...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Use BufdirReportStructureMapper to retrieve the ordered list of Bufdir form sections and dynamically render BufdirReport...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Add an Export action button to the BufdirPreviewScreen AppBar. When pressed, check BufdirFieldValidationService for acti...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Audit BufdirPreviewScreen for WCAG 2.2 AA compliance: add Semantics wrappers to all interactive elements (export button,...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Ensure BufdirPeriodDiffView provides text-based percentage descriptions for screen reader users instead of relying on co...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Write flutter_test widget tests covering: initial load state renders loading indicator, loaded state renders validation ...
Bufdir Preview Screen Assembly and Period Comparison Diff View · Bufdir Report Preview
Write integration tests covering the three repository and storage classes against a Supabase test instance. Test cases m...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Implement the ExportAuditRepository class in Dart using Supabase client. Expose methods: insertAuditEntry(ExportAuditEnt...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Implement the BufdirSchemaConfigRepository class in Dart. Expose methods: getActiveSchema(String orgId), getAllVersions(...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Implement the BufdirExportFileStorage adapter class in Dart wrapping Supabase Storage. Expose methods: uploadExportFile(...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Design and implement the bufdir_export_audit_log table with append-only semantics in Supabase. Define columns for export...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Design and implement the bufdir_column_schema_config table to store per-organisation Bufdir column definitions with vers...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Write and apply Row Level Security policies on bufdir_export_audit_log to enforce organisational data isolation. Policy ...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Write and apply Row Level Security policies on bufdir_column_schema_config to enforce strict org-scoped access. Coordina...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Create and configure a dedicated Supabase Storage bucket named 'bufdir-exports' with org-scoped path structure (/{org_id...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Configure Storage access policies on the 'bufdir-exports' bucket so that users can only read and write files under their...
Bufdir Export Data Foundation & Storage Infrastructure · Bufdir Reporting & Export
Define the abstract Dart interface for the BufdirApiIntegrationService including method signatures for submitting export...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write developer documentation for all five processing services covering: service interface definitions with parameter de...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Extend the BufdirExcelCsvGenerator with a CSV export path that produces a semicolon-delimited file with the same Bufdir-...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Build the BufdirPdfGenerator service that renders Bufdir's official report template layout as a PDF document. Implement ...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Configure the PDF generator with proper Norwegian locale support including correct date formatting (DD.MM.YYYY), currenc...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Implement the BufdirAttachmentBundler's collection phase that queries the database for all document attachments linked t...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Build the ZIP archive creation phase of the BufdirAttachmentBundler that packages all collected activity-linked document...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Implement the BufdirApiIntegrationService as an abstraction layer that encapsulates the file delivery mechanism. The stu...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write unit tests for the BufdirExcelCsvGenerator covering correct column mapping to Bufdir's required layout, Norwegian ...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write unit tests for the BufdirPdfGenerator verifying correct page layout structure, presence of all required Bufdir tem...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write unit tests for the BufdirAttachmentBundler covering attachment collection from database, ZIP directory structure c...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Implement performance tests for the BufdirActivityQueryService simulating organizations with large activity volumes (100...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Build the core BufdirActivityQueryService that queries activities from the Supabase database with org-scoped filtering, ...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Extend the BufdirActivityQueryService with the multi-chapter deduplication algorithm that identifies and removes duplica...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Implement the BufdirExcelCsvGenerator using a server-side Dart Excel library to produce .xlsx files conforming to Bufdir...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Add Row Level Security compatible filtering to the activity query service ensuring each organization can only access the...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write comprehensive unit tests for the BufdirActivityQueryService covering multi-chapter deduplication scenarios includi...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write integration tests that exercise the complete artifact generation pipeline end-to-end using a test Supabase instanc...
Bufdir Activity Query, File Generation & Attachment Bundling Services · Bufdir Reporting & Export
Write developer documentation covering: the ColumnMappingConfig JSON structure, how to add a new organisation's column s...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Add post-mapping validation logic to BufdirColumnMapper: check for required Bufdir columns, validate data types and valu...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Extend BufdirExportAuditService with attachFileRef method that records the storage path, MIME type, file size, and check...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Add structured error propagation to BufdirExportOrchestratorService: catch sub-service exceptions individually, classify...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Create Riverpod providers for BufdirColumnMapper, BufdirExportAuditService, and BufdirExportOrchestratorService. Inject ...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Write unit tests for BufdirColumnMapper covering: NHF, Blindeforbundet, and HLF column schema configs, null value policy...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Write unit tests for BufdirExportAuditService covering: record creation with all required fields, valid and invalid stat...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Define the Dart data models and abstract interfaces for the Bufdir column mapper, including ColumnMappingConfig, MappedR...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Define Dart data models for the export audit service: ExportAuditRecord, ExportStatus enum (initiated, in_progress, comp...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Define the ExportOrchestrator abstract interface, ExportRequest value object, ExportResult sealed class (ExportSuccess w...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Implement the BufdirColumnMapper service that reads per-organisation ColumnMappingConfig from the schema config reposito...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Implement BufdirExportAuditService backed by the export audit repository. On export initiation, create an immutable audi...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Implement BufdirExportOrchestratorService that coordinates the end-to-end export pipeline in order: (1) create audit rec...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Write integration tests for BufdirExportOrchestratorService using fakes for all sub-services. Test cases: successful end...
Column Mapping, Audit Service & Export Orchestration · Bufdir Reporting & Export
Write developer documentation for all five export UI components covering: component responsibilities, BLoC/Riverpod inte...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Add re-download capability to the export history list: tapping the Re-download button on a history item retrieves the si...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Implement the ExportTriggerBloc/Cubit managing the states: idle, periodSelected, formatSelected, confirming, exporting (...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Implement the Riverpod provider and repository interface for the export history list. The provider must query the Supaba...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Build the BufdirPeriodSelectorWidget Flutter widget with preset shortcut buttons for quarter, half-year, and full-year r...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Extend the BufdirPeriodSelectorWidget with a custom date-range picker fallback that opens a calendar dialog when the use...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Build the BufdirExportFormatSelector Flutter widget presenting Excel, CSV, and PDF options as selectable cards. Each car...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Build the BufdirExportConfirmationDialog showing export scope (organisation/chapter), selected period, estimated record ...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Assemble the BufdirExportTriggerScreen scaffold integrating BufdirPeriodSelectorWidget, BufdirExportFormatSelector, the ...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Wire BufdirExportConfirmationDialog into the ExportTriggerScreen so that tapping the export button dispatches a ConfirmE...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Build the animated progress indicator widget displayed during active export, showing a percentage bar and status label (...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Implement the BufdirExportHistoryList screen with a paginated ListView.builder rendering ExportHistoryListItem widgets. ...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Conduct a systematic WCAG 2.2 AA accessibility audit across all five export UI components: trigger screen, period select...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Write flutter_test widget tests covering: period selector preset and custom-range selection, format selector state trans...
Bufdir Export User Interface & Export History · Bufdir Reporting & Export
Extend ProxyContactListProvider with a session-scoped in-memory cache so that the peer mentor roster is fetched from Sup...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Implement the ProxyAuditBadge as a stateless Flutter widget that accepts a recordedByUserId and an actorUserId. When the...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Update all existing activity card and list-item widgets to conditionally render the ProxyAuditBadge by passing recorded_...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Write unit tests for the BatchInsertRpcAdapter using flutter_test and a mocked Supabase client. Cover: successful batch ...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Write unit tests for ProxyContactListProvider using flutter_test and Riverpod's ProviderContainer. Cover: initial fetch ...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Write widget tests for ProxyAuditBadge using flutter_test: verify badge renders when IDs differ, verify nothing renders ...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Build the BatchInsertRpcAdapter infrastructure component in Dart that wraps the insert_bulk_activities Supabase RPC func...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Create the ProxyContactListProvider as a Riverpod AsyncNotifier that fetches the authenticated coordinator's assigned pe...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Create and apply a Supabase database migration that adds the recorded_by_user_id UUID column (nullable, foreign key to a...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Implement the insert_bulk_activities PostgreSQL function as a Supabase RPC endpoint. The function must accept an array o...
Bulk & Proxy Registration: Foundation Infrastructure · Bulk & Proxy Registration
Add the inline audit trail explanation copy to the Proxy Mode Selector Screen, clearly communicating to coordinators tha...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Wire the two mode card tap handlers to navigate into the single-proxy flow (Peer Mentor Single Selector) and the bulk fl...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Add a select-all / deselect-all toggle control at the top of the Peer Mentor Multi-Select List. Implement a live selecte...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Write integration and widget tests covering the full mode entry and mentor selection flows: navigation from Proxy Mode S...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Implement the Proxy Mode Selector Screen shell with a two-option entry card layout — 'On behalf of one peer mentor' vs '...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Apply full WCAG 2.2 AA compliance to the Proxy Mode Selector Screen: minimum 44×44 dp touch targets on mode cards, contr...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Implement the Peer Mentor Single Selector screen that renders the coordinator's cached contact list from the Proxy Conta...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Add a search bar to the Peer Mentor Single Selector that filters the contact list in real time using debounced local sea...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Apply WCAG 2.2 AA accessibility requirements to the Peer Mentor Single Selector: accessible touch targets (44×44 dp mini...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Implement the Peer Mentor Multi-Select List screen that renders the coordinator's cached contact list with checkboxes, e...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Add a real-time search bar to the Peer Mentor Multi-Select List with debounced filtering that preserves already-selected...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Apply WCAG 2.2 AA compliance to the Peer Mentor Multi-Select List: checkbox touch targets must meet the 44×44 dp minimum...
Bulk & Proxy Registration: Mode Entry & Mentor Selection UI · Bulk & Proxy Registration
Add query methods to ProxyActivityRepository that filter by recorded_by_user_id so a coordinator can retrieve only the p...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Add query methods that aggregate activities by peer_mentor_id regardless of who recorded them, so peer mentor statistics...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Implement the core query in ProxyDuplicateDetector that checks existing activity records for each candidate mentor on th...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Implement the result formatter in ProxyDuplicateDetector that maps raw duplicate query results into a List<MentorDuplica...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Integrate the Batch Insert RPC Adapter into ProxyActivityRepository to support bulk proxy insertions. Implement insertBa...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Write comprehensive unit tests for ProxyActivityRepository using flutter_test and mocked Supabase client. Cover: dual-id...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Write unit tests for ProxyRegistrationService using flutter_test with mocked repository and duplicate detector. Test cas...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Write unit tests for ProxyDuplicateDetector covering: exact triple-key match returns warning with correct fields, partia...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Write integration tests against a Supabase test project that exercise the full pipeline: ProxyDuplicateDetector query → ...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Implement the ProxyActivityRepository Dart class that extends or wraps the existing ActivityRepository. Override the ins...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Implement the permission check layer in ProxyRegistrationService that verifies a coordinator is authorized to register a...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Implement the payload builder in ProxyRegistrationService that assembles a ProxyActivityRecord from the coordinator's se...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Wire together permission validation, payload construction, duplicate detection check, and repository persistence into th...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Create the database migration that extends the activities table (or creates proxy_activities) to include the recorded_by...
Bulk & Proxy Registration: Data Access, Registration Services & Duplicate Detection · Bulk & Proxy Registration
Build the result aggregation logic in BulkRegistrationService that collects individual success/failure outcomes from the...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the swipe-to-remove or explicit remove button on each mentor row in BulkConfirmationScreen, allowing coordinat...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the post-submission results view displayed after BulkRegistrationService completes. Show a summary card with t...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Write integration tests for the complete proxy activity wizard flow: select proxy mode → select peer mentor → complete w...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Write integration tests covering the full bulk registration confirmation flow: activity template + mentor list → pre-che...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Define the ProxyActivityPayload data model that extends the standard activity payload with recorded_by_user_id (coordina...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Define the BulkRegistrationService interface accepting a mentor ID list and a single activity template (ActivityTemplate...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the duplicate detection integration step within BulkRegistrationService. For each mentor in the incoming list,...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the delegation layer in BulkRegistrationService that passes the filtered (post-duplicate-check) mentor list an...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the 'Recording as: [Peer Mentor Name]' attribution banner widget that persists across all steps of the proxy a...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Extend the existing activity wizard step router to support a proxy mode flag. When proxy mode is active, skip the peer m...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Build the ProxyActivityWizardCubit/BLoC that carries the selected peer_mentor_id and recorded_by_user_id through all wiz...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Implement the BulkConfirmationScreen scaffold with a mandatory review gate. Render a non-dismissible activity summary ca...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Extend the mentor list rows in BulkConfirmationScreen to display per-mentor duplicate detection warnings received from t...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Build the BulkConfirmationCubit that manages the confirmed mentor list state (tracking removals), calls the BulkRegistra...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Connect the proxy activity wizard's final confirmation step to the Proxy Registration Service. On coordinator confirmati...
Bulk & Proxy Registration: Activity Wizard, Bulk Orchestration & Confirmation UI · Bulk & Proxy Registration
Produce developer-facing documentation for all four components in this epic: the CertificationExpiryRepository interface...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Write flutter_test unit tests for CertificationExpiryRepository covering: correct date-range filtering for all three thr...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Write flutter_test unit tests for NotificationRecordRepository covering: record creation, threshold-based deduplication ...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Write integration tests for FcmPushNotificationSender covering: token registration and persistence, token refresh behavi...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Create the Dart repository class CertificationExpiryRepository with its abstract interface. Implement Supabase client in...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Add the three threshold query methods to CertificationExpiryRepository: getMentorsExpiringWithinDays(60), getMentorsExpi...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Create the Dart repository class NotificationRecordRepository with its abstract interface and Supabase client integratio...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Add the hasNotificationBeenSentForThreshold(mentorId, thresholdDays) query method to NotificationRecordRepository to pre...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Design and apply the Supabase database migration that creates the certification_expiry_tracking table. Include columns f...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Design and apply the Supabase database migration that creates the notification_records table for persistent in-app notif...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Write and apply the Row Level Security policy on the peer_mentors and related public-facing tables that automatically ex...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Create the FcmPushNotificationSender infrastructure class responsible for Firebase Cloud Messaging integration. Implemen...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Add the core message delivery method sendPushNotification(recipientId, title, body, data) to FcmPushNotificationSender. ...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Write automated tests that verify the expiry RLS policy is enforced for coordinator role queries and public/unauthentica...
Certificate Expiry Notifications — Data Foundation & Infrastructure · Certificate Expiry Notifications
Scaffold the course enrollment prompt service with its public interface: a method that accepts a mentor ID and certifica...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Within the course enrollment prompt service, implement the URL generation logic that produces deep-linked enrollment pro...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Within the coordinator acknowledgement service, implement the audit trail write: persist a structured acknowledgement ev...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Write developer and operations documentation covering the full certificate expiry notification pipeline: architecture di...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Connect the course enrollment prompt service to the expiry notification orchestrator so that notification payloads for l...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Define and centralise the expiry notification threshold configuration — specifically the 60-day, 30-day, and 7-day dispa...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Within the expiry notification orchestrator, build the push notification payload builder that produces distinct FCM mess...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Extend the mentor visibility suppressor to support reactivation: when a previously suppressed mentor's certificate is re...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Build the coordinator acknowledgement service that processes a coordinator's acknowledgement action for a given mentor's...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Add structured error handling to the expiry check edge function: catch downstream service failures, log execution summar...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Write integration tests covering the full expiry notification lifecycle: seed test mentor records at each expiry thresho...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Build the core orchestration service that accepts a list of expiring-certificate mentor records from the edge function a...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Build the mentor visibility suppressor service that receives the list of lapsed-certificate mentors and sets their publi...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Build the data access layer for the certification expiry repository, implementing queries that return mentors with certi...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Create the data access layer for the notification record repository, supporting insert, update, and read operations for ...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Register the expiry check edge function on the Supabase pg_cron schedule to run daily at a defined UTC time (e.g. 02:00 ...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Set up the shared FCM push notification sender integration layer used by the orchestrator. Implement the client wrapper ...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Create the Supabase Edge Function that runs on the daily cron schedule. The function queries the certification expiry re...
Certificate Expiry Notifications — Orchestration Services & Automated Suppression · Certificate Expiry Notifications
Establish design token constants for the three certificate expiry states (active, expiring-soon, expired) within the exi...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Build the reusable ExpiryStatusIndicator Flutter widget in its compact display mode, suitable for embedding in list rows...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Extend the ExpiryStatusIndicator widget with a full display mode for use on detail screens. Full mode shows the badge la...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Create the BLoC event and state classes for certificate expiry notification data. States should cover loading, loaded (w...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Build the ExpiryNotificationBanner Flutter widget for the expiring-soon visual state. The banner is persistent and rende...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Extend the ExpiryNotificationBanner with the differentiated visual state for expired certificates. The expired state use...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Build the NotificationDetailView screen for the peer mentor role. Display certificate name, expiry date, and the ExpiryS...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Extend the NotificationDetailView with coordinator-specific actions: a trigger-course-enrollment button wired to the Cou...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Write Flutter widget tests covering all three expiry states in both compact and full display modes. Tests must verify co...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Write Flutter widget tests for the ExpiryNotificationBanner covering both expiring-soon and expired visual states, BLoC ...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Write Flutter widget tests for NotificationDetailView covering: peer mentor layout renders certificate name, expiry date...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Write Flutter integration tests that exercise the full in-app expiry notification UI flow: Notifications tab loads and r...
Certificate Expiry Notifications — In-App User Interface · Certificate Expiry Notifications
Produce developer documentation covering: peer_mentor_certifications schema with column descriptions and JSONB renewal_h...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Identify and implement the integration touchpoints between PauseManagementService and the certification domain: triggeri...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Implement the CertificationExpiryBadge Flutter widget that renders inline certification status throughout the app. Badge...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Build the PushNotificationService abstract interface and its FCM-backed implementation. Expose sendNotification(recipien...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Build the authentication module for HLFDynamicsSyncService: OAuth2 client credentials flow against the Dynamics 365 tena...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Add exponential backoff retry logic (max 3 retries, 2s/4s/8s delays) and a circuit breaker pattern to HLFDynamicsSyncSer...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Define the canonical webhook payload schema for outbound certification status updates to HLF Dynamics portal: mentorId, ...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Write comprehensive unit tests for CertificationRepository: test all CRUD methods, expiry queries, and error paths using...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Write integration tests for HLFDynamicsSyncService against the HLF Dynamics sandbox environment. Cover: successful certi...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Write integration tests verifying the PushNotificationService correctly deduplicates notifications using cert_notificati...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Build the CertificationRepository Dart class with full CRUD: createCertification, getCertificationById, getCertification...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Extend CertificationRepository with expiry-aware queries: getExpiringSoon(withinDays), getExpiredCertifications, getActi...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Design and migrate the peer_mentor_certifications table in Supabase with all required columns: id, peer_mentor_id, certi...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Design and migrate the cert_notification_log table used to prevent duplicate push notifications. Columns: id, certificat...
Certification Data Foundation & Infrastructure · Peer Mentor Certification Management
Add initiateCourseEnrolment to CertificationManagementService. The method should look up the relevant renewal course for...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Write comprehensive unit tests for CertificationManagementService (lifecycle transitions, auto-pause idempotency, Dynami...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Implement the CertificationRepository using the Supabase Dart client. Cover CRUD operations for certification records: c...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Implement CertificationManagementService as the single lifecycle orchestrator for certifications. Provide methods: creat...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Within CertificationManagementService, implement computeExpiryState which derives the current certification state (valid...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Implement CertificationReminderService with an evaluateUpcomingExpiries method that queries the certification repository...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Within CertificationReminderService, implement deduplication logic that checks cert_notification_log before dispatching ...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Implement separate payload builder functions inside CertificationReminderService for two audiences: peer mentor (persona...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Define the abstract CertificationRepository interface that CertificationManagementService will depend on. Specify method...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Integrate PauseManagementService within CertificationManagementService so that when computeExpiryState returns expired, ...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Wire HLFDynamicsSyncService into CertificationManagementService so that after any expiry state change the Dynamics porta...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Complete CertificationReminderService by wiring the payload dispatch to PushNotificationService. After a successful send...
Certification Business Logic & Reminder Engine · Peer Mentor Certification Management
Implement idempotency protection so the cron function does not send duplicate reminders or trigger duplicate auto-pauses...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Add structured JSON error logging for all failure paths in the cron function, including service call failures, database ...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
After RecordRenewal or EnrolInCourse success, invalidate the cached certification state and re-dispatch LoadCertificatio...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Write comprehensive unit tests for CertificationBLoC covering all event-to-state transitions using the bloc_test package...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Write an integration test that seeds the database with certifications in each expiry window, triggers the CertificationE...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Write the database query logic inside the cron function to identify certifications expiring in 30, 14, and 7 days from t...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Define all BLoC events (LoadCertification, RecordRenewal, EnrolInCourse) and the corresponding state classes (Certificat...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Implement the event handler methods inside CertificationBLoC for LoadCertification, RecordRenewal, and EnrolInCourse eve...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Create the Supabase Edge Function skeleton for the nightly certification expiry cron job. Set up the Deno runtime entry ...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Wire the cron function to invoke CertificationReminderService for certifications expiring in 30/14/7 days and Certificat...
Nightly Cron Automation & Flutter BLoC State Management · Peer Mentor Certification Management
Make each mentor row in CertificationsExpiringWidget tappable, navigating to the corresponding CertificationStatusScreen...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Integrate the CertificationExpiryBadge component from the foundation epic into peer mentor list card widgets (164-peer-m...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Create the base CertificationStatusScreen widget with BLoC consumer wiring. Implement the scaffold, AppBar, and top-leve...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Implement the certification metadata display section inside CertificationStatusScreen showing issue date, expiry date, a...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Build the renewal history timeline inside CertificationStatusScreen. Render a vertical timeline list of past renewal eve...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Implement the action button row at the bottom of CertificationStatusScreen with 'Record Manual Renewal' and 'Enrol in Co...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Create RecordRenewalScreen with the full form layout: cert type selector dropdown, new issue date picker, and new expiry...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Add client-side validation to RecordRenewalScreen preventing submission when the new expiry date is in the past or earli...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Connect RecordRenewalScreen form submit button to CertificationBLoC renewal event. Handle submitting, success, and failu...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Implement the CertificationsExpiringWidget coordinator dashboard widget. Render a scrollable list of mentor rows showing...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Run a full WCAG 2.2 AA accessibility audit across CertificationStatusScreen, RecordRenewalScreen, and CertificationsExpi...
Certification User Interface & Coordinator Tooling · Peer Mentor Certification Management
Implement the WizardProgressIndicator Flutter widget displaying current step position within the ≤5 step constraint. Sho...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the LabelledNavigationBar Flutter widget as a WCAG 2.2 AA-compliant bottom navigation bar. Each tab must displ...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the PlainLanguageErrorDisplay Flutter widget that renders error messages from the ErrorMessageRegistry via the...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the InlineContextualHelpWidget Flutter widget that displays context-sensitive help text from the HelpContentRe...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the ConfirmBeforeSubmitScreen using SingleActionScreenLayout as the base. Displays a structured summary of all...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Build the CognitiveAccessibilityAudit utility class that performs a full accessibility audit of a widget tree or screen ...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Write comprehensive flutter_test unit and integration tests for the data layer: WizardDraftRepository (CRUD, auto-save, ...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Write flutter_test unit and integration tests for the service layer: CognitiveLoadRuleEngine (all constraint rules, viol...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Write flutter_test widget tests for all UI components in this epic: WizardProgressIndicator (step rendering, semantic la...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Build the WizardDraftRepository Dart class with full CRUD operations for draft state persistence. Implement saveDraft(),...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Define the ErrorMessageRegistry data model and implement its storage layer. Each registry entry maps an error code to a ...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Define the HelpContentRegistry data model and implement its storage layer. Each registry entry contains a context key, a...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Build the CognitiveLoadRuleEngine service class that enforces cognitive accessibility constraints at runtime. Implement ...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Build the PlainLanguageContentService that serves plain-language text for all user-facing strings. Implement getErrorMes...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the WizardStateManager service using BLoC/Cubit pattern to manage multi-step wizard state across the ≤5 step f...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Design and implement the SQLite/Supabase database schema for persisting wizard draft state. Create tables for draft sess...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the SingleActionScreenLayout Flutter widget that enforces the one-primary-action-per-screen cognitive accessib...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Implement the AccessibilityDesignTokenEnforcer infrastructure component. Define a validated set of accessibility-complia...
Cognitive Accessibility Foundation: Registries, Rule Engine, and Base UI Constraints · Cognitive Accessibility
Write Flutter widget tests verifying that PlainLanguageErrorDisplay emits correct Semantics labels, that liveRegion anno...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Write widget tests for InlineContextualHelpWidget covering tap-to-expand, tap-to-collapse, Semantics hint transitions, a...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Implement the PlainLanguageErrorDisplay Flutter widget that renders a two-part accessible error: a plain-language headli...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Implement InlineContextualHelpWidget as a stateful Flutter widget with a collapsed default state showing a labelled help...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Build the CognitiveAccessibilityAudit utility class that programmatically checks a set of cognitive accessibility rules ...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Create a Dart test file (cognitive_accessibility_audit_test.dart) that runs the CognitiveAccessibilityAudit against all ...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Wire WizardStateManager to the WizardDraftRepository (from the foundation epic) so that every pause event writes the dra...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Connect PlainLanguageErrorDisplay to the ErrorMessageRegistry (from the foundation epic) so that error codes are resolve...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Wire InlineContextualHelpWidget to the HelpContentRegistry (from the foundation epic) so that each widget instance recei...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Write bloc_test unit tests covering all state transitions: normal step progression, pause mid-wizard, resume from draft,...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Write integration tests for ConfirmBeforeSubmitScreen verifying that the Confirm action fires WizardSubmitted, the Go Ba...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Write a full end-to-end integration test using Flutter integration_test that walks through the complete registration wiz...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Create the BLoC class skeleton for WizardStateManager including state classes (WizardIdle, WizardInProgress, WizardPause...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Add full pause-and-resume logic to the WizardStateManager BLoC: capture current step index and all field values when Wiz...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Implement the ConfirmBeforeSubmitScreen as a full-screen confirmation gate that shows a summary of the wizard answers, a...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Integrate ConfirmBeforeSubmitScreen as the mandatory final step in all multi-step wizard flows managed by WizardStateMan...
Cognitive Accessibility Wizard UI: State Management, Interactive Components, and CI Audit · Cognitive Accessibility
Write developer documentation covering: typed interfaces for all repository methods, field-encryption-utils API surface,...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Write Flutter widget tests for multi-chapter-affiliation-chip (read-only render, edit mode selection, 5-chapter cap enfo...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Implement the assignment-status-indicator UI primitive as a stateless Flutter widget rendering a colour-coded badge for ...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend assignment-status-indicator to consume org-labels-provider for terminology overrides (e.g. HLF may call 'open' so...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Build the read-only mode of multi-chapter-affiliation-chip: a horizontal wrap of chip widgets each showing a chapter nam...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend multi-chapter-affiliation-chip with an edit mode presenting available chapters as a selectable list. Wire the NHF...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Create the contact-form-validator infrastructure component enforcing required field presence (name, contact method) and ...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend contact-form-validator with email regex validation, Norwegian phone number format check (8 digits, optional +47 p...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Expose contact-detail-repository, assignment-repository, field-encryption-utils, and contact-form-validator through Rive...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Write unit and integration tests for assignment-repository, contact-detail-repository, contact-form-validator, and field...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Write integration tests exercising the full data path: contact-detail-repository fetches encrypted field metadata, field...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend the assignment repository with write operations: create assignment, update status transitions, and soft-delete. I...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Implement the assignment-repository data component with typed Supabase query wrappers for reading and writing assignment...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Build the contact-detail-repository with typed Supabase query wrappers for fetching full contact profiles. Implement get...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend contact-detail-repository to query encrypted field metadata: which fields are encrypted for a given contact, thei...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Implement field-encryption-utils with org-specific encryption key retrieval from Supabase Vault or equivalent secure sto...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Add AES-GCM decryption logic to field-encryption-utils using the retrieved org key. Implement HMAC integrity check on de...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Extend field-encryption-utils with a masked fallback strategy: when decryption fails (wrong key, network error, integrit...
Contact Detail & Edit Foundation: Data Layer and Infrastructure Utilities · Contact Detail & Edit Screen
Wrap all repository calls in ContactDetailService with retry logic (up to 3 attempts with exponential back-off). Emit ty...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Map repository and validation error codes returned during contact save operations to user-readable Norwegian error messa...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
After a successful partial update in ContactEditService, trigger a refresh of the ContactDetailService state stream so t...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
After a successful write in ReadReceiptService, update the service state to ReadReceiptConfirmed carrying the field key ...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Write integration tests for ContactDetailService covering: successful parallel fetch emitting ContactDetailLoaded with c...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Write integration tests covering ContactEditService diff computation (only changed fields submitted), user-readable erro...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Create the typed state classes (ContactDetailState, ContactDetailLoading, ContactDetailLoaded, ContactDetailError) and d...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Implement the core data-fetching method that fires contact profile, activity history, and assignment status requests in ...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Implement the logic inside ContactDetailService that reads the organisation configuration to determine which contact fie...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Create typed state classes (ContactEditIdle, ContactEditSaving, ContactEditSuccess, ContactEditError) for contact-edit-s...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Implement the save method that compares the submitted form data against the current contact state to compute a diff cont...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Create the typed state classes (ReadReceiptIdle, ReadReceiptWriting, ReadReceiptConfirmed, ReadReceiptError) and the Riv...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Wrap the Supabase insert in ReadReceiptService with retry logic (up to 3 attempts) to handle transient network failures....
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Implement the core method in ReadReceiptService that writes a read-receipt record to the Supabase read_receipts table. T...
Contact Detail & Edit Service Layer: BLoC/Riverpod Business Logic · Contact Detail & Edit Screen
Conditionally render the proxy-audit-badge widget (component 111-proxy-audit-badge) on each ActivityHistoryList item whe...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Write integration tests for ActivityHistoryList covering: initial page load with correct item rendering, infinite scroll...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Extend the contact-detail-service to expose a paginated activity history stream for a given contact ID, including type l...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Build the contact-edit-service that accepts a validated ContactEditPayload, calls the contact-detail-repository update m...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Create the ActivityHistoryList Flutter widget with a ListView.builder that accepts a paginated activity stream. Render t...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Audit ActivityHistoryList for WCAG 2.2 AA compliance: ensure all interactive controls are at least 44x44pt, add semantic...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Add a configurable re-mask timer to EncryptedFieldDisplay. After decryption, start a countdown (default 30 seconds, conf...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Create the EditContactScreen Flutter widget. On mount, read current contact values from contact-detail-service state and...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Integrate contact-form-validator with EditContactScreen so that each AppTextField calls its corresponding validator on c...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Add the multi-chapter-affiliation-chip widget (component 174-multi-chapter-affiliation-chip) to EditContactScreen for ma...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Wire the save button in EditContactScreen to call contact-edit-service with the current validated form payload. On succe...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Audit EditContactScreen for WCAG 2.2 AA compliance: verify all interactive controls including AppTextField, chips, and s...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Build the contact-form-validator infrastructure module. Implement field-level validators for all editable contact fields...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Write unit tests for field-encryption-utils (encrypt/decrypt round-trip, error cases) and widget tests for EncryptedFiel...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Write widget tests for EditContactScreen covering: field pre-population from service state, per-field validation error d...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Build the read-receipt-service that records a timestamped read receipt in the Supabase backend whenever a sensitive fiel...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Create the EncryptedFieldDisplay Flutter widget. In its default state, render the field value as masked bullets with a l...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
On tap of the lock icon, show the sensitive-field-warning-dialog (component 607-sensitive-field-warning-dialog) as a mod...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
After successful decryption in EncryptedFieldDisplay, fire read-receipt-service in the background without awaiting compl...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Implement the field-encryption-utils infrastructure module in Dart. Provide encryptField(plaintext, key) and decryptFiel...
Contact Detail & Edit Supporting UI: Edit Screen, History List, and Encrypted Display · Contact Detail & Edit Screen
Implement the assignment status indicator UI widget that visually communicates whether a contact has an active assignmen...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Implement the activity history list section widget that renders paginated past activity entries for a contact, sourced f...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Create the infrastructure-layer contact form validator that enforces business rules for contact data: required field che...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the contact detail service that orchestrates data retrieval from contact-detail-repository and assignment-reposito...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the contact edit service that reads from contact-detail-repository, applies changes validated through contact-form...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the read receipt service that consumes field-encryption-utils to record when sensitive Blindeforbundet fields are ...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the assignment repository layer that provides data access for contact assignment records. Implement Supabase queri...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the contact detail repository that fetches full contact profiles from Supabase, including org-specific metadata fi...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Implement the multi-chapter affiliation chip widget for NHF contacts who belong to up to 5 chapters simultaneously. Rend...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Implement the edit contact screen that composes multi-chapter-affiliation-chip for NHF chapter management, drives valida...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Implement the encrypted field display widget for Blindeforbundet sensitive fields (name, address, epikrise reference). T...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Implement the top-level contact-detail-screen that composes all previously built components into a single cohesive profi...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Build the field encryption utility layer for Blindeforbundet's sensitive contact data (name, address, epikrise reference...
Contact Detail Main Screen: Full Profile Assembly and Peer Mentor Navigation · Contact Detail & Edit Screen
Add the search predicate construction method to ContactRLSQueryBuilder that generates ILIKE patterns for the name and no...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Extend ContactRepository with a fetchBySearch(String query) method that uses ContactRLSQueryBuilder to compose the ILIKE...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Write unit tests for ContactRLSQueryBuilder covering: correct filter expression for each UserRole value, organization_id...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Create the ContactRLSQueryBuilder class skeleton and define the mapping table that translates the application-level User...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Within ContactRLSQueryBuilder, implement the organization_id scoping logic that appends an .eq('organization_id', orgId)...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Create the immutable Contact and PeerMentor Dart model classes with all fields required by the contact list feature (id,...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Build the ContactRepository class that accepts a Supabase client and a ContactRLSQueryBuilder instance via constructor i...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Write integration tests for ContactRepository that verify end-to-end behavior: coordinator role sees only contacts withi...
Contact List Foundation: RLS Query Builder & Data Repository · Contact List Management
Audit ContactCardWidget against WCAG 2.2 AA contrast requirements (minimum 4.5:1 for normal text, 3:1 for large text and...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Apply design token spacing, typography, and color values to PeerMentorCardWidget. Ensure availability and certification ...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build the ContactViewSwitcher as a segmented control widget (SegmentedButton or equivalent) with two or more toggle opti...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Implement loading and empty state handling in ContactListScreen. Display a centered CircularProgressIndicator when the c...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Extend ContactListScreen to render PeerMentorCardWidget items when the ContactViewSwitcher is toggled to the peer mentor...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Write Flutter widget tests using flutter_test covering: ContactCardWidget renders name, role badge, org label, and trunc...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Write Flutter widget tests for ContactSearchBar verifying debounce fires after 300ms, clear button resets the field, and...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Create Dart data classes and mock data fixtures for Contact and PeerMentor entities used as test inputs for all UI widge...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build the ContactCardWidget Flutter widget displaying contact name as the primary label, a color-coded role badge, an or...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build PeerMentorCardWidget as a visually distinct Flutter widget from ContactCardWidget. Display mentor name, availabili...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build the ContactSearchBar widget as a styled Flutter TextField with a 300ms debounce on value changes to prevent excess...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build the ContactListScreen as a role-aware Flutter screen that renders ContactCardWidget items in a scrollable ListView...
Contact List UI Components: Cards, Search Bar, View Switcher & Main Screen · Contact List Management
Build the local in-memory search path in ContactSearchService for datasets below the configurable size threshold. Implem...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Build the remote search path in ContactSearchService for datasets above the size threshold. Implement debounced Supabase...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Wire the threshold-based path selection logic in ContactSearchService so it automatically dispatches to either local or ...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Add search query state to ContactListRiverpodProvider as a separate StateProvider or internal notifier field. When the q...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Write integration tests covering all three role filtering paths in ContactListService, both local and remote search path...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Create the ContactListService class skeleton with clearly defined method signatures for role-based contact retrieval. De...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Implement the coordinator-specific filtering branch in ContactListService that delegates to ContactRepository to fetch t...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Implement the remaining two filtering branches in ContactListService: org admin branch delegates to ContactRepository to...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Implement the ContactListRiverpodProvider using Riverpod's AsyncNotifier pattern. Expose two separate AsyncValue streams...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Configure ContactListRiverpodProvider to watch the authenticated user's role and organisation context providers. When ro...
Contact List Business Logic: Services, Search & Riverpod State Management · Contact List Management
Add cache invalidation logic to the ContactCacheSyncRepository: track last_synced_at in a preferences store (shared_pref...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Integrate the ContactCacheSyncRepository into the post-fetch hook of the contact list feature. After a successful online...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Write unit tests for the SupabaseSearchRepository using a mocked Supabase client. Cover: name ilike match, organisation ...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Write unit tests for the OfflineSearchRepository using an in-memory Drift database. Cover: name LIKE match, organisation...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Write unit tests for the ContactCacheSyncRepository using mocked Supabase and in-memory Drift. Cover: initial cache popu...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Write an integration test that exercises the full data layer flow: populate cache via ContactCacheSyncRepository, simula...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Create abstract repository interfaces (IContactSearchRepository, IOfflineSearchRepository, ICacheSyncRepository) in Dart...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Implement the ContactCacheSyncRepository class responsible for pulling fresh data from Supabase and writing it to the Dr...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Define Drift table classes for the local SQLite cache: a contacts cache table mirroring the Supabase contacts schema (id...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Implement the SupabaseSearchRepository class against the contacts and notes Supabase tables. Write parameterised ilike q...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Implement the OfflineSearchRepository class using Drift generated DAOs. Write LIKE-based SQL queries against the local c...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Add upsert methods to the Drift DAOs that write contacts and notes fetched from Supabase into the local cache. Use inser...
Contact Search Data Layer & Offline Cache · Contact & Notes Search
Build query string preprocessing utilities within ContactSearchService: trim whitespace, normalise Unicode characters (e...
Search Service & Debounce Infrastructure · Contact & Notes Search
Build the merging and deduplication layer in ContactSearchService that combines results from multiple sources (Supabase ...
Search Service & Debounce Infrastructure · Contact & Notes Search
Extend SearchDebounceUtility to accept configurable debounce duration, minimum query length threshold, and expose a well...
Search Service & Debounce Infrastructure · Contact & Notes Search
Write comprehensive unit tests for SearchDebounceUtility covering: debounce timing correctness, minimum query length enf...
Search Service & Debounce Infrastructure · Contact & Notes Search
Write unit tests for query sanitisation, deduplication, and result merging logic. Write integration tests simulating onl...
Search Service & Debounce Infrastructure · Contact & Notes Search
Wire the debounced query stream from SearchDebounceUtility into ContactSearchService and expose a reactive Stream<Search...
Search Service & Debounce Infrastructure · Contact & Notes Search
Create the SearchDebounceUtility class that wraps a RxDart or Timer-based debounce mechanism with a configurable delay (...
Search Service & Debounce Infrastructure · Contact & Notes Search
Build the connectivity-aware routing layer inside ContactSearchService. When the device is online, route queries to the ...
Search Service & Debounce Infrastructure · Contact & Notes Search
Add a Semantics live region to the AccessibleSearchInputField that announces the number of search results after each deb...
Accessible Search Screen & UI Components · Contact & Notes Search
Integrate a microphone icon button into the AccessibleSearchInputField that triggers the native speech recognition API (...
Accessible Search Screen & UI Components · Contact & Notes Search
Add a text-based empty state widget to SearchResultsList that announces 'No results found for <query>' via Semantics. Im...
Accessible Search Screen & UI Components · Contact & Notes Search
Audit all interactive elements in SearchScreen, AccessibleSearchInputField, and SearchResultsList for WCAG 2.2 AA minimu...
Accessible Search Screen & UI Components · Contact & Notes Search
Write Flutter widget tests covering: Semantics tree correctness for AccessibleSearchInputField (label, hint, textField r...
Accessible Search Screen & UI Components · Contact & Notes Search
Write integration tests that cover the full search flow: user types a query, debounce fires, ContactSearchService is cal...
Accessible Search Screen & UI Components · Contact & Notes Search
Build the AccessibleSearchInputField Flutter widget wrapping AppTextField with Flutter Semantics widget. Include semanti...
Accessible Search Screen & UI Components · Contact & Notes Search
Extend the AccessibleSearchInputField with full screen-reader support: announce input field purpose via Semantics(label:...
Accessible Search Screen & UI Components · Contact & Notes Search
Implement the SearchResultsList widget as a scrollable ListView wrapped in a Semantics region (explicitChildNodes: true)...
Accessible Search Screen & UI Components · Contact & Notes Search
Implement the SearchScreen widget as the main container that holds AccessibleSearchInputField and SearchResultsList. Wir...
Accessible Search Screen & UI Components · Contact & Notes Search
Write Flutter widget tests for MentorMultiSelectWidget covering: rendering of mentor list items, search debounce filteri...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Build the ProxyConfirmationScreen Flutter widget that displays a summary of the proxy registration before final submissi...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Build the MentorMultiSelectWidget Flutter widget supporting selection of multiple peer mentors from the coordinator's or...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write unit and integration tests for ProxyActivityRepository covering: correct persistence of coordinator_id and attribu...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write tests verifying that the ProxyAuditLogger produces append-only records: no update or delete operations succeed on ...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Implement the RecurringTemplateRepository class in Dart/Flutter using Supabase client to support CRUD operations on recu...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Implement the ProxyActivityRepository class using Supabase client. Provide methods: insertProxyActivity(coordinatorId, a...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write and apply Supabase migration to create the recurring_activity_templates table with columns for template name, acti...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write and apply Supabase migration to create the proxy_activities table with dual-attribution columns: coordinator_id (t...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write and apply Supabase migration to create the proxy_audit_log table with fields: id, event_type (ENUM: created, updat...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Implement the ProxyAuditLogger class as an infrastructure service that writes immutable audit records to the proxy_audit...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Perform end-to-end validation of all Row Level Security policies introduced in this epic. Test that a coordinator from o...
Data Layer and Audit Infrastructure · Coordinator Proxy Registration for Contacts
Write developer documentation covering: the dual-attribution data model (coordinator vs. attributed mentor), all Activit...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Build the RecurringTemplateSelector UI widget that fetches and displays the coordinator's saved recurring activity templ...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Add the RecurringTemplateSelector as an optional pre-fill affordance at the top of ProxyRegistrationScreen. When the coo...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Apply WCAG 2.2 AA semantics throughout ProxyRegistrationScreen: add Semantics wrappers with meaningful labels to all for...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Connect the RecurringTemplateSelector widget to the recurring_activity_templates Supabase table via Riverpod provider. I...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Write integration tests using a Supabase local emulator for ProxyRegistrationService covering: full happy-path creation ...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Write flutter_test widget tests for ProxyRegistrationScreen covering: empty form validation display, template pre-fill p...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Write an integration_test (Flutter driver) end-to-end test that simulates the complete coordinator journey: open ProxyRe...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Create the core Dart data models for proxy activity records, including ProxyActivityRecord with dual attribution fields ...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Build the ActivityAttributionValidator service with the three primary validation rules: (1) attributed mentor must diffe...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Build ProxyRegistrationService that orchestrates the full single-proxy creation flow: (1) invoke ActivityAttributionVali...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Create the ProxyRegistrationScreen StatefulWidget with form fields for activity type, date, start time, duration, and no...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Wire the ProxyRegistrationScreen submit action through the ProxyRegistrationFormCubit to the ProxyRegistrationService. H...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
When ActivityAttributionValidator returns a duplicate warning (same mentor, overlapping time window), display a non-bloc...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Write exhaustive unit tests for ActivityAttributionValidator covering: self-attribution rejection, out-of-scope mentor r...
Core Business Logic and Single Proxy UI Flow · Coordinator Proxy Registration for Contacts
Implement the ProxyConfirmationScreen widget that presents a summary of a single proxy registration before final submiss...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Implement the RecurringTemplateSelectorWidget that displays a list of saved recurring activity templates for the coordin...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Create the ProxyAuditLogger infrastructure component that records all proxy registration events to a dedicated audit log...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Create the ActivityAttributionValidator service that validates proxy activity records before submission. Validate that t...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Build the ProxyRegistrationService that handles the business logic for submitting a single proxy activity record. Valida...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Create the RecurringTemplateRepository data layer that fetches, caches, and persists recurring activity templates from S...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Build the ProxyActivityRepository that handles all database operations for proxy activity records in Supabase. Implement...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Implement the MentorMultiSelectWidget that allows coordinators to search and select multiple peer mentors from a scrolla...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Implement the ProxyRegistrationScreen for single-mentor proxy registration. Compose the ProxyActivityForm, MentorSingleS...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Build the BulkRegistrationOrchestrator that fans out a single bulk submission request into individual per-mentor proxy a...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Implement the BulkProxyRegistrationScreen that hosts the RecurringTemplateSelectorWidget and MentorMultiSelectWidget sid...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Build the ProxyRegistrationBLoC using the flutter_bloc library to provide unified state management for both single and b...
Bulk Registration Orchestration and Unified State Management · Coordinator Proxy Registration for Contacts
Write developer documentation for the complete data access layer: StatsRepository API contracts, StatsCacheManager inval...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Wire the StatsCacheManager's explicit invalidation to all mutation events that affect aggregated stats: activity registr...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Create comprehensive unit tests for the RoleAccessValidator covering coordinator-scoped access approval, coordinator cro...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Create unit tests for StatsCacheManager covering TTL expiration, explicit invalidation by cache partition key, LRU evict...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Create integration tests for StatsRepository against a Supabase test instance with seeded activity data. Test period fil...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Create all typed Dart model classes that represent the stats data contract consumed by higher tiers. This includes Stats...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Implement the RoleAccessValidator class that enforces coordinator-scoped vs org-admin-scoped query boundaries as a defen...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Build the StatsCacheManager that stores query results in memory with a 15-minute TTL to prevent repeated heavy queries d...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Implement the StatsRepository class that queries the pre-aggregated Supabase views with period and activity-type filters...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Write the database migration that creates pre-aggregated Supabase views keyed by org_id + coordinator_id + month. Views ...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Verify that Supabase Row Level Security policies on the pre-aggregated views enforce org_id and coordinator_id boundarie...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Wire the StatsCacheManager into StatsRepository so all query methods check the cache before hitting Supabase and populat...
Statistics Data Foundation & Infrastructure · Coordinator Statistics Dashboard
Finalise and document the ContributionData model in PersonalStatsService to be forward-compatible with the Phase 4 Spoti...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Build RoleAccessValidator that determines the correct data scope for a stats query based on the authenticated user's rol...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Implement PersonalStatsService that fetches a single peer mentor's activity history from StatsRepository, applies the 15...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Wire StatsBloc FilterChanged event to update the active StatsFilter (period preset: 30d / 90d / 12m / custom date range)...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Create the FlChartAdapter infrastructure class that centralises all fl_chart configuration: bar chart BarData and BarTou...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Implement PersonalStatsBloC (flutter_bloc Bloc) with LoadPersonalStats event, and PersonalStatsLoading / PersonalStatsLo...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Extend StatsBloc to subscribe to the activity registration Supabase Realtime stream on init. When a new activity registr...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Write flutter_test unit tests covering: StatsCacheManager TTL expiry and invalidation, RoleAccessValidator scope resolut...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Write bloc_test unit tests for StatsBloc and PersonalStatsBloC covering: loading/loaded/error state transitions, FilterC...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Define all Dart data model classes and repository/service interfaces for the statistics domain: StatsFilter, KpiCardView...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Build the StatsCacheManager class that stores aggregated statistics results keyed by scope+filter combinations with a 15...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Implement CoordinatorStatsService that fetches aggregated statistics from StatsRepository using the scope determined by ...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Implement StatsRepository that queries the Supabase stats views (activity counts by type, by period, by peer mentor) usi...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Implement StatsBloc (flutter_bloc Bloc) with LoadCoordinatorStats and FilterChanged events, and StatsLoading / StatsLoad...
Core Statistics Services, BLoC State Management & Chart Adapter · Coordinator Statistics Dashboard
Add shimmer/skeleton loading states to all dashboard widgets: StatsSummaryCards skeleton (4 grey card placeholders), cha...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Add error state UI to all dashboard sections. When the BLoC emits an error state, each widget section shows an inline er...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Run the accessibility test harness against the full CoordinatorStatsDashboardScreen. Use flutter_test's SemanticsControl...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the StatsPeriodFilterBar UI widget that allows coordinators to select time periods (week, month, quarter, year, cu...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the StatsSummaryCards component displaying four tappable KPI cards: total activities, active peer mentors, hours c...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the PeerMentorStatsList widget that renders a scrollable list of peer mentor rows with name, activity count, hours...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Wire the fl_chart adapter into the MonthlyActivityBarChart widget. Implement BarChart configuration with monthly x-axis ...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the MonthlyActivityBarChart widget using the fl_chart adapter. Display monthly activity counts as vertical bars fo...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Wire the fl_chart adapter into the ActivityTypeDonutChart widget. Implement PieChart/DonutChart configuration with activ...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the ActivityTypeDonutChart widget using the fl_chart adapter. Show activity type distribution as donut segments wi...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Build the PersonalStatsView widget for individual peer mentor contribution display. Include a personal summary card row,...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Connect the StatsPeriodFilterBar widget to the Coordinator Statistics BLoC so that period or activity-type filter change...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Add a role scope toggle to CoordinatorStatsDashboardScreen that switches between coordinator-scoped data (own chapter on...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Conduct a full accessibility pass across all dashboard widgets. Verify every chart bar and donut segment has a Semantics...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Write flutter_test widget tests for StatsSummaryCards, StatsPeriodFilterBar, PeerMentorStatsList, MonthlyActivityBarChar...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Write integration tests (flutter_test integration_test package) covering the full coordinator dashboard flow: open dashb...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Create the CoordinatorStatsDashboardScreen top-level widget that orchestrates all sub-widgets: StatsPeriodFilterBar at t...
Dashboard UI Components, Charts & Personal Stats View · Coordinator Statistics Dashboard
Add the softDeleteAttachment(attachmentId) method to ActivityAttachmentRepository. The method sets deleted_at to the cur...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Add the createSignedUrl(storagePath, expiresInSeconds) method to SupabaseStorageAdapter. The method requests a time-limi...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Write integration tests that exercise the complete data layer together: upload a file via SupabaseStorageAdapter, insert...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Implement the ActivityAttachmentRepository Dart class with typed methods: insertAttachment(ActivityAttachment) inserts a...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Write and apply a Supabase migration that creates the activity_attachments table with columns: id (uuid PK), activity_id...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Define Row Level Security policies on activity_attachments scoped to org_id. Coordinators and admins within the same org...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Create the 'activity-attachments' storage bucket in Supabase with private access. Implement bucket-level RLS policies so...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Implement the SupabaseStorageAdapter Dart class with typed methods: uploadFile(orgId, activityId, fileName, bytes, mimeT...
Document Attachments — Data Layer & Storage Infrastructure · Document Attachments for Activities
Implement the in-memory LRU or Map-based cache inside AttachmentSignedUrlService. Cache key is the storage object path; ...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Add an invalidateCacheEntry(storagePath) method to AttachmentSignedUrlService that removes the cache entry for the given...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Create Riverpod providers for AttachmentUploadService and AttachmentSignedUrlService. Inject StorageAdapter and Activity...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Write flutter_test unit tests for AttachmentUploadService covering: file_too_large rejection at exactly 10 MB + 1 byte, ...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Write flutter_test unit tests for AttachmentSignedUrlService covering: cache hit returns cached URL without calling Supa...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Define the Dart abstract class for AttachmentUploadService with typed method signatures for upload, delete, and validati...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Define the Dart abstract class for AttachmentSignedUrlService with typed method signatures for generateSignedUrl, invali...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Implement the validation layer inside AttachmentUploadService: enforce 10 MB maximum file size by reading the byte lengt...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Implement the core upload flow in AttachmentUploadService: call StorageAdapter to upload the binary to the org-scoped Su...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Wire AttachmentUploadService and AttachmentSignedUrlService into the AttachmentBloc or Cubit. Map service results to Blo...
Document Attachments — Upload & Signed URL Services · Document Attachments for Activities
Implement the share/download action button in AttachmentPreviewModal using the platform share sheet (share_plus package)...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Implement the AttachmentThumbnailGrid Flutter widget that renders a compact grid within the activity detail view. Displa...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Extend AttachmentThumbnailGrid with tap gesture that triggers navigation to the preview modal, and a delete action butto...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Build the full-screen modal shell for AttachmentPreviewModal including routing/navigation setup, close button (minimum 4...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Extend AttachmentPreviewModal with InteractiveViewer for pinch-to-zoom on JPEG/PNG content loaded via signed URL, and a ...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Implement AttachmentPickerUI as a bottom sheet widget offering two source options: camera roll (image_picker) and file s...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Add attachment count tracking to AttachmentPickerUI. Disable the confirm/add action and display an inline plain-language...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Write Flutter widget tests covering: AttachmentPickerUI source selection, MIME filter rejection, 5-attachment limit enfo...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Apply Semantics widgets to AttachmentThumbnailGrid: semantic labels for each thumbnail including file name and type, acc...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Apply full WCAG 2.2 AA accessibility to AttachmentPreviewModal: semantic labels for the pinch-to-zoom area, screen reade...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Apply full WCAG 2.2 AA accessibility to AttachmentPickerUI: semantic labels for source selection options (camera roll, f...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Execute flutter_test Semantics tree assertions and manual VoiceOver/TalkBack walkthroughs for all three components. Veri...
Document Attachments — User Interface & Accessibility · Document Attachments for Activities
Write developer-facing documentation covering: the Supabase table schemas for all 4 tables, the RLS policy rationale for...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Write integration tests for DeclarationTemplateRepository (versioned fetch), DriverAssignmentRepository (CRUD and soft-d...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Write unit tests for OrgFeatureFlagService covering: flag enabled returns true, flag disabled returns false, missing rec...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Implement the Dart repository class for declaration templates. Expose methods for fetching the active template by org, r...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Implement the Dart repository for driver assignments with methods for creating, reading, updating (status changes), and ...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Implement the Dart repository class for confidentiality declarations. Expose methods for creating a declaration (pending...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Implement the Dart audit logger component that writes immutable records to the declaration_audit_log table. Expose stron...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Implement the Dart service that reads the org_feature_flags table via Supabase and exposes isFeatureEnabled(orgId, featu...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Create the declaration_templates database table in Supabase with org-scoped RLS policies, version numbering, soft-delete...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Create the driver_assignments table in Supabase with org-scoped RLS policies. Include columns for driver identity, assig...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Create the confidentiality_declarations table with org-scoped RLS policies. Include columns for declaration content (enc...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Create the org_feature_flags table in Supabase with columns for org_id, feature_key (e.g., 'driver_and_confidentiality')...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Create the declaration_audit_log table with columns for event_type (sent, opened, acknowledged, expired, revoked), decla...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Define the Dart constants, enums, and data models for the driver feature flag configuration. Include the feature key con...
Driver Administration Data Layer and Feature Flag Infrastructure · Driver Administration and Confidentiality Declarations
Add the assignment history retrieval method to the driver assignment service. The method must query the driver assignmen...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Extend the declaration storage adapter to generate short-lived signed URLs for authenticated drivers to download their e...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Implement the fee validation portion of the driver assignment service. When a coordinator registers a driver assignment ...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Within the driver assignment service, implement the routing logic that hands off to the expense approval workflow when f...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Add scroll validation to the declaration acknowledgement service. The service must reject acknowledgement submissions wh...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
After a successful acknowledgement record is created, the declaration acknowledgement service must update the declaratio...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Build the initial push delivery method in the declaration notification service. When triggered by the declaration manage...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Implement the follow-up reminder scheduling logic in the declaration notification service. After initial dispatch, sched...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Add coordinator acknowledgement alert logic to the declaration notification service. When a driver acknowledges a declar...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Write end-to-end integration tests covering the full declaration lifecycle: template rendering → encryption → storage up...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Write integration tests for the driver assignment service covering both fee paths: low-value assignment confirmed direct...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Build the core key derivation and management logic within the declaration encryption service. Each organization must hav...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Extend the declaration encryption service to produce tamper-evident blobs by appending an HMAC-SHA256 signature over the...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Build the declaration template rendering logic inside the declaration management service. Given a template ID and a driv...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Implement the full declaration send lifecycle in the declaration management service: render document from template, encr...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Implement the acknowledgement recording method in the declaration acknowledgement service. When a driver submits their a...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Build the declaration storage adapter that accepts an encrypted blob from the encryption service and uploads it to the c...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Perform targeted security tests on the encryption and storage layer: verify that blobs from one org cannot be decrypted ...
Driver Assignment and Declaration Business Logic Services · Driver Administration and Confidentiality Declarations
Integrate the DeclarationStatusBadge into the sidebar navigation entry for the driver assignment list so coordinators ca...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Build the reusable DeclarationStatusBadge widget that displays the current declaration state (pending, sent, acknowledge...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Build the structural shell for the DeclarationSendScreen including the AppBar, scrollable body, template preview section...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Implement the BLoC/Cubit state management layer for the DeclarationSendScreen. States must cover loading, templateLoaded...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Implement the DriverAssignmentList widget with paginated display of driver assignments. Each list item must show assignm...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Wire the DriverAssignmentList to a BLoC that fetches paginated assignments from the DriverAssignmentService. Implement n...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Build the DriverFeeRegistrationForm widget shell including contact selector field (reusing the existing contact picker),...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Implement the BLoC layer for the DriverFeeRegistrationForm covering states: idle, validating, declarationRequired, submi...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Write Flutter widget tests for all driver UI components: DriverFeatureFlagGuard (enabled/disabled flag states), Declarat...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Write integration tests covering the complete declaration flow: coordinator views driver assignment list → taps pending ...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Implement the DriverFeatureFlagGuard widget that wraps all driver-related UI subtrees and conditionally renders or suppr...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Implement the DeclarationAcknowledgementScreen with full WCAG 2.2 AA compliance. The screen must include a scrollable de...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Connect the DeclarationAcknowledgementScreen to the DeclarationAcknowledgementService via BLoC. On confirmation submissi...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Connect the DriverFeatureFlagGuard widget to the OrgFeatureFlagService Riverpod provider so that guard state reacts to l...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Run a comprehensive WCAG 2.2 AA accessibility audit across all driver UI screens: DriverAssignmentList, DeclarationSendS...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Write integration and manual test scenarios that verify zero driver UI elements are rendered for organizations without t...
Driver Administration User Interface and Feature Flag Gating · Driver Administration and Confidentiality Declarations
Register DuplicateCheckRepository, DuplicateQueueRepository, and DuplicateReviewedFlagMiddleware in the Riverpod provide...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Write flutter_test unit tests for DuplicateCheckRepository (mock Supabase RPC responses, test typed exception mapping, t...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Execute query performance benchmarks against the check_activity_duplicates RPC on a dataset representative of NHF's 1,40...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Implement the Dart model classes DuplicateCandidate and DuplicateCheckResult with full JSON serialization (fromJson/toJs...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Build the DuplicateCheckRepository Dart class that wraps the check_activity_duplicates Supabase RPC. Expose checkForDupl...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Build the DuplicateQueueRepository Dart class that queries the coordinator_duplicate_queue view. Expose fetchQueue() ret...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Write and apply a Supabase migration script that creates the composite index on (peer_mentor_id, activity_type_id, date,...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Create the PostgreSQL function check_activity_duplicates as a Supabase RPC. The function accepts peer_mentor_id, activit...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Define the coordinator_duplicate_queue view in Supabase that surfaces unresolved duplicate candidates scoped to the auth...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Write Supabase migration to add the duplicate_reviewed boolean column (default false, not null) to the activities table....
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Write and apply RLS policies on the activities table (for the duplicate_reviewed column) and the coordinator_duplicate_q...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Create the DuplicateReviewedFlagMiddleware class that intercepts every activity insert payload (wizard, bulk registratio...
Duplicate Activity Detection — Data Layer & Infrastructure · Duplicate Activity Detection
Implement the getUnresolvedCount() method in DeduplicationQueueService that returns an integer count of unresolved pairs...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Style divergent fields in DuplicateComparisonPanel with a high-contrast highlight using design system color tokens (ambe...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Write unit tests for DuplicateDetectionService covering: RPC result mapping, blockable duplicate threshold evaluation at...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Define the Dart abstract interface for DuplicateDetectionService, including the DuplicateCandidate, DuplicateCheckResult...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Implement the concrete DuplicateDetectionService that calls the duplicate-check-repository RPC before activity submissio...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Add the isBlockableDuplicate() evaluation method to DuplicateDetectionService. Apply configurable scoring thresholds bas...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Define the abstract interface for DeduplicationQueueService including UnresolvedPair, QueueResolutionAction, and QueueSc...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Implement the concrete getUnresolvedPairs() method that fetches unresolved duplicate pairs from the duplicate-queue-repo...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Implement the forceResolve() method that applies a coordinator-level resolution decision to a duplicate pair. Accepted a...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Implement the DuplicateComparisonPanel Flutter widget with a responsive two-column layout rendering two ActivityRecord o...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Add a pure DiffComputer utility used by DuplicateComparisonPanel to compute field-by-field divergence between two Activi...
Duplicate Activity Detection — Core Service Layer & Comparison UI · Duplicate Activity Detection
Implement a live badge count on the coordinator's navigation tab that shows the current number of unresolved duplicate p...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Implement deep-link navigation support for the deduplication queue detail view so that push notifications about unresolv...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Implement the cancel resolution path in DuplicateResolutionHandler. When the user selects Cancel, the handler must disca...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Create the DeduplicationQueueScreen for coordinator users, implementing a paginated list of unresolved duplicate-flagged...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Add filter controls (by date range, status: unresolved/resolved, activity type) and sort controls (newest first, oldest ...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Implement the detail view accessible from DeduplicationQueueScreen list items. The detail view must render the Duplicate...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Audit and remediate the DuplicateWarningBottomSheet for WCAG 2.2 AA compliance. Tasks include: ensure focus is trapped w...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Audit and remediate DeduplicationQueueScreen and its detail view for WCAG 2.2 AA compliance. Ensure list items have desc...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Write widget tests for DuplicateWarningBottomSheet covering all three resolution paths (proceed, merge, cancel), includi...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Implement the proceed resolution path in DuplicateResolutionHandler. When the user selects Proceed, the handler must cal...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Implement the merge resolution path in DuplicateResolutionHandler. When the user selects Merge, the handler must apply d...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Create the DuplicateWarningBottomSheet widget with a draggable sheet scaffold, header title, placeholder content area fo...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Wire the DuplicateComparisonPanel component into the DuplicateWarningBottomSheet, passing detected candidate activity da...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Integrate the DuplicateWarningBottomSheet trigger into the activity registration wizard flow. When DuplicateDetectionSer...
Duplicate Activity Detection — User Interface & Resolution Flows · Duplicate Activity Detection
Create the DeduplicationQueueService that manages the coordinator-facing duplicate review queue: fetching pending items,...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Implement the DuplicateComparisonPanel Flutter widget that renders side-by-side or stacked comparison of the incoming ac...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Implement the DeduplicationQueueScreen Flutter UI for coordinators to review, compare, and resolve queued duplicate reco...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Create the infrastructure middleware that intercepts activity save operations and tags records with a duplicate-reviewed...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Create the DuplicateDetectionService that encapsulates the matching algorithm: same peer mentor + overlapping date/time ...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Create the DuplicateResolutionHandler service that processes user decisions: KEEP_BOTH (proceed with save, flag as revie...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Create the DuplicateCheckRepository data layer that queries the Supabase database for existing activities matching the s...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Create the DuplicateQueueRepository data layer for coordinator deduplication queue operations. Implement CRUD methods fo...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Implement the DuplicateWarningBottomSheet Flutter widget that intercepts the activity wizard save action and presents th...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Implement the DuplicateDetectionBLoC managing the full state machine: idle → checking → duplicate_found (with candidate ...
Duplicate Activity Detection — BLoC State Machine & Cross-Feature Integration · Duplicate Activity Detection
Extend TerminologyCacheAdapter to support Hive as an alternative storage backend via a strategy pattern or constructor p...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Extend TerminologyRepository with a staleness check: store a timestamp alongside the cached label map in TerminologyCach...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Add a validateKey(String key) method to LabelKeyResolver that checks whether the provided key exists as a static constan...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Write comprehensive flutter_test unit tests covering: all domain groups in LabelKeyRegistry have non-empty, dot-notation...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Write flutter_test unit tests for TerminologyCacheAdapter using mocked SharedPreferences and Hive. Cover: write then rea...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Write integration tests for TerminologyRepository using a mocked Supabase client and mocked TerminologyCacheAdapter. Cov...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Build the TerminologyCacheAdapter as a data-layer class that persists a per-organization Map<String, String> label map t...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Implement LabelKeyResolver as a stateless utility class with a single resolve(String key, Map<String, String> labels, {M...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Build TerminologyRepository that queries the labels JSONB column from Supabase's organization_configs table for a given ...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Create the LabelKeyRegistry as a Dart abstract class containing only static const String fields grouped by domain (auth,...
Terminology Foundation: Data Layer, Cache, and Key Registry · Dynamic Terminology & Labels System
Define the TerminologySyncService abstract interface and its configuration model: sync interval, retry backoff parameter...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Implement the version comparison step inside TerminologySyncService: read the cached map's updatedAt, fetch the updated_...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Implement the full TerminologySyncService: subscribe to AppLifecycleState changes (foreground trigger) and connectivity ...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Declare the terminologySyncServiceProvider in TerminologyRiverpodProviders as an autoDispose provider that creates, star...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Write unit tests for OrganizationLabelsNotifier covering: initial loading state, successful fetch emitting loaded state ...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Write unit tests for TerminologySyncService covering: foreground trigger invokes version check, connectivity-restore tri...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Write integration tests using ProviderContainer to validate the full Riverpod provider graph: organizationLabelsNotifier...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Create the Dart state classes and data models for OrganizationLabelsNotifier, including TerminologyMapState (loading, lo...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Implement the StateNotifier subclass that fetches the active organization's terminology map from Supabase via Terminolog...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Add listener logic inside OrganizationLabelsNotifier to detect organization context changes (via TenantContextService or...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
In TerminologyRiverpodProviders, declare the root organizationLabelsNotifierProvider as a StateNotifierProvider scoped t...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Declare the labelProvider(String key) family provider in TerminologyRiverpodProviders. The provider must select only the...
Terminology Service Layer: Notifier, Sync, and Riverpod Providers · Dynamic Terminology & Labels System
Write developer documentation covering: (1) how to use TerminologyAwareTextWidget as a drop-in replacement for Flutter's...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Retrieve and display the last-updated timestamp of the active organization's terminology map from the TerminologyReposit...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Add fallback rendering logic to TerminologyAwareTextWidget. When LabelKeyResolver returns null for a key (missing from t...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Create the TerminologyAdminPreviewScreen as a read-only Riverpod ConsumerWidget accessible only to coordinators and admi...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Populate the TerminologyAdminPreviewScreen with a scrollable list of all label keys registered in the LabelKeyRegistry f...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Add visual highlighting in TerminologyAdminPreviewScreen for label keys that have no resolved value for the active organ...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Verify and harden the reactive rebuild behavior of TerminologyAwareTextWidget when the active organization switches or w...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Write integration tests (flutter_test + integration_test package) that simulate a full terminology resolution flow acros...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Create the base TerminologyAwareTextWidget Flutter widget class as a ConsumerWidget (Riverpod) that accepts a labelKey s...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Connect TerminologyAwareTextWidget to the LabelKeyResolver service via the Terminology Riverpod Providers. On each build...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Implement the core wrapping behavior in WcagSemanticsLabelResolver: consume the OrganizationLabelsNotifier via Riverpod,...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Create the WcagSemanticsLabelResolver as a Flutter infrastructure component (plain Dart class or StatelessWidget wrapper...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Write automated accessibility tests using flutter_test semantics testing APIs to verify that WcagSemanticsLabelResolver ...
Terminology UI Components: Text Widget, WCAG Semantics, and Admin Preview · Dynamic Terminology & Labels System
Build the email validation function in CredentialValidator using a regex that conforms to RFC 5322 email format rules. R...
Infrastructure & Data Layer Foundation · Email and Password Login
Add password validation to CredentialValidator enforcing minimum length (8 characters), at least one uppercase letter, o...
Infrastructure & Data Layer Foundation · Email and Password Login
Implement a reusable KeyboardAwareLayout widget that listens to MediaQuery.viewInsets to detect software keyboard appear...
Infrastructure & Data Layer Foundation · Email and Password Login
Write comprehensive unit tests for CredentialValidator covering valid emails, malformed emails (missing @, missing domai...
Infrastructure & Data Layer Foundation · Email and Password Login
Write integration tests for AuthRepository covering the full sign-in, session cache, restore, and sign-out lifecycle usi...
Infrastructure & Data Layer Foundation · Email and Password Login
Implement the session restoration flow in AuthRepository that reads the cached encrypted token on app launch, validates ...
Infrastructure & Data Layer Foundation · Email and Password Login
Add signInWithEmailAndPassword and signOut methods to AuthRepository. signIn calls the Supabase GoTrueClient, caches the...
Infrastructure & Data Layer Foundation · Email and Password Login
Set up flutter_secure_storage as the encrypted device storage backend in AuthRepository for caching the Supabase session...
Infrastructure & Data Layer Foundation · Email and Password Login
Create the Supabase Auth client singleton that reads SUPABASE_URL and SUPABASE_ANON_KEY from environment configuration a...
Infrastructure & Data Layer Foundation · Email and Password Login
Set up environment-based credential loading for the Supabase Auth client using flutter_dotenv or dart-define. Define sep...
Infrastructure & Data Layer Foundation · Email and Password Login
After successful authentication, AuthService resolves the authenticated user's role (admin, coordinator, peer_mentor) by...
Authentication Service & BLoC Layer · Email and Password Login
Add an on-success side-effect in LoginFormBLoC that triggers AuthService.persistSession() after emitting LoginSuccess. A...
Authentication Service & BLoC Layer · Email and Password Login
Write unit tests for the GoTrue error mapper covering all mapped error categories (invalid credentials, network, rate li...
Authentication Service & BLoC Layer · Email and Password Login
Write bloc_test unit tests for LoginFormBLoC covering: field validation transitions, loading state emission on submit, a...
Authentication Service & BLoC Layer · Email and Password Login
Write integration tests exercising the full stack from LoginFormBLoC through AuthService to the Supabase Auth client (us...
Authentication Service & BLoC Layer · Email and Password Login
Define the AuthService abstract interface with signIn, signOut, and getSession methods. Define typed domain exceptions: ...
Authentication Service & BLoC Layer · Email and Password Login
Implement a mapping function that translates GoTrue/Supabase Auth error codes and messages into typed domain exceptions....
Authentication Service & BLoC Layer · Email and Password Login
Implement the concrete AuthService class wrapping supabase.auth.signInWithPassword(). Call the GoTrue error mapper on al...
Authentication Service & BLoC Layer · Email and Password Login
Add getSession() and restoreSession() methods to AuthService. On successful sign-in, persist session tokens via the Auth...
Authentication Service & BLoC Layer · Email and Password Login
Define the complete set of Bloc events (EmailChanged, PasswordChanged, SubmitPressed, VisibilityToggled) and states (Log...
Authentication Service & BLoC Layer · Email and Password Login
Implement event handlers for EmailChanged and PasswordChanged that update internal field state. On SubmitPressed, invoke...
Authentication Service & BLoC Layer · Email and Password Login
Implement the SubmitPressed handler that dispatches signIn to AuthService, emits LoginLoading, then maps the typed domai...
Authentication Service & BLoC Layer · Email and Password Login
Add a loading overlay to LoginScreen that renders when LoginFormBLoC emits a loading state. The overlay should use a sem...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Write golden tests for LoginScreen covering five states: initial (empty form), loading overlay, auth error banner, Voice...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Build the PasswordVisibilityToggle as an accessible icon button embedded within the password input field. Must meet 48x4...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Wire inline field-level validation error display into LoginForm. On submission or field blur, show error messages direct...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Bind LoginForm widget to LoginFormBLoC: dispatch EmailChanged and PasswordChanged events on text change, dispatch LoginS...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Implement the KeyboardAwareLayout utility widget (015-keyboard-aware-layout) that wraps its child in a SingleChildScroll...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Build the LoginScreen widget that wraps LoginForm in a KeyboardAwareLayout with a scrollable Column. Render organisation...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Add error state rendering to LoginScreen triggered by LoginFormBLoC authentication failure states. Display a dismissible...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Write Flutter widget tests covering LoginForm rendered states: empty (submit disabled), valid email + password (submit e...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Write Flutter widget tests for PasswordVisibilityToggle: initial state obscures text, tapping toggle reveals text, tappi...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Audit and update the shared AppTextField widget to meet WCAG 2.2 AA requirements: label contrast ratio ≥4.5:1, placehold...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Compose the LoginForm widget using two AppTextField instances (email and password) and one AppButton (submit). Wire Pass...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
On successful authentication, LoginScreen must route the user to their role-specific home screen. Read the session resul...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Perform a systematic semantic label audit on all three components (PasswordVisibilityToggle, LoginForm, LoginScreen). Ve...
Login UI, Accessibility & WCAG 2.2 AA Compliance · Email and Password Login
Write widget tests for ClaimStatusBadge verifying: correct colour rendered for each ClaimStatus enum value, correct sema...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement the ClaimStatusBadge Flutter widget that renders a colour-coded pill/chip for each claim status (draft=grey, s...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement ApprovalNotificationService that delivers approval status change notifications via both FCM (for background/of...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write unit tests for ClaimEventsRepository covering: successful event insertion, rejection of update calls (UnsupportedE...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write unit tests for ExpenseClaimStatusRepository covering: successful status update with correct version, OptimisticLoc...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write integration tests for RealtimeApprovalSubscription covering: channel connection on subscribe(), stream events rece...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write unit tests for ClaimApprovalRepository covering: successful decision insertion with full coordinator metadata snap...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write integration tests for ApprovalNotificationService verifying: FCM notification dispatched when claim status changes...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement the ClaimEventsRepository class in Dart using the Supabase client. Expose insertEvent() and getEventsForClaim(...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement ClaimApprovalRepository using the Supabase client. Expose recordDecision(), getDecisionsForClaim(), and getPen...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement ExpenseClaimStatusRepository with getStatus(), updateStatus(), and watchStatus() methods. Implement optimistic...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement the ThresholdEvaluationService as a pure Dart class (no Flutter dependencies) with evaluateClaim(claimAmount, ...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Create the Supabase database table for claim_events with immutable audit columns (id, claim_id, event_type, actor_id, me...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Create the claim_approval_decisions table in Supabase with columns for decision_id, claim_id, coordinator_id, decision (...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Create the expense_claim_status table with columns for claim_id (PK), status (enum: draft/submitted/pending_approval/app...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement the RealtimeApprovalSubscription class wrapping Supabase Realtime channels for the expense_claim_status table....
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Write comprehensive unit tests for ThresholdEvaluationService covering: auto-approval below distance threshold (under 50...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Perform an end-to-end verification of the complete audit trail: submit a test claim, trigger threshold evaluation, recor...
Approval Workflow Data Foundation & Infrastructure · Threshold-Based Expense Approval Workflow
Implement markAsExported() on ApprovalWorkflowService. Validates the claim is in the approved state, updates status to e...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Implement the data-loading layer for ClaimStatusAuditTimeline widget. Create a Riverpod provider that fetches the ordere...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Build the ClaimStatusAuditTimeline Flutter widget that renders each ClaimEvent as a timeline row. Each row must display:...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Ensure all timestamps in ClaimStatusAuditTimeline are converted from UTC to Europe/Oslo timezone before display. Use the...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
After persisting each state transition, ApprovalWorkflowService must invoke ApprovalNotificationService to emit domain e...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Write flutter_test widget tests for ClaimStatusAuditTimeline covering: rendering with a full multi-event history, render...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Define the Dart abstract interface and sealed state classes for the ApprovalWorkflowService finite state machine. Enumer...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Implement the submitClaim() method on ApprovalWorkflowService. On call, the service must aggregate all ExpenseLine total...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
After submitClaim() determines the auto-approval path, immediately execute the submitted-to-approved transition without ...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Implement approveClaim() and rejectClaim() methods on ApprovalWorkflowService for the manual approval path. Each method ...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
After each successful state transition in ApprovalWorkflowService, write an immutable ClaimEvent record via ClaimEventsR...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Create the Supabase Edge Function project structure for ThresholdValidationEdgeFunction using Deno and TypeScript. Confi...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Port the identical threshold evaluation algorithm from ThresholdEvaluationService (client-side Dart) into the Edge Funct...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
In the Edge Function, compare the server-computed approval path against the client-submitted value. If the values differ...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Write exhaustive unit tests for all ApprovalWorkflowService state transitions using flutter_test and mocked repository/s...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Write integration tests for the Edge Function that execute against a local Supabase instance. Test scenarios: valid subm...
Approval Workflow Core Business Logic & Server Validation · Threshold-Based Expense Approval Workflow
Create the BulkApprovalResult data model including fields for total processed, successful approvals, failed records with...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Extend BulkApprovalProcessor to collect and surface failed individual records within a batch without aborting the remain...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Implement the BulkApprovalBar as a sticky bottom widget that becomes visible when one or more claims are selected in the...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Connect BulkApprovalBar to the coordinator review queue selection state using Riverpod or BLoC. Bar must reactively show...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Implement the two-step confirmation flow within ApprovalActionSheet so coordinators must explicitly confirm before any i...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Connect BulkApprovalBar action buttons to BulkApprovalProcessor service calls. On action tap, gather selected claim IDs ...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Write unit tests for BulkApprovalProcessor covering: successful batch with all records approved, partial failure where s...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Write widget tests for BulkApprovalBar covering visibility toggling on selection change, button disabled state during pr...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Build the BulkApprovalProcessor service that accepts a list of claim IDs and approval decision, iterates each record by ...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Create the ApprovalActionSheet as a modal bottom sheet widget for individual claim approve/reject decisions. Scaffold in...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Add validation logic to ApprovalActionSheet that requires a non-empty rejection comment before the reject action can be ...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Connect ApprovalActionSheet confirmation actions to ApprovalWorkflowService for individual claim transitions. Pass appro...
Bulk Approval Processing & Coordinator Action Components · Threshold-Based Expense Approval Workflow
Create the ClaimStatusAuditTimeline Flutter widget that renders a chronological timeline of claim events fetched from Cl...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Create the ApprovalStatusNotificationService that triggers push notifications and in-app notifications to peer mentors w...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Develop the BulkApprovalProcessor service that accepts a list of selected claim IDs and a bulk action (approve/reject) a...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the ClaimStatusBadge Flutter widget that visually represents claim status (pending, approved, rejected, auto_appro...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the BulkApprovalBar Flutter widget that appears when one or more claims are selected in the review queue. Display ...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the RealtimeApprovalSubscription infrastructure component that subscribes to Supabase Realtime channels for the ex...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Develop the ThresholdEvaluationService that applies organization-configured thresholds to determine whether a submitted ...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the ApprovalWorkflowService orchestrating the full coordinator approval flow: processing single-claim approve/reje...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Create the ClaimEventsRepository data layer component that persists and retrieves claim lifecycle events (submission, ap...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the ClaimApprovalDecisionRepository to store and retrieve coordinator approval decisions including approve, reject...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Create the ExpenseClaimStatusRepository managing the status lifecycle of expense claims (pending, under_review, approved...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Create the ApprovalActionBottomSheet Flutter widget used for single-claim review. Display claim summary metadata (submit...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Build the CoordinatorReviewQueueScreen as the primary coordinator entry point. Render paginated list of pending claims w...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Deploy a Supabase Edge Function that executes server-side threshold validation when a claim is submitted. The function r...
Coordinator Review Queue Screen & End-to-End Integration · Threshold-Based Expense Approval Workflow
Produce developer documentation for all four foundation components: ExpenseTypeConfig (enum variants, FormulaParameters ...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Write unit tests covering: event enqueuing up to buffer capacity, automatic flush on capacity exceeded, flush on app-lif...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Define the AnonymisedExpenseEvent data class with fields: eventType (enum: typeSelected, typeDeselected, conflictBlocked...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Add the announcement dispatch mechanism to ExpenseTypeAccessibilityService: queue announcements through Flutter's Semant...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Implement ExpenseTypeAnalyticsTracker as a singleton service with an in-memory event buffer (max 50 events) and a flush ...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Write exhaustive unit tests that assert every ExpenseType variant has a corresponding config entry, that all formula par...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Write unit tests asserting: semantic labels for all ExpenseType variants in selected/unselected/disabled states, conflic...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Write integration tests (no UI, in-process only) asserting that when MutualExclusionRuleEngine detects a conflict and Ex...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Create the canonical ExpenseType enum in Dart covering all reimbursable expense types (kilometre, transit, toll, parking...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Extend ExpenseTypeConfig with a FormulaParameters value object containing: base rate (NOK), distance unit (km/m), receip...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Implement ExpenseTypeAccessibilityService providing: getSemanticLabel(ExpenseType, isSelected, isDisabled) returning a f...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Model the mutual-exclusion compatibility matrix as an immutable Dart class MutualExclusionMatrix backed by a const Set<E...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Build MutualExclusionRuleEngine wrapping MutualExclusionMatrix with higher-level operations: validateSelection(List<Expe...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Write property-based and example-based unit tests for MutualExclusionRuleEngine covering: all known conflicting pairs ar...
Expense Type Selection — Foundation & Rule Engine · Expense Type Selection with Mutual Exclusion
Implement the flat receipt (tollroad, parking, transit ticket) calculation path in ExpenseCalculationService. Each recei...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the transit zone reimbursement formula in ExpenseCalculationService. Zone amounts are looked up from expense-t...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the computeDisabledTypes method in ExpenseSelectionBloc that, given the current selected set, queries the mutu...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
In ExpenseSelectionBloc, add an initialise event that calls ExpenseTypeRepository.loadDraft on first load. If a draft ex...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the local draft storage path in ExpenseTypeRepository using shared_preferences or Hive. On every validated sel...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Write unit tests for all three formula paths in ExpenseCalculationService: per-km with standard and capped rates, flat r...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Write unit tests for ExpenseTypeRepository covering: local draft write and read round-trip, draft cleared after final su...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Write integration tests for the full reactive data flow: user toggles expense type → BLoC invokes rule engine → valid se...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the persistFinalSelection method in ExpenseTypeRepository that writes the validated, finalised expense type se...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Create the core Dart data models for ExpenseCalculationResult, including typed fields for reimbursement amount, formula ...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the per-kilometre rate calculation within ExpenseCalculationService. The formula must read the org-specific ra...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the aggregation method in ExpenseCalculationService that accepts a list of active expense types with their inp...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Define the ExpenseSelectionState value class (selected type IDs, disabled type IDs, calculation result, draft status, lo...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Implement the toggleExpenseType method in ExpenseSelectionBloc. On each call: (1) tentatively add or remove the type ID ...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Add a server-side guard in ExpenseTypeRepository.persistFinalSelection that validates the submitted selection set agains...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Connect ExpenseSelectionBloc to ExpenseCalculationService so that every validated selection change immediately triggers ...
Expense Type Selection — Data Layer, Calculation & State Management · Expense Type Selection with Mutual Exclusion
Render visually distinct disabled states on expense type cards when the mutual exclusion rule engine marks a type as inc...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Implement the zero-state placeholder for the ExpenseCalculationPreview widget that is displayed when no expense type is ...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Create a ReimbursementLineItem widget that displays a single expense type's name and calculated reimbursement amount in ...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Compose the full ExpenseCalculationPreview panel from ReimbursementLineItem rows plus a bold total row. The panel must b...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Integrate SemanticsService live-region announcements into the ExpenseCalculationPreview so that screen readers announce ...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Write a complete flutter_test widget test suite for ExpenseTypePickerWidget covering: all four cards render correctly, t...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Write a complete flutter_test widget test suite for ExpenseCalculationPreview covering: zero-state placeholder renders w...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Run a full WCAG 2.2 AA audit on both the ExpenseTypePickerWidget and ExpenseCalculationPreview using the accessibility-t...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Build the base ExpenseTypeOptionCard widget that renders a single tappable expense category card with label, icon, and s...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Integrate expense-type-accessibility-service labels into the ExpenseTypeOptionCard widget. Each card must expose a Seman...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Compose the four ExpenseTypeOptionCards into a responsive 2×2 grid layout inside the ExpenseTypePickerWidget. The widget...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Subscribe the ExpenseTypePickerWidget to the ExpenseSelectionBLoC stream via StreamBuilder. Map BLoC state (selectedType...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Subscribe the ExpenseCalculationPreview widget to the ExpenseSelectionBLoC stream and re-render whenever the calculation...
Expense Type Selection — Interactive Picker & Calculation Preview UI · Expense Type Selection with Mutual Exclusion
Write technical documentation covering: database schema with column descriptions, RLS policy matrix (role vs operation),...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Build serialization/deserialization utilities for the field_mappings JSONB column. Define FieldMapping model with source...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Create a PostgreSQL enum type for supported integration types (xledger, dynamics, cornerstone, consio, bufdir) and apply...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Implement the Dart IntegrationTypeRegistry class as a static/singleton infrastructure component. It must expose typed me...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Write comprehensive unit tests for OrganizationIntegrationRepository and IntegrationCredentialVault using flutter_test a...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Write integration tests against a local Supabase instance to verify RLS policy enforcement on organization_integrations....
Integration Data Foundation & Credential Vault · External System Integration Configuration
Create fully typed Dart data model classes for OrganizationIntegration including fromJson/toJson serialization, JSONB fi...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Implement the full Dart repository class for CRUD operations on organization_integrations via Supabase client. Methods: ...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Create the Dart client that communicates with the Supabase Vault wrapper functions via RPC calls. Implement storeCredent...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Design and write the Supabase migration for the organization_integrations table including all columns: id, organization_...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Write and apply Row Level Security policies on the organization_integrations table ensuring coordinators and admins can ...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Create the vault client layer that wraps Supabase Vault pgsodium functions for storing, retrieving, and rotating API key...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Add vault_secret_id column to the organization_integrations table to store the opaque Vault reference ID instead of plai...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Create the static integration type registry that declares all supported external systems (Xledger, Dynamics, Cornerstone...
Integration Data Foundation & Credential Vault · External System Integration Configuration
Write technical documentation covering: the adapter interface contract with implementation guide for adding a new extern...
Integration Business Logic & Adapter Services · External System Integration Configuration
Add uniqueness enforcement logic to the Integration Config Service that prevents duplicate active configurations per org...
Integration Business Logic & Adapter Services · External System Integration Configuration
Extend the Integration Config Service to handle field mapping configuration saves and updates. Stores JSONB field mappin...
Integration Business Logic & Adapter Services · External System Integration Configuration
Add connection testing capability to the Integration Config Service that delegates to the appropriate adapter's testConn...
Integration Business Logic & Adapter Services · External System Integration Configuration
Enhance the IntegrationConfigValidator with adapter-aware validation rules that consult the registered adapter's getCapa...
Integration Business Logic & Adapter Services · External System Integration Configuration
Implement the remaining three REST adapters: CornerstoneAdapter (LMS/HR system), ConsioAdapter (membership management), ...
Integration Business Logic & Adapter Services · External System Integration Configuration
Write comprehensive unit tests for all five adapter implementations covering authentication flows (with mocked OAuth res...
Integration Business Logic & Adapter Services · External System Integration Configuration
Write integration tests for the Integration Config Service and Validator covering the full save flow: valid config saves...
Integration Business Logic & Adapter Services · External System Integration Configuration
Build the IntegrationConfigValidator service that validates integration configuration completeness and consistency befor...
Integration Business Logic & Adapter Services · External System Integration Configuration
Implement the FieldMappingResolver service responsible for loading per-organization JSONB field mapping configurations f...
Integration Business Logic & Adapter Services · External System Integration Configuration
Extend the FieldMappingResolver to apply loaded field mappings during export payload construction. Implements the transf...
Integration Business Logic & Adapter Services · External System Integration Configuration
Define the uniform adapter interface that all five external system REST adapters must implement. Interface includes: aut...
Integration Business Logic & Adapter Services · External System Integration Configuration
Complete the REST API Adapter Registry by registering all five adapters (Xledger, Dynamics, Cornerstone, Consio, Bufdir)...
Integration Business Logic & Adapter Services · External System Integration Configuration
Build the Integration Config Service that orchestrates all CRUD operations for integration configurations. Implements cr...
Integration Business Logic & Adapter Services · External System Integration Configuration
Wire the IntegrationConfigValidator into the Integration Config Service save and update flows. Ensures all configuration...
Integration Business Logic & Adapter Services · External System Integration Configuration
Implement the IntegrationTypeRegistry infrastructure component that defines all supported external system types (Xledger...
Integration Business Logic & Adapter Services · External System Integration Configuration
Implement the XledgerAdapter conforming to the uniform adapter interface. Handles Xledger-specific OAuth2 authentication...
Integration Business Logic & Adapter Services · External System Integration Configuration
Implement the DynamicsAdapter for Microsoft Dynamics portal integration used by HLF. Handles Azure AD / OAuth2 authentic...
Integration Business Logic & Adapter Services · External System Integration Configuration
Add manual trigger capability to the Sync Scheduler allowing coordinators and admins to initiate an integration sync out...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Build the transformation middleware layer within the Edge Function that converts internal data models into external API ...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement structured error handling within the Edge Function including classification of transient vs permanent failures...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement the cron configuration reader for the Sync Scheduler that queries the organization_integrations table and read...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement concurrency protection to prevent overlapping sync runs for the same integration. Use a database-level advisor...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Build the core health check framework for the Integration Health Monitor. Define a HealthCheck interface with methods ch...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Design and implement the sync_run_log database table and associated repository layer for the Sync Scheduler. The table t...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement the integration_health_status table and repository for storing and querying health check results. The table ho...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Set up the scheduled polling mechanism that invokes the health monitor on a configurable interval (default every 15 minu...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement concrete health check classes for each supported integration target: Xledger (authenticate + list accounts end...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Write an end-to-end test suite covering the full integration pipeline: Edge Function receives a dispatch request, retrie...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement the secure credential retrieval layer within the Edge Functions environment. Create a CredentialProvider modul...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement the core dispatch routing logic inside the Edge Function that receives export job requests, identifies the tar...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Implement the authentication guard for incoming Edge Function invocations. Verify that callers are either the Sync Sched...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Build the core job trigger engine that executes on a pg_cron or Supabase scheduled Edge Function invocation. The engine ...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Scaffold the Supabase Edge Functions project structure for the integration adapter dispatch layer. Configure Deno runtim...
Edge Functions, Sync Scheduler & Health Monitoring · External System Integration Configuration
Extend the Field Mapping Editor to support Bufdir-specific override columns. When mapping target fields, allow administr...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Add delete integration capability to the dashboard. Each integration card should show a delete action accessible via ove...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Design and implement error state and empty state screens for the Integration Configuration Dashboard (no integrations co...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Document the Integration Admin UI components: write developer usage notes for each panel widget covering required props,...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Build the Sync Schedule Configuration panel widget allowing administrators to select sync frequency (hourly, daily, week...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Build the Field Mapping Editor widget providing a visual source-to-target column mapping interface. Support drag-and-dro...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Create the Excluded Features Configuration Panel allowing HLF administrators to toggle off specific app features that ov...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Implement the first step of the setup wizard: an integration type selection screen listing available integration types (...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Add per-step validation logic to the Integration Setup Wizard. Each step must validate required fields before allowing n...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Connect the Integration Configuration Dashboard to live integration health data from the Integration Health Monitor serv...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Implement manual sync trigger in both the Integration Configuration Dashboard card and within the wizard's final step. O...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Connect the Excluded Features Configuration Panel to the Integration Config Service backend. On toggle change, call the ...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Wire the Sync Schedule Configuration panel to the Sync Scheduler service API. On save, persist frequency and time-of-day...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Conduct a full WCAG 2.2 AA accessibility audit across the Integration Configuration Dashboard, Setup Wizard, Field Mappi...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Write Flutter widget tests for each UI component: Integration Configuration Dashboard card rendering and status badge st...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Implement the Credential Management Form widget with masked input fields for API keys, client secrets, and passwords. In...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Implement the Integration Configuration Dashboard screen listing all configured integrations with status indicator badge...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Build the multi-step Integration Setup Wizard shell with step progress indicator, forward/back navigation, per-step vali...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Wire the Credential Management Form connection-test button to the Integration Config Service API endpoint. Display a loa...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Implement wizard completion saving: on final confirmation, POST or PATCH the complete integration configuration to the I...
Integration Admin UI — Dashboard, Wizard & Configuration Panels · External System Integration Configuration
Write developer documentation covering: how to run the PostGIS migrations locally, how the bounding-box RPC works and it...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Write unit tests for LocationPrivacyConfig covering: loading config from Supabase, default fallback values when org conf...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Write widget and unit tests for MapProviderIntegration verifying: map widget renders without error with zero markers, on...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Create a Supabase migration adding location_privacy_settings JSONB column to the organisations table (or a dedicated org...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Implement the LocationPrivacyConfig class that centralises per-organisation privacy settings: consent expiry duration, r...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Add flutter_map and latlong2 packages to pubspec.yaml. Configure the OpenStreetMap tile URL template, attribution string...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Implement the MapProviderIntegration class that wraps flutter_map behind a provider-agnostic interface. Expose buildMapW...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Implement the MentorLocationRepository class in Dart using the Supabase client. Provide methods: upsertMentorLocation(me...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Design and document the PostGIS-enabled database schema for storing mentor location data, including geometry columns, sp...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Write and apply a Supabase migration that enables the PostGIS extension, creates the mentor_locations table with all req...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Implement row-level security policies on the mentor_locations table enforcing organisation-scoped access. Coordinators m...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Write a Supabase RPC function (find_mentors_in_bounds) that accepts min_lat, min_lng, max_lat, max_lng, and organisation...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Implement the PostgisSpatialAdapter class that translates flutter_map LatLngBounds into Supabase RPC call parameters (mi...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Integrate the PostgisSpatialAdapter into MentorLocationRepository.findMentorsInBounds() replacing any stub implementatio...
Spatial Data Infrastructure & Map Provider Foundation · Geographic Peer Mentor Map View
Add consent versioning to location-privacy-config and location-consent-service so that when an organisation updates its ...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Produce developer documentation covering: the consent data model and its mapping to GDPR Articles 6 and 9, the audit log...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Create a Supabase Edge Function or RPC endpoint that wraps checkConsent and returns a typed ConsentStatusResponse for us...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Implement the core backend service methods on location-consent-service: grantConsent(mentorId, orgId, consentVersion), c...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Add revokeConsent(mentorId, orgId) method to location-consent-service that atomically marks the consent record as revoke...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Design and implement the database schema for storing location consent records, including consent_grants table with field...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Implement the location-consent-dialog Flutter widget that presents a plain-language explanation of what approximate loca...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Connect the location-consent-dialog to location-consent-service so that tapping Opt In calls grantConsent and tapping Op...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Build the location-privacy-config infrastructure component that loads and exposes per-organisation privacy policy URLs, ...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Write and apply Row Level Security policies on consent_grants and consent_audit_log tables so that a peer mentor can onl...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Implement comprehensive tests covering: grantConsent happy path, double-grant idempotency, revokeConsent atomicity with ...
Location Consent Lifecycle & GDPR Compliance · Geographic Peer Mentor Map View
Create Riverpod StateNotifierProvider or Provider definitions for MentorLocationService and MentorFilterService so they ...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Wire MentorFilterService into MentorLocationService so that every call to fetchMentorsInBoundingBox first validates and ...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Implement MentorMapBloc using flutter_bloc with two parallel state machines: one for map view state (loading, loaded, er...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Implement a client-side haversine distance calculation utility within MentorLocationService that takes the coordinator's...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Add an offline caching layer to MentorLocationService using a local Hive or shared_preferences store. On successful fetc...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Extend MentorFilterService to handle the availability status dimension: active, paused, all. Paused mentors must be excl...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Implement multi-select specialisation tag filtering in MentorFilterService. Tags are organisation-defined strings (e.g. ...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Write comprehensive unit tests for MentorLocationService covering: consent enforcement (opted-out mentors excluded), bou...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Write comprehensive unit tests for MentorFilterService covering: empty filter passthrough, availability-only filter, spe...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Create the core Dart domain models: MentorLocation (mentorId, coordinates, consentStatus, specialisations, availabilityS...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Implement MentorFilterService that translates UI FilterState (availability, specialisation tags) into a validated Filter...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Define the abstract MentorLocationService interface with methods: fetchMentorsInBoundingBox(box, criteria), getMentorsSo...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Implement the consent status check within MentorLocationService that filters out any mentor whose location_consent field...
Mentor Location & Filter Business Logic Services · Geographic Peer Mentor Map View
Write Flutter widget tests for MapFilterPanel covering: panel collapses and expands correctly, each filter control emits...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the ViewToggleButton as a persistent FAB-style widget that switches between map and list views without resetting f...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the MapFilterPanel as a collapsible bottom sheet with labelled form controls for availability status and specialis...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the MentorInfoPopup widget that renders when a map marker is tapped. The popup must load instantly from already-fe...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Implement the deep-link navigation action from MentorInfoPopup to the peer mentor detail screen. On button tap, push the...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Ensure the MentorListFallback receives and applies the same FilterChanged events as the map canvas so that toggling view...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Add full keyboard navigation to all overlay controls within MapViewScreen: filter panel toggle button, view toggle FAB, ...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the filter controls inside MapFilterPanel: a segmented availability selector (available, busy, any) and a multi-se...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Write Flutter widget tests covering MapMarkerWidget and ViewToggleButton. Test cases must include: marker renders with c...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Write Flutter widget tests for MentorInfoPopup and MentorListFallback. Popup tests: loads from BLoC state without networ...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Create the MapViewScreen widget as a full-screen scaffold that integrates with the mentor location BLoC. Set up the scre...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the MapMarkerWidget that renders a colour-coded circular marker for each consented mentor on the map canvas. Each ...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Connect the MapViewScreen to the mentor location BLoC state to place MapMarkerWidget instances on the map for each conse...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Build the MentorListFallback widget as a fully VoiceOver/TalkBack-compatible list view displaying the same filtered ment...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Conduct a full semantic annotation pass across all six map UI components: MapViewScreen, MapMarkerWidget, MentorInfoPopu...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Integrate the map provider plugin (flutter_map or google_maps_flutter) into MapViewScreen to render the full-screen tile...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Perform a manual WCAG 2.2 AA accessibility audit on all six map UI components using VoiceOver (iOS) and TalkBack (Androi...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Write a Flutter integration test covering the complete coordinator map feature flow: open map screen, verify mentors app...
Interactive Map UI, Accessible List Fallback & Progressive Enhancement · Geographic Peer Mentor Map View
Implement the NotificationEmptyState as a stateless Flutter widget displayed when the notification list is empty or a fi...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Write widget tests for NotificationListItem and NotificationEmptyState using flutter_test and WidgetTester. For Notifica...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Implement the NotificationAccessibilityAnnouncer as a singleton utility that uses Flutter's SemanticsService.announce() ...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Implement the NotificationListItem as a stateless Flutter widget accepting a Notification object. Render: type-specific ...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Write comprehensive unit tests covering: correct JSONB deserialization for all five NotificationPayload subtypes (remind...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Write unit tests for NotificationRepository using a mocked Supabase client. Cover: getNotifications returns correctly ty...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Write unit tests for SupabaseRealtimeSubscriptionService using a mock Supabase Realtime channel. Cover: subscription ope...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Define Dart sealed classes or freezed union types for NotificationPayload with five concrete subtypes: ReminderPayload (...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Create the Notification entity class in Dart with all fields: id, userId, type (NotificationType enum), payload (typed N...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Create the NotificationRepository class backed by Supabase. Implement: getNotifications(userId, {limit, offset, typeFilt...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Write Supabase migration to create the notifications table with columns: id, user_id, type (enum: reminder, expiry, scen...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Create a SupabaseRealtimeSubscriptionService that opens a Supabase Realtime channel scoped to the current authenticated ...
Notification Centre Data Foundation & Infrastructure · In-app Notification Centre
Add rollback handling to the Notification Read State Service. When a repository mutation fails (network error, RLS rejec...
Notification Centre Business Services & BLoC · In-app Notification Centre
Add ClearAllNotifications and ApplyNotificationFilter event handlers to the NotificationBloc. ClearAllNotifications dism...
Notification Centre Business Services & BLoC · In-app Notification Centre
Write unit tests for the Role-Aware Notification Filter Service and the Notification Read State Service using flutter_te...
Notification Centre Business Services & BLoC · In-app Notification Centre
Write bloc_test integration tests for the NotificationBloc covering the full notification lifecycle: initial load, Realt...
Notification Centre Business Services & BLoC · In-app Notification Centre
Define the Dart abstract interfaces and data models for the Role-Aware Notification Filter Service. Establish the Filter...
Notification Centre Business Services & BLoC · In-app Notification Centre
Implement the Supabase query predicate builders inside the Role-Aware Notification Filter Service for each role scope: p...
Notification Centre Business Services & BLoC · In-app Notification Centre
Implement the in-memory filtering pass that runs after the database query returns results. Apply coordinator-specific ru...
Notification Centre Business Services & BLoC · In-app Notification Centre
Implement the Notification Read State Service class that wraps notification repository mutation calls. On mark-read or m...
Notification Centre Business Services & BLoC · In-app Notification Centre
Create the NotificationBloc class extending Bloc. On bloc initialisation (NotificationInitialised event), inject and sub...
Notification Centre Business Services & BLoC · In-app Notification Centre
Handle incoming Realtime INSERT events within the NotificationBloc. Deserialise the raw Supabase payload into a Notifica...
Notification Centre Business Services & BLoC · In-app Notification Centre
Add MarkNotificationRead and MarkAllNotificationsRead event handlers to the NotificationBloc. Delegate mutation to the N...
Notification Centre Business Services & BLoC · In-app Notification Centre
Implement the NotificationFilterBar as a horizontally scrollable chip row widget that renders filter options for notific...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Wire the NotificationFilterBar to the NotificationBLoC using BlocBuilder so the active filter chips reflect the current ...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Build the NotificationTabBadge as a Stack-based overlay widget that wraps the bottom-navigation Notifications icon. Subs...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Mount the NotificationTabBadge onto the Notifications tab icon inside the role-aware bottom navigation bar (component 04...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Build the NotificationDeepLinkHandler service that parses a notification payload (notification_type, entity_id, entity_t...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Extend the NotificationDeepLinkHandler to catch 404/not-found responses from repositories when resolving entity_id befor...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Add loading skeleton placeholders (shimmer animation using design token colors) that display while the BLoC is in Notifi...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Add pull-to-refresh to the NotificationCentreScreen using RefreshIndicator that dispatches RefreshNotifications to the B...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Connect each NotificationListItem tap gesture in the NotificationCentreScreen to the NotificationDeepLinkHandler. On tap...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Audit and apply complete WCAG 2.2 AA accessibility semantics across all NotificationCentreScreen sub-widgets: add Semant...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Write a comprehensive test suite using flutter_test covering: (1) NotificationFilterBar emits correct BLoC events on chi...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Implement the NotificationCentreScreen as the main Notifications tab screen. Assemble the layout: app bar with title and...
Notification Centre UI, Deep Linking & Tab Badge · In-app Notification Centre
Create Riverpod providers for ReferralCodeRepository, RecruitmentAttributionRepository, ShareSheetBridge, QrCodeGenerato...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the QrCodeGenerator Flutter widget wrapping the qr_flutter package. The widget accepts a data string (referral...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the ShareSheetBridge Dart service wrapping the share_plus package. Expose shareReferralCode(referralUrl, mento...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Write flutter_test unit tests for ReferralCodeRepository using a mock Supabase client. Cover: successful code creation, ...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Write flutter_test unit tests for RecruitmentAttributionRepository using a mock Supabase client. Cover: event recording ...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Write an integration test (flutter_test integration_test package) that simulates a cold-start launch with a referral dee...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the ReferralCodeRepository Dart class backed by the Supabase client. Expose methods: createCode(mentorId, orgI...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the RecruitmentAttributionRepository Dart class backed by Supabase. Expose methods: recordEvent(referralCodeId...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Write and apply a Supabase database migration that creates the referral_codes table with columns for id, mentor_id, orga...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Write and apply a Supabase database migration that creates the referral_events table with columns for id, referral_code_...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the DeepLinkHandler service that intercepts incoming deep links matching the referral URI scheme (e.g., app://...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Configure Android AndroidManifest.xml intent filters and iOS Info.plist URL schemes and associated domains to support th...
Membership Recruitment: Data Layer & Infrastructure Utilities · Membership Recruitment (Verving)
Implement the getShareableUrl method in ReferralCodeService that fetches the organisation's configured deep-link scheme ...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Add the invalidateCode method to ReferralCodeService that marks a mentor's referral code as inactive when their account ...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the getAttributionCountsForMentor method in ReferralAttributionService. This method queries the repository for...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the publishMilestoneEvent method in ReferralAttributionService. After each confirmed attribution, evaluate whe...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Wire the notification path from ReferralAttributionService to the BadgeCriteriaIntegration layer so the badge system can...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Write a comprehensive flutter_test unit test suite for ReferralCodeService using a mocked ReferralCodeRepository. Cover:...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Write a comprehensive flutter_test unit test suite for ReferralAttributionService using mocked RecruitmentAttributionRep...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Write an end-to-end integration test that exercises the complete conversion funnel through both services: generate a ref...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Create the ReferralCodeService class as a Riverpod provider with constructor injection of the ReferralCodeRepository dep...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the deterministic, URL-safe code generation algorithm in ReferralCodeService. The algorithm must produce one u...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Create the ReferralAttributionService class as a Riverpod provider with constructor injection of the RecruitmentAttribut...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the recordClickEvent method in ReferralAttributionService. This method receives a referral code and device met...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the matchRegistrationToCode method in ReferralAttributionService. When a new member registration is confirmed,...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Implement the confirmAttribution method in ReferralAttributionService. When the membership system signals that a referre...
Membership Recruitment: Referral Code & Attribution Services · Membership Recruitment (Verving)
Write developer documentation for ReferralCodeScreen, RecruitmentStatsWidget, and NewMemberOnboardingScreen covering com...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Add RecruitmentStatsWidget to the peer mentor role-specific home screen as a summary card. Ensure it is positioned corre...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Create the ReferralCodeScreen widget with basic scaffold, app bar, and placeholder content areas. Register the route in ...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Wire the QrCodeGenerator infrastructure component into ReferralCodeScreen to render the mentor's unique referral QR code...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Display the mentor's shareable referral URL below the QR code. Implement a copy-to-clipboard button using Flutter's Clip...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Create the RecruitmentStatsWidget StatelessWidget displaying total shares, confirmed conversions, and pending signups. W...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Embed the RecruitmentStatsWidget at the bottom of ReferralCodeScreen beneath the share controls. Ensure the stats refres...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Create the NewMemberOnboardingScreen widget and register it in the router as the destination for referral deep links. Co...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
On NewMemberOnboardingScreen, display the organisation's logo, brand colors sourced from the design token system, and a ...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Implement a contact details form on NewMemberOnboardingScreen collecting the new member's name, phone number, and email ...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Audit ReferralCodeScreen, RecruitmentStatsWidget, and NewMemberOnboardingScreen for WCAG 2.2 AA compliance. Verify contr...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Add a prominent one-tap share button on ReferralCodeScreen that invokes ShareSheetBridge with the referral link and a pr...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
On form submission in NewMemberOnboardingScreen, call ReferralAttributionService via Riverpod to persist the attribution...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Write Flutter widget tests for ReferralCodeScreen, RecruitmentStatsWidget, and NewMemberOnboardingScreen covering render...
Membership Recruitment: Peer Mentor Referral UI · Membership Recruitment (Verving)
Build a ConversionFunnelWidget that renders three funnel stages — shared → clicked → registered — with counts and drop-o...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Integrate a DateRangeFilterBar widget into the coordinator recruitment dashboard allowing selection of preset ranges (la...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Implement the MentorReferralDetailScreen that is navigated to when a coordinator taps a mentor row in the recruitment da...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Write unit tests for BadgeCriteriaIntegration covering: event subscription setup, correct badge criteria query by type, ...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Write widget and integration tests for the coordinator recruitment dashboard: verify stats list renders with mocked BLoC...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Define the Dart data models and interfaces for aggregated recruitment statistics consumed by the coordinator dashboard. ...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Create the CoordinatorRecruitmentDashboardBloc (or Cubit) that calls ReferralAttributionService.getAggregatedStatsForMen...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Define the RecruitmentMilestoneEvent Dart class emitted by ReferralAttributionService when a confirmed registration is r...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Implement the CoordinatorRecruitmentDashboard widget as a new section within the existing coordinator statistics screen....
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Implement the BadgeCriteriaIntegration service that subscribes to RecruitmentMilestoneEvents from ReferralAttributionSer...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Extend BadgeCriteriaIntegration to call BadgeAwardService (550-badge-award-service) when a mentor crosses a recruitment ...
Membership Recruitment: Coordinator Dashboard & Badge Integration · Membership Recruitment (Verving)
Write unit tests for LocalDistanceCache covering: write and read roundtrip, cache miss returns null, TTL expiry removes ...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Build the LocalDistanceCache class backed by SharedPreferences to persist previously entered origin-destination distance...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Write comprehensive unit tests for MileageCalculationService covering Norwegian rounding rules, zero distance, fractiona...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Write exhaustive unit tests for AutoApprovalEvaluator covering all decision paths: below threshold without attachment, b...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Write integration tests for SupabaseMileageAdapter that execute against a real Supabase test project. Tests must verify:...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Implement the SupabaseMileageAdapter class that translates MileageClaim and OrgConfiguration domain objects to and from ...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Define the Dart domain model classes for MileageClaim (distance, route, claim status, expense attachments, submission me...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Implement the stateless MileageCalculationService that computes reimbursement amounts from distance (km) and organisatio...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Implement the stateless AutoApprovalEvaluator service that accepts a MileageClaim and OrgConfiguration and returns a det...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Create the Supabase database schema for the mileage_claims and org_configuration tables, including all required columns,...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Configure and verify Supabase Row Level Security policies on mileage_claims and org_configuration tables. Ensure peer me...
Mileage Reimbursement Entry — Infrastructure & Calculation Foundation · Mileage Reimbursement Entry
Expose OrgRateConfigRepository through a Riverpod StreamProvider so the rate config Stream is accessible application-wid...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Create Riverpod providers for MileageClaimRepository, including a family provider for user-scoped claim lists and a coor...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Build DistancePrefillService that wraps LocalDistanceCache with typed read and write operations for the per-user last-us...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Expose DistancePrefillService as a Riverpod provider. Wire the auth session stream listener so clearOnLogout is called a...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Run an integration smoke test confirming all three Tier 2 components are wired correctly end-to-end against a Supabase t...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Write unit tests covering OrgRateConfigRepository (Stream emission on config change, cache hit/miss, error propagation),...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Create the OrgRateConfig domain model class with fields for per-km rate and auto-approval threshold. Define the abstract...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Build the concrete OrgRateConfigRepository that fetches the per-km rate and auto-approval threshold from Supabase via th...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Create the MileageClaim domain entity covering all fields: claim id, user id, route description, distance km, reimbursem...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
Build the concrete MileageClaimRepository using the supabase-mileage-adapter. Implement insert-with-initial-status, fetc...
Mileage Reimbursement Entry — Data Repositories & Distance Prefill · Mileage Reimbursement Entry
After successful persistence, invoke DistancePrefillService.updatePrefill() with the submitted route and distance so sub...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Write unit tests for MileageClaimService covering: (1) silent auto-approval path for below-threshold claims with no addi...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Write integration tests against a real Supabase test database instance covering the full submitClaim() lifecycle: form i...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Define the MileageClaim domain object with all required fields (distance, route, org config snapshot, expense flags, sub...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Create the MileageClaimService class with constructor dependency injection for AutoApprovalEvaluator, MileageClaimReposi...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Implement the logic within submitClaim() that assembles a MileageClaim domain object by combining raw form inputs (dista...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Wire the synchronous AutoApprovalEvaluator call into submitClaim() so that ClaimStatus is resolved before any persistenc...
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
After status is resolved, persist the finalized MileageClaim (with its resolved ClaimStatus) via MileageClaimRepository....
Mileage Reimbursement Entry — Claim Submission Orchestration · Mileage Reimbursement Entry
Run flutter_test accessibility audit on RouteInputFieldsWidget to verify that all labels pass WCAG 2.2 AA contrast ratio...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Create the base StatelessWidget class for DistanceInputFieldWidget in Flutter with a numeric TextFormField, a numeric ke...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Connect DistanceInputFieldWidget to the DistancePrefillService so the field is pre-populated with the cached most-recent...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Implement a validator function on the TextFormField that rejects empty input, non-numeric input, zero, and negative valu...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Create the RouteInputFieldsWidget StatelessWidget containing a labelled required origin TextFormField. Apply WCAG 2.2 AA...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Extend RouteInputFieldsWidget with an optional destination TextFormField that displays a privacy notice tooltip (e.g. 'O...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Create the RealtimeReimbursementDisplayWidget as a StatefulWidget that accepts a distanceKm double and an orgRateNok dou...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Update RealtimeReimbursementDisplayWidget to call the synchronous MileageCalculationService.calculate(distanceKm, rateNo...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Create the MileageEntryForm screen widget as a StatefulWidget with a Form key, a ScrollView wrapper, a pre-filled read-o...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Embed DistanceInputFieldWidget, RouteInputFieldsWidget, and RealtimeReimbursementDisplayWidget into MileageEntryForm. Li...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Add form-level validation to MileageEntryForm that blocks submission when distance is missing or invalid, or when the or...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Wire the confirm button in MileageEntryForm to call MileageClaimService.submitClaim() with the collected form data (date...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Run a full WCAG 2.2 AA audit across all four components (MileageEntryForm, DistanceInputField, RouteInputFields, Realtim...
Mileage Reimbursement Entry — User Interface Assembly · Mileage Reimbursement Entry
Write developer documentation covering the contact_chapters migration steps (how to apply and roll back), the ContactCha...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Extend the adapter to include organisation-scoped query filters that complement the RLS policies, providing defence-in-d...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Write flutter_test unit tests for the ContactChapter domain mapper covering all field mappings and edge cases. Write int...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Create the ContactChapter Dart domain class with all required fields (contactId, chapterId, createdAt, etc.). Implement ...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Build the SupabaseContactChapterAdapter class with methods for inserting a new contact-chapter membership, deleting a me...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Create a Supabase database migration that introduces the contact_chapters junction table with composite primary key (con...
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Define and apply Row Level Security policies on the contact_chapters table to enforce multi-organisation data isolation....
Multi-Chapter Membership Foundation: Supabase Adapter & Infrastructure · Multi-Chapter Membership Handling
Extend the CrossChapterActivityQuery implementation to support cursor-based pagination (limit + offset or keyset) and op...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Create the DuplicateWarningEvent domain model capturing: event timestamp, contact_id, chapter_ids involved, activity det...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Implement the concrete SupabaseDuplicateWarningEventLogger. On logWarningEvent, insert a structured row into the duplica...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Expose ContactChapterRepository, CrossChapterActivityQuery, and DuplicateWarningEventLogger as Riverpod providers so tha...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Write unit tests for ContactChapterRepository (mock Supabase adapter) covering: add affiliation success, add affiliation...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Create the Dart domain model classes for ContactChapter, ChapterAffiliation, and related value objects. Define the abstr...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Create the abstract CrossChapterActivityQuery interface with a fetchActivitiesForContact(contactId) method signature. De...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Implement the concrete Supabase-backed ContactChapterRepository class. Wire up to the supabase-contact-chapter-adapter (...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Ensure the 5-affiliation cap is enforced both at the repository layer (Dart) and via a Supabase check constraint or trig...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Implement the Supabase-backed CrossChapterActivityQuery. Issue a single SQL query that JOINs contact_chapters to the act...
Multi-Chapter Membership Data Layer: Repositories & Audit Logger · Multi-Chapter Membership Handling
Enhance the DuplicateActivityWarning object returned by the detection service to include all fields required by the warn...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Define the core domain types used by the Multi-Chapter Membership Service: ChapterAffiliation, ChapterMembershipResult, ...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Define the domain types required by the Duplicate Activity Detection Service: DuplicateActivityWarning (with matching ac...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Implement the getAffiliationsForContact method in MultiChapterMembershipService. Fetch the current affiliation set from ...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Implement the addAffiliation method with full business rule enforcement: (1) fetch existing affiliations for the contact...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Implement the removeAffiliation method: verify the affiliation exists before attempting deletion (throw AffiliationNotFo...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Implement the core comparison algorithm in DuplicateActivityDetectionService: accept a PendingActivity (contact_id, date...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Write comprehensive unit tests for MultiChapterMembershipService covering all business rule branches: successful add (fi...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Write unit tests for DuplicateActivityDetectionService covering: exact date match returns warning, +1 day match returns ...
Multi-Chapter Membership Core Services: Business Logic & Duplicate Detection · Multi-Chapter Membership Handling
Implement the ChapterAffiliationsPanel Flutter widget that consumes ChapterMembershipCubit via BlocBuilder. Render the c...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Annotate all badge chips in ChapterAffiliationsPanel with Flutter Semantics widgets: set meaningful label strings combin...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Implement the DuplicateActivityWarningDialog as a fully accessible modal in Flutter. The dialog receives a DuplicateActi...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Connect DuplicateActivityWarningDialog decision callbacks to the DuplicateWarningEventLogger. When the coordinator taps ...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Implement the add-chapter section of ChapterAssignmentEditor: a searchable chapter list (debounced text field + filtered...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Implement the end-affiliation section of ChapterAssignmentEditor: list existing active affiliations from Cubit loaded st...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Annotate ChapterAssignmentEditor with full Semantics coverage: label the search field, mark each chapter list item with ...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Write bloc_test unit tests for ChapterMembershipCubit covering: successful load emits ChapterMembershipLoaded, trackPend...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Write flutter_test widget tests for ChapterAffiliationsPanel (badge rendering, screen reader label content), DuplicateAc...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Define all typed Cubit state classes for the chapter membership lifecycle: ChapterMembershipInitial, ChapterMembershipLo...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Implement the ChapterMembershipCubit class body: inject MultiChapterMembershipService, implement loadAffiliations() to f...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Implement commitChanges() on the Cubit: emit saving state, delegate to MultiChapterMembershipService, emit success or ty...
Multi-Chapter Membership UI: Cubit, Warning Dialog & Affiliation Screens · Multi-Chapter Membership Handling
Write developer documentation covering: the router contract (how to declare a new route with PopScope and RouteMetadata)...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Add a notifyAccessibilityLayer method to TabStateManager that fires whenever the active tab changes. The notification mu...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Annotate every route declaration in NavigationRouteConfig with its RouteMetadata: semanticsLabel for screen-reader annou...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Write unit tests for NavigationStateRepository covering: saving and loading tab index, saving and loading stack snapshot...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Write integration tests verifying that: all five StatefulShellRoute branches are reachable by name, PopScope is active a...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Write unit tests for TabStateManager covering: initial hydration from a pre-populated repository, setActiveTab updates a...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Write an end-to-end widget test that simulates a full session cycle: navigate to tab 3, push two sub-routes, background ...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Define the core Dart data models and interfaces for navigation state persistence: TabIndex value object, NavigationStack...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Implement the NavigationStateRepository backed by shared_preferences. The repository must support read/write for tab ind...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Implement the TabStateManager as a Riverpod StateNotifier (or AsyncNotifier) that maintains in-memory NavigationStackSna...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Add lifecycle hooks to TabStateManager that respond to app resume, logout, and role-switch events. On resume: reload sna...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Connect the TabStateManager Riverpod provider to the StatefulShellRoute navigator index. The shell's onNavigationStateCh...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Define all named route constants (route names, paths) for the five tab branches and their sub-routes in a central route-...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Implement the central NavigationRouteConfig using GoRouter with StatefulShellRoute for the five tab branches (Home, Cont...
Navigation Foundation: Route Config, State Persistence & Tab Management · Navigation & Gesture Accessibility
Implement the NavigationAccessibilityService as a singleton service that listens to GoRouter route changes and fires Sem...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the NavigationStateRepository using SQLite/Hive local storage to persist selected tab index, navigation histor...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Add accessible active-state visual indicators to each bottom nav tab: filled icon, label underline, and color change on ...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement an accessible notification count badge on the Notifications tab of AccessibleBottomNavBar. The badge count mus...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Create the AccessibilityAuditRunner infrastructure component that wraps flutter_test accessibility matchers and the WCAG...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Write flutter_test widget tests for ModalCloseButton covering: button renders in correct position, tap triggers Navigato...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Write flutter_test widget tests for PersistentBackButton covering: button visible on non-root routes, hidden on root rou...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Write flutter_test widget tests for VerticalScrollContainer covering: horizontal scroll gestures do not trigger navigati...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Build the TabStateManager as a Riverpod StateNotifier that holds the active tab index, exposes selectTab() and resetTab(...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the ModalCloseButton Flutter widget as a reusable StatelessWidget injected into every ModalBottomSheet, AlertD...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Enhance the ModalCloseButton with full VoiceOver/TalkBack semantics: set Semantics label to 'Close', hint to 'Activates ...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the PersistentBackButton as a Flutter widget that appears on every non-root screen. It must call context.pop()...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Integrate PersistentBackButton into the shared page header / AppBar wrapper used across all non-root screens. Ensure it ...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the VerticalScrollContainer as a Flutter widget wrapper that constrains physics to ClampingScrollPhysics on th...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Enhance VerticalScrollContainer with Semantics(container: true) and explicit scrollSemanticDescription for screen reader...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the AccessibleBottomNavBar as a Flutter StatefulWidget connected to TabStateManager via Riverpod. Render five ...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Define the GoRouter StatefulShellRoute configuration with five named branches (Home, Contacts, Add, Work, Notifications)...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Write integration tests for AccessibleBottomNavBar covering: all five tabs are reachable without swipe gestures, tab sel...
Accessible Navigation UI Widgets: Bottom Nav, Back Button, Modal Close & Scroll Container · Navigation & Gesture Accessibility
Implement the no-horizontal-swipe policy audit in NavigationAccessibilityService by inspecting route configurations for ...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the debug-mode warning dispatcher in NavigationAccessibilityService that surfaces all collected AccessibilityV...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Scaffold the AccessibilityAuditRunner as a Flutter integration test helper class. Set up the test entry point, import fl...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the Switch Access traversal simulation in AccessibilityAuditRunner using Flutter's SemanticsController to enum...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement Full Keyboard Access navigation simulation in AccessibilityAuditRunner using Flutter integration test key inje...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Define the core Dart interfaces and data models that represent navigation route contracts: RouteAccessibilityContract, M...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the NavigationRouteConfig reader that introspects the GoRouter route tree, extracts all declared routes with t...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the modal route verification logic inside NavigationAccessibilityService that iterates all modal routes from N...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the back navigation verification logic that confirms every non-root route exposes a PersistentBackButton or eq...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Configure the CI pipeline (GitHub Actions or equivalent) to run the AccessibilityAuditRunner integration test as a requi...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the violation report serializer in AccessibilityAuditRunner that aggregates all violation records (traversal, ...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Implement the touch target size assertion in AccessibilityAuditRunner that walks the semantics tree for all interactive ...
Navigation Accessibility Service, Compliance Enforcement & CI Audit Pipeline · Navigation & Gesture Accessibility
Extend UrlLauncherUtil so that when a URL cannot be opened (unsupported scheme, no handler installed, platform error) it...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Write unit tests for NoAccessConfigRepository covering: successful remote config fetch, cache hit preventing second netw...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Write unit tests for UrlLauncherUtil covering: successful URL launch, unsupported URL scheme returning error result, pla...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Write an integration test that wires NoAccessConfigRepository and UrlLauncherUtil together: fetch the admin portal URL f...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Create the NoAccessConfig data model and local constants file that defines the fallback admin portal URL and the default...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Build the NoAccessConfigRepository class that fetches the admin portal URL and blocked-role list from Supabase remote co...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Register NoAccessConfigRepository as a Riverpod provider so downstream components (route guard, access denial service) c...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Create the UrlLauncherUtil class as a thin, platform-safe wrapper around Flutter's url_launcher package. Expose a single...
No-Access Screen Foundation: Configuration & URL Infrastructure · No-Access Screen for Restricted Roles
Create a Riverpod provider for AccessDenialService and expose both the isRoleBlocked stream as a StreamProvider<bool> an...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Create a constant or configuration set of route paths that remain accessible to blocked roles (e.g., /logout, /auth/logi...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Connect AccessDenialService to the no-access config repository (052-no-access-config-repository) so that getAdminPortalU...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Write unit tests covering: global admin role returns isBlocked=true, peer mentor role returns isBlocked=false, coordinat...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Write unit tests for the route guard covering: blocked role navigating to /home is redirected to /no-access, blocked rol...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Write an integration test simulating a global admin logging in and attempting to navigate to peer-mentor screens. Verify...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Create the Dart abstract interface for AccessDenialService defining the isRoleBlocked stream/notifier, the getAdminPorta...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Implement the concrete AccessDenialService class that reads the current user role from the role-based access control lay...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Implement the NoAccessRouteGuard as a GoRouter redirect callback. The guard must intercept every navigation attempt for ...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Register the NoAccessRouteGuard redirect callback in the app's GoRouter configuration, ensuring it runs after authentica...
No-Access Screen Access Control: Route Guard & Denial Service · No-Access Screen for Restricted Roles
Integrate the organisation logo display into the no-access-screen-widget using the design token system. Source the logo ...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Add the localised human-readable explanation string to the widget body explaining why access is denied (global admins mu...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Implement a tappable admin portal link widget inside the no-access-screen-widget that opens the admin portal URL in the ...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Add a prominent logout button to the no-access-screen-widget. The button must meet the 44×44 dp minimum touch target, us...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Test and fix the no-access-screen-widget layout at system font scale factors 1.0, 1.5, 2.0, and 3.2 (accessibility large...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Write flutter_test widget tests for the no-access-screen-widget covering: (1) logo renders, (2) denial message appears, ...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Perform a manual QA pass of the no-access-screen-widget with TalkBack (Android) and VoiceOver (iOS): confirm the live re...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Create the initial StatelessWidget/StatefulWidget scaffold for the no-access-screen-widget as a full-screen terminal rou...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Wrap the denial headline text in a Semantics widget with header:true so screen readers announce it as a heading. Audit t...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Add a live region that fires when the no-access screen is first rendered so screen-reader users receive the access denia...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Audit every text element on the no-access-screen-widget against the WCAG 2.2 AA 4.5:1 contrast ratio requirement. Use th...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Wrap every interactive element (portal link, logout button) in a minimum 44×44 dp touch target using accessible-touch-ta...
No-Access Screen UI: Widget Implementation & Accessibility · No-Access Screen for Restricted Roles
Produce developer documentation covering the organization_configs table schema and RLS policy rationale, the full list o...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Wire the FeatureFlagCache into the FeatureFlagRepository so that all read operations check the cache first and only hit ...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Write comprehensive unit tests covering: RolloutEvaluator version comparison edge cases (equal, below, above minAppVersi...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Build the FeatureFlagRepository class that reads and persists feature flag records from the organization_configs Supabas...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Implement the FeatureFlagCache component providing a two-layer cache: a short-lived in-memory Map for the current app se...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Build the RolloutEvaluator service that determines flag eligibility for a given organization and app context. Implement ...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Design and implement the Supabase database schema for the organization_configs table, including columns for organization...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Write and apply Supabase Row Level Security policies on the organization_configs table to ensure each authenticated user...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Create the canonical Dart constants file that enumerates every feature flag key as a typed string constant (e.g., kFlagT...
Feature Flag Data Foundation · Organization-scoped Feature Flags
Ensure that when an admin toggles a feature flag (e.g., via the admin screen), the FeatureFlagProvider detects the state...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Write unit tests for the FeatureFlagInitializer (network success path, network failure fallback to cache, empty cache co...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Create the FeatureFlagProvider as a Riverpod AsyncNotifier that resolves the active organization context, delegates flag...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Expose a synchronous isEnabled(flagKey) method on the FeatureFlagProvider that performs O(1) lookup against the resolved...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Build the FeatureFlagInitializer service that pre-loads the full flag configuration for the authenticated organization i...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Extend the FeatureFlagInitializer with a robust fallback mechanism: when the remote fetch fails (network error, timeout,...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Wire the FeatureFlagInitializer into the post-organization-selection lifecycle so it executes before the main navigation...
Feature Flag Runtime Services · Organization-scoped Feature Flags
Implement the read-only paginated audit log section within the admin screen that displays all flag change events. Each l...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Add a stale-cache indicator banner to the admin screen that appears when the last sync timestamp from FeatureFlagCache e...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Implement the per-flag rollout condition configuration panel in the admin screen. Allow admins to set minimum app versio...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Harden the FeatureGate widget against edge cases: handle unknown flag keys gracefully (default to hidden), ensure fallba...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Create the Feature Flag Admin Screen scaffold with role-based route guard restricting access to organization admins only...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Build the deliberate two-step toggle flow for the admin screen: first tap stages the toggle, second tap opens a confirma...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Write comprehensive Flutter widget tests for the FeatureGate widget covering: renders child when flag is enabled, render...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Write Flutter integration tests for the Feature Flag Admin Screen covering: role guard blocks non-admin users, flag list...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Create the FeatureGate Flutter widget that conditionally renders child widgets based on a FeatureFlagKeys enum value. Im...
Feature Gate Widget and Admin Interface · Organization-scoped Feature Flags
Write Flutter widget tests for OnboardingProgressIndicator covering: correct step count and labels for email/password ph...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Build the OrgBrandingCache that fetches organization logo URLs and design-token overrides (primary color, font family, b...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Implement the OrgCardWidget Flutter widget used as the atomic card unit on the organization selection screen and the mul...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Implement the OnboardingProgressIndicator widget that renders a row of labeled step dots adapting to the active auth pha...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Build the FeatureFlagProvider Riverpod provider that fetches per-organization feature flags from Supabase (table: org_fe...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write unit tests for OrgBrandingCache covering: cold-start fetch from Supabase, second-call memory-cache hit (no network...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write unit tests for FeatureFlagProvider covering: flag enabled/disabled states, TTL-based cache expiry triggering a re-...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write Flutter widget tests for OrgCardWidget covering: logo display with placeholder fallback, name truncation for long ...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Build the SupabaseRLSTenantConfigurator that sets the Supabase custom claim app.current_org_id immediately after an orga...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Design and implement the typed SecureStorageAdapter abstract interface that wraps iOS Keychain and Android Keystore APIs...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Implement the concrete SecureStorageAdapter using flutter_secure_storage under the hood, ensuring AES-256 encryption on ...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write unit tests for the SecureStorageAdapter using a mock/fake implementation. Cover write-then-read round-trips, overw...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write integration tests verifying that after SupabaseRLSTenantConfigurator is invoked, subsequent Supabase queries are s...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Write an integration test that exercises the full foundation layer as a system: (1) SecureStorageAdapter writes and read...
Foundation Infrastructure & Atomic UI Components · Organization Selection & Onboarding
Wire up a Supabase Realtime subscription within OrganizationRepository to emit updated organization lists whenever the u...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Write comprehensive tests for OrganizationRepository covering: unit tests for domain model mapping from raw Supabase JSO...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Write comprehensive tests for TenantSessionStore covering: unit tests for SecureStorage serialization/deserialization, n...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Create the typed Organization domain model class mapping all Supabase row fields to strongly-typed Dart properties. Defi...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Implement a session-scoped in-memory cache within OrganizationRepository that stores the fetched organization list after...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Create the TenantSessionData model encapsulating org_id, organization display name, user role within the org, and select...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Implement the SecureStorageAdapter integration within TenantSessionStore for offline-capable session persistence. On per...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Implement the startup session restoration flow in TenantSessionStore. On app launch, after authentication state is confi...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Implement the concrete OrganizationRepository backed by the Supabase client. Write the query to fetch all organizations ...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Implement the Supabase session claim write path in TenantSessionStore. After persisting to SecureStorage, call the Supab...
Data Access & Tenant Session Persistence · Organization Selection & Onboarding
Add an in-memory session cache layer to MultiOrgMembershipResolver so that repeated navigation events do not re-query Su...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Extend OrgRouteGuard to handle the session restore scenario on cold start: if TenantSessionStore has a persisted org_id,...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Write integration tests covering the complete flow from authentication through org selection to app-ready state. Test ca...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Write unit tests for MultiOrgMembershipResolver covering: correct Supabase query construction for cross-schema membershi...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Write unit tests for TenantContextService verifying the orchestration sequence is atomic and ordered: (1) labels load be...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Define the abstract Dart interface for MultiOrgMembershipResolver including the OrgMembership model, MembershipResolutio...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the concrete MultiOrgMembershipResolver that queries Supabase across all tenant schemas to retrieve the authen...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Define the abstract TenantContextService interface, TenantContext state model (org_id, branding tokens, feature flags, t...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the terminology label loading step within TenantContextService. After org selection is confirmed, query the or...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the branding token injection step: after terminology labels are loaded, fetch the org's branding configuration...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the final two orchestration steps in TenantContextService: apply the org's feature flags via FeatureFlagProvid...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Define the abstract OrgSelectionService interface including the selectOrg(orgId) method signature, OrgSelectionResult (s...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the concrete OrgSelectionService: call OrganizationRepository to fetch and validate the chosen org, perform a ...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Define the OrgRouteGuard as a go_router redirect callback. Specify the two-axis evaluation: (1) authentication state fro...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Implement the OrgRouteGuard redirect function integrated into go_router's redirect callback. The guard reads the Supabas...
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
Integrate the TenantContextService.load() orchestration call into OrgSelectionService after a successful org validation....
Core Business Logic, Tenant Orchestration & Navigation Guards · Organization Selection & Onboarding
When OrgSelectionService returns an error (inactive org, network failure, or unreachable tenant), show a localized inlin...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Integrate the OnboardingProgressIndicator widget into OrgSelectionScreen at the top of the content area. The indicator m...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Create the MultiOrgContextSwitcher widget. On open, call MultiOrgMembershipResolver to retrieve all organizations the au...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
When a user taps a non-active org in MultiOrgContextSwitcher, show a modal confirmation dialog before executing the tena...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Wire the confirmed org selection in MultiOrgContextSwitcher to TenantContextService.switchTenant(). After a successful s...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Write widget and integration tests covering: (1) OrgSelectionScreen renders org list from mocked OrganizationRepository;...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Create the full-screen OrgSelectionScreen widget with a responsive scrollable layout, placeholder slots for the org list...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Integrate the OrgCardWidget into OrgSelectionScreen to display the full list of partner organizations fetched via Organi...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Implement the tap handler on each OrgCardWidget in OrgSelectionScreen. On tap, call OrgSelectionService to validate and ...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Conduct a full WCAG 2.2 AA accessibility pass on OrgSelectionScreen and MultiOrgContextSwitcher. Requirements: all inter...
User Interface: Organization Selection Screen & Multi-Org Context Switcher · Organization Selection & Onboarding
Write unit tests for LocalStorageAdapter covering: successful read/write of org ID string, read when key is absent retur...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Write unit tests for OrgPersistenceRepository using a mocked LocalStorageAdapter. Cover: save writes the correct key/val...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Create an abstract Dart class (interface) for OrgPersistenceRepository defining the contract: getSelectedOrganizationId(...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Implement the concrete OrgPersistenceRepository class backed by LocalStorageAdapter. Use the namespaced key constant def...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Create a typed constants file defining all SharedPreferences keys used by the Organization Selection feature. Establish ...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Build the LocalStorageAdapter as a typed wrapper around SharedPreferences. Expose async read/write/delete methods for st...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Create a Riverpod provider for LocalStorageAdapter that initializes SharedPreferences and exposes the adapter as a singl...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Create a Riverpod provider for OrgPersistenceRepository that depends on the LocalStorageAdapter provider. Expose the rep...
Organization Selection Infrastructure & Persistence Layer · Organization Selection Screen
Implement the label resolution logic in OrgLabelsProvider: given a LabelKey, return the organization-specific string if ...
Organization Selection Service & Labels Provider · Organization Selection Screen
Write unit tests for OrgSelectionService covering: load organizations returns correct list, selectOrganization persists ...
Organization Selection Service & Labels Provider · Organization Selection Screen
Write unit tests for OrgLabelsProvider covering: correct label returned for each of the four partner organizations, fall...
Organization Selection Service & Labels Provider · Organization Selection Screen
Define the abstract interface for OrgSelectionService including method signatures for loadOrganizations, selectOrganizat...
Organization Selection Service & Labels Provider · Organization Selection Screen
Define the abstract interface for OrgLabelsProvider including reactive label lookup, organization-scoped label maps, and...
Organization Selection Service & Labels Provider · Organization Selection Screen
Implement the loadOrganizations method in OrgSelectionService. Fetch the list of organizations the authenticated user be...
Organization Selection Service & Labels Provider · Organization Selection Screen
Implement selectOrganization to persist the user's chosen organization ID via the OrgPersistenceRepository (local storag...
Organization Selection Service & Labels Provider · Organization Selection Screen
Implement OrgLabelsProvider to fetch organization-specific label mappings from Supabase (or bundled config) for the sele...
Organization Selection Service & Labels Provider · Organization Selection Screen
After a successful selectOrganization call, trigger initialization of OrgLabelsProvider and any organization-specific co...
Organization Selection Service & Labels Provider · Organization Selection Screen
Create and register the Riverpod providers for both OrgSelectionService and OrgLabelsProvider in the app's provider scop...
Organization Selection Service & Labels Provider · Organization Selection Screen
On screen mount, read the persisted organization ID from OrgPersistenceRepository (via OrgSelectionService) and pre-sele...
Organization Selection Screen & Card UI · Organization Selection Screen
Write Flutter widget tests covering: default unselected render, selected visual state, tap callback invocation, semantic...
Organization Selection Screen & Card UI · Organization Selection Screen
Write Flutter integration tests covering: screen loads and displays org list, previously selected org is pre-highlighted...
Organization Selection Screen & Card UI · Organization Selection Screen
Define the OrgCard widget's public interface: the Organization data class (id, displayName, logoUrl, isSelected), the on...
Organization Selection Screen & Card UI · Organization Selection Screen
Build the stateless OrgCard Flutter widget that renders an organization logo (with fallback initials avatar), display na...
Organization Selection Screen & Card UI · Organization Selection Screen
Implement the visual selected state on OrgCard using a highlighted border or background tint derived from design tokens ...
Organization Selection Screen & Card UI · Organization Selection Screen
Wrap OrgCard in a Semantics widget that announces the organization name, the role label resolved via OrgLabelsProvider, ...
Organization Selection Screen & Card UI · Organization Selection Screen
Implement the onTap GestureDetector/InkWell on OrgCard that invokes the parent-supplied callback with the selected Organ...
Organization Selection Screen & Card UI · Organization Selection Screen
Create the OrgSelectionScreen stateful widget with a single-action screen layout: app name/logo at top, a scrollable Lis...
Organization Selection Screen & Card UI · Organization Selection Screen
When the user taps the primary CTA button, call OrgSelectionService.selectOrganization(orgId) to persist the selection, ...
Organization Selection Screen & Card UI · Organization Selection Screen
Add screen-level semantics: set the page heading with Semantics(header: true), ensure the OrgCard list has a semantic li...
Organization Selection Screen & Card UI · Organization Selection Screen
Connect OrgSelectionScreen to OrgSelectionService (via Riverpod provider) to fetch the list of available organizations o...
Organization Selection Screen & Card UI · Organization Selection Screen
Extend HierarchyCache to persist the serialized tree to local storage (SharedPreferences or Hive) so the hierarchy loads...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Extend ActiveChapterState BLoC to persist the selected chapter ID to flutter_secure_storage so it survives app restarts....
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Connect HierarchyCache invalidation hooks to all mutating operations in OrganizationUnitRepository and UnitAssignmentRep...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Write comprehensive flutter_test unit tests for OrganizationUnitRepository (CRUD, soft-delete, subtree RPC), UnitAssignm...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Write flutter_test BLoC tests for all ActiveChapterState transitions: initial state, SelectChapter emits ChapterSelected...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Create typed Dart model classes for OrganizationUnit and related types: OrganizationUnitType enum (national, region, cha...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Implement the OrganizationUnitRepository class that wraps Supabase client calls for: fetchUnit(id), fetchSubtree(unitId)...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Create typed Dart model classes for UnitAssignment including all junction table fields (id, userId, unitId, isPrimary, a...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Implement the UnitAssignmentRepository with methods: fetchAssignmentsForUser(userId), fetchAssignmentsForUnit(unitId), a...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Implement the HierarchyCache class using an in-memory map keyed by unit ID for O(1) node lookups, and a tree structure f...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Implement the ActiveChapterState BLoC/Cubit that holds the currently selected OrganizationUnit (chapter) for the session...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Design and implement the recursive adjacency-list database schema for the organization_units table in Supabase. Include ...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Create the user_unit_assignments junction table schema with columns for id, user_id, unit_id, is_primary, assigned_at, a...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Write and deploy Supabase PostgreSQL RPC functions for recursive hierarchy queries: get_subtree(unit_id) using a recursi...
Hierarchy Data Layer Foundation · Organizational Hierarchy & Structure Management
Enhance each HierarchyTreeView node to display the unit type label (e.g., Region, Chapter, Local) resolved via the Organ...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Wire each HierarchyTreeView node with an onTap handler that navigates to the HierarchyNodeEditor screen for that unit. P...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Wire HierarchyStructureValidator so it is callable directly from the admin portal UI layer without going through Hierarc...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Add methods to HierarchyService for computing the full ancestor chain (root to node) and full descendant subtree for any...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
After each successful mutation (create, update, delete, reparent), HierarchyService must emit a HierarchyChangedEvent vi...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Add orphan-detection validation to HierarchyStructureValidator: before a unit is deleted, check whether removing it woul...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Add two validation rules to HierarchyStructureValidator: (1) depth-limit enforcement that rejects assignments exceeding ...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Build the base Flutter HierarchyTreeView widget that accepts a list of HierarchyNode objects and renders them as a recur...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Add independent expand/collapse state per tree branch to HierarchyTreeView using an AnimatedContainer or ExpansionTile e...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Define the core Dart interfaces, data classes, and type definitions for the HierarchyService layer. This includes Organi...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Implement the read-side Supabase queries in HierarchyService: fetching a single unit by ID, listing all units under a pa...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Implement create, update, and delete operations for organization units in HierarchyService. Each mutation must call Hier...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Add cycle-prevention logic directly in HierarchyService to reject any reparent operation that would create a circular re...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Implement the cycle-detection validation rule inside HierarchyStructureValidator as a standalone, testable method that a...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Write Supabase migration SQL files that enable Row Level Security on all organization-unit-scoped tables (organization_u...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Write the role-differentiated RLS policies: coordinators may read and write all units within their chapter subtree; peer...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Apply all RLS migration scripts to the staging Supabase project, run the full role simulation test suite, then promote t...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Implement the server-side mechanism (Supabase Edge Function or database hook) that injects the authenticated user's orga...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Write automated tests that simulate multiple role scenarios (coordinator of chapter A trying to read chapter B data, pee...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Write Flutter integration tests and Dart unit tests covering the full hierarchy mutation flow: validator pre-check → Hie...
Core Hierarchy Services and Security Policies · Organizational Hierarchy & Structure Management
Produce developer documentation covering: the unit assignment constraint model (single primary, 5-chapter max, RLS scopi...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Write flutter_test widget tests for the Hierarchy Node Editor covering: form field validation error display, cycle preve...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the BLoC/Cubit managing the currently active chapter context for a session. Expose streams for the selected organi...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Connect the Hierarchy Node Editor form to backend services: pre-save validation via Hierarchy Structure Validator (cycle...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the in-memory and persistent caching layer for hierarchy tree data. Implement cache invalidation strategies, TTL m...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement the full-screen form widget for creating and editing individual hierarchy nodes. Include fields for node name,...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the validation service that enforces structural rules on the hierarchy tree: detect and prevent cycle creation whe...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Deploy Supabase edge functions implementing server-side aggregation RPCs for the heaviest subtree rollups. Move recursiv...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement cache invalidation hooks that trigger when new activity records are written. When an activity is registered, i...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Write comprehensive integration tests for the Unit Assignment Service covering: single-primary-per-organization constrai...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Write performance and correctness tests for the aggregation rollup engine simulating NHF's full 1,400-chapter tree. Vali...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Extend the Hierarchy Aggregation Service to produce Bufdir-compatible breakdown reports: activity counts segmented by un...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the domain service encapsulating all hierarchy tree operations: create node, move node, delete node with cascade c...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement the service managing user-to-organizational-unit assignments. Enforce the single-primary-unit-per-organization...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the core rollup engine that aggregates activity counts upward from leaf chapter nodes through regions to national ...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement the Supabase-backed repository for the junction table linking users to organizational units. Provide create, r...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement the Supabase repository for organizational units supporting hierarchical queries: fetch children of a node, fe...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Implement and configure Supabase Row Level Security policies governing access to unit_assignments and organization_units...
Unit Assignment and Hierarchy Aggregation · Organizational Hierarchy & Structure Management
Build the in-memory and persistent caching layer for organization unit hierarchy data. Implement TTL-based invalidation,...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Build the BLoC/Cubit for managing the currently active chapter in user session context. Persist selected chapter to secu...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement chapter switching persistence using secure local storage and downstream broadcast mechanism. When user switche...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the Slack-style bottom sheet UI for chapter switching. Display the user's available chapters with their curren...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the embedded admin UI widget showing a user's current unit assignments. Display assignment list with unit name...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the interactive tree view widget for displaying the organization hierarchy. Support expand/collapse nodes, dis...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the modal/screen for creating and editing hierarchy nodes. Include fields for node name, type (chapter/region/...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Build the infrastructure component that validates hierarchy tree operations before persistence. Enforce constraints: no ...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement widget and integration tests for the complete chapter switching flow. Test bottom sheet display with correct c...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement end-to-end and widget tests for the HierarchyAdminPortalScreen and UnitAssignmentPanel. Cover: add/remove/move...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Build the high-complexity service layer that encapsulates all hierarchy business logic. Provide methods for tree travers...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Build the service layer for user-to-unit assignment management. Expose methods for listing a user's assignments, adding/...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the central access scope computation engine. Given a user and their unit assignments, compute the complete set...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the Supabase-backed repository for unit assignment CRUD operations. Include methods for fetching assignments b...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the high-complexity Supabase repository for organization unit data. Support hierarchical queries (ancestors, d...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Build the top-level HierarchyAdminPortalScreen combining all hierarchy management UI elements. Integrate the HierarchyTr...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement the infrastructure layer that manages Supabase Row Level Security policy configuration and JWT claims injectio...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Wire the AccessScopeService to inject computed unit scope into Supabase JWT claims. Implement claim refresh on assignmen...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Implement comprehensive unit tests for the AccessScopeService. Cover scope computation for all role types (coordinator s...
Admin Portal, Access Scoping, and Chapter Switching · Organizational Hierarchy & Structure Management
Write technical documentation covering the duplicate detection architecture, fingerprint algorithm, configurable thresho...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Implement a Supabase Edge Function that runs on a configurable schedule to perform batch duplicate detection across exis...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Implement the Dart data model classes for SuspectedDuplicate, DuplicateDetectionConfig, and ActivityFingerprint. Create ...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Implement the DuplicateActivityDetectorService in Dart that wraps the repository and provides business logic: loading pe...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Define the data structure for activity fingerprints used in duplicate detection: participant ID, activity date, activity...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Create the Supabase database table for per-organization duplicate detection configuration, storing time-window threshold...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Create the Supabase database table for storing flagged duplicate activity pairs, including fields for both activity IDs,...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Implement a PostgreSQL function that compares two activity records using the fingerprint fields: same participant, activ...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Implement a SQL query or Postgres function that retrieves activities submitted by coordinators at different unit levels ...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Create a Supabase database trigger that fires after INSERT on the activities table. The trigger invokes the fingerprint ...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Configure Row Level Security policies on the suspected_duplicates table so that admin users can read and update all reco...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Write integration tests covering the full duplicate detection pipeline: trigger fires on new activity insert, cross-hier...
Cross-Chapter Duplicate Activity Detection · Organizational Hierarchy & Structure Management
Add exponential backoff retry logic to the FCM dispatcher for transient failures (network timeout, FCM 500 errors). Impl...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Write unit tests for the pause status record repository covering: successful record fetch, coordinator resolution with s...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Write unit tests for the FCM dispatcher covering: successful push delivery, in-app record creation, retry exhaustion pat...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Write unit tests for the payload builder covering: coordinator payload content and character limits, peer mentor confirm...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Write integration tests that exercise the full data-and-dispatch foundation stack end-to-end: fetch pause record and coo...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Define Dart data models and repository interfaces for pause status records, including PauseStatusRecord, CoordinatorRela...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Build the coordinator resolution logic within the repository that traverses the org membership table to find the assigne...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Implement the in-app notification dispatch channel that writes notification records to the Supabase notifications table,...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Define Dart payload models for coordinator and peer mentor pause notification recipients. Establish character constraint...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Implement the payload builder method that composes a localised coordinator notification for a peer mentor pause event. I...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Implement the payload builder method that composes a localised confirmation notification for the peer mentor who initiat...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Implement the Supabase-backed data access methods on the pause status record repository: fetch active pause records by m...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Define the abstract FCM notification dispatcher interface covering push delivery and in-app delivery channels. Establish...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Implement the FCM push channel dispatch method that sends a formatted notification payload to a resolved FCM token. Incl...
Pause Status Notifications — Data & Dispatch Foundation · Pause Status Change Notifications
Write unit tests for payload validation, transition detection, coordinator resolution, and payload building. Write integ...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Define TypeScript interfaces and Zod validation schemas for the Supabase database webhook payload received by the pause ...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Implement the payload validation layer inside the webhook handler Edge Function. Parse and validate the incoming Supabas...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Implement the logic that determines transition direction from the old and new status column values. Detect active→paused...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Define the TypeScript interface for the Pause Notification Orchestrator service including input types (mentor ID, transi...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Implement the coordinator resolution step within the Pause Notification Orchestrator. Query the database to find the coo...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Implement the payload construction step in the orchestrator that builds notification payloads for both recipients: the c...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Wire the in-app notification channel into the orchestrator alongside the FCM push channel. Insert notification records i...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Deploy the pause status webhook Edge Function to the Supabase project and configure the database webhook trigger on the ...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Create the Supabase Edge Function file structure for the pause status webhook handler. Set up the Deno entry point, conf...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Wire the FCM notification dispatcher into the orchestrator to send push notifications for both pause and resume events. ...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Wire the pause status webhook handler to invoke the Pause Notification Orchestrator after successful payload validation ...
Pause Status Notifications — Orchestration & Webhook Pipeline · Pause Status Change Notifications
Implement the tap handler on the quick-action link in PauseNotificationCard so it navigates to the peer mentor's profile...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Write Flutter widget tests for PauseNotificationCard and PeerMentorConfirmationBanner. For the card: verify mentor name,...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Define the Dart data model for the pause notification card, including fields for peer mentor name, effective date, optio...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Build the Flutter widget that renders in the coordinator's in-app notification feed. Display peer mentor name as the hea...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Define the Dart data model for the peer mentor confirmation banner, capturing the event type (pause activated or deactiv...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Build the Flutter inline toast/banner widget shown to peer mentors on pause activation and deactivation. Display a confi...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Register the PauseNotificationCard as a renderable notification type within the existing notification feed infrastructur...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Integrate PeerMentorConfirmationBanner with the notification trigger pipeline so it surfaces whenever the peer mentor re...
Pause Status Notifications — In-App UI Components · Pause Status Change Notifications
Write exhaustive unit tests for CertificationStatusService covering: expiry date exactly today (expired), expiry exactly...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Define the MentorStatus enum with four values: active, expiring_soon, expired, and paused. Define the CertificationStatu...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Implement the CertificationStatusService as a pure Dart class (no Flutter dependencies, no network calls). The service a...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Define the semantic color token set as a Flutter ThemeExtension subclass. Include tokens for certification status states...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Extend the ThemeExtension with a full typography token set (display, headline, body, label, caption scale with font size...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Register the completed ThemeExtension (color, typography, spacing, radius tokens) into the app's ThemeData for both ligh...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Create a Riverpod Provider that exposes a single shared SupabaseClient instance for use across all repositories and data...
Foundation Infrastructure & Certification Logic · Peer Mentor Profile & Status Screen
Implement fetchMentorsByOrganization(String organizationId, {MentorStatus? statusFilter}) in PeerMentorRepository. The q...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement fetchActivityLogs(String mentorId, {DateRange? range, int? limit}) in MentorActivityLogRepository for retrievi...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Extend AssignmentHistoryRepository with fetchOpenAssignments(String mentorId) and fetchAssignmentsByStatus(String mentor...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Write unit tests for all PeerMentorRepository methods using mocked Supabase client. Tests must cover: successful profile...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Write unit tests for CertificationRecordRepository and MentorActivityLogRepository using mocked Supabase clients. Certif...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Write unit tests for AssignmentHistoryRepository covering: empty list return for NHF and HLF org IDs, successful fetch f...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Create the four core Dart model classes: PeerMentorProfile, CertificationRecord, MentorActivitySummary, and AssignedCont...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement the fetchPeerMentorProfile(String mentorId) method in PeerMentorRepository using the Supabase client provider....
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement updateMentorStatus(String mentorId, MentorStatus status, {DateTime? expectedReturnDate}) in PeerMentorReposito...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement fetchCertificationHistory(String mentorId, String organizationId) in CertificationRecordRepository. The method...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement fetchActivitySummary(String mentorId, ActivityPeriod period) in MentorActivityLogRepository. The method must q...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Implement fetchAssignmentHistory(String mentorId, String organizationId) in AssignmentHistoryRepository. The method MUST...
Data Repositories & Supabase Query Layer · Peer Mentor Profile & Status Screen
Create the OrgLabelsProvider as a Riverpod StreamProvider that reactively streams org-specific terminology strings from ...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Extend OrgLabelsProvider to supply hardcoded fallback terminology strings when the Supabase stream is unavailable or ret...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Ensure CertificationAlertBanner meets WCAG 2.2 AA: verify banner background-to-text contrast ratio, add Semantics node w...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Build PeerMentorProfileHeader with a circular avatar that loads from a remote URL and falls back to generated initials i...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Add merged Semantics to PeerMentorProfileHeader so VoiceOver reads the header as a single announcement: name, role, and ...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Build AssignedContactsList as a vertically scrollable ListView.builder section displaying contact rows. Each row must sh...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Extend AssignedContactsList rows to display a Blindeforbundet-specific badge showing the open assignment count and deadl...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Build MentorActivitySummaryPanel as an aggregated stats card widget displaying total activity count, activity type break...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Make MentorActivitySummaryPanel tappable: wrapping the card in an InkWell that calls an onTap callback to navigate to th...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Write flutter_test widget tests for all six components in this epic: OrgLabelsProvider (stream emission, fallback), Cert...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Create golden screenshot tests for CertificationStatusBadge (all states), PeerMentorProfileHeader (with and without avat...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Build the CertificationStatusBadge as a pill-shaped Flutter widget that derives its visual state (valid, expiring-soon, ...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Wrap CertificationStatusBadge in Flutter Semantics with a human-readable label computed from the expiry state (e.g., 'Ce...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Build the CertificationAlertBanner as a conditional banner widget that is only rendered for HLF-org contexts. The banner...
UI Components & Organization Label Integration · Peer Mentor Profile & Status Screen
Extend PeerMentorAggregationService to apply organization-specific filtering after merging. Read org context from OrgLab...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Configure PeerMentorDetailBLoC to automatically dispatch LoadPeerMentorDetail when the screen mounts. Use BlocProvider a...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Create the top-level PeerMentorDetailScreenWidget Flutter screen with a scrollable layout using CustomScrollView with Sl...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Replace placeholder sections in PeerMentorDetailScreenWidget with actual sub-component widgets: PeerMentorProfileHeader,...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Add RefreshIndicator wrapping the scrollable content to dispatch RefreshPeerMentorDetail on pull-to-refresh. Implement o...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Audit and annotate the entire PeerMentorDetailScreenWidget and all its assembled sub-components with Flutter Semantics w...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Register the PeerMentorDetailScreen as a nested route within the app's StatefulShellRoute configuration using GoRouter. ...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Write integration and unit tests covering: PeerMentorAggregationService parallel fetch with mocked repositories includin...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Create the PeerMentorDetailModel Dart class that merges data from all four repositories (peer mentor profile, certificat...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Implement PeerMentorAggregationService using Future.wait to fetch data from PeerMentorRepository, CertificationRecordRep...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Define the complete set of BLoC events (LoadPeerMentorDetail, RefreshPeerMentorDetail) and states (PeerMentorDetailIniti...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Implement the PeerMentorDetailBLoC event-driven state machine using flutter_bloc. On LoadPeerMentorDetail, emit loading ...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Connect PeerMentorDetailScreenWidget to PeerMentorDetailBLoC using BlocBuilder. Render a centered CircularProgressIndica...
BLoC State Management, Aggregation Service & Screen Assembly · Peer Mentor Profile & Status Screen
Write Flutter widget tests for ExpectedReturnDatePicker, CertificationExpiryWarningBanner, and PauseStatusIndicator. Cov...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the ExpectedReturnDatePicker Flutter widget as a reusable date input control. Apply design token styling, enfo...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the CertificationExpiryWarningBanner Flutter widget that displays a contextual warning when a peer mentor's ce...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the PauseStatusIndicator Flutter widget that visually represents a peer mentor's current pause state (active, ...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Create a Supabase Edge Function that acts as the nightly job scheduler entry point. Configure pg_cron to trigger the fun...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the DynamicsPortalClient Dart class for communicating with HLF's Dynamics 365 portal REST API. Include authent...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Write unit tests for PeerMentorStatusRepository and CertificationStatusRepository covering CRUD operations, RPC call con...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the CertificationStatusRepository Dart class with methods to query, insert, update, and stream certification r...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Implement the PeerMentorStatusRepository Dart class with methods for reading current pause status, writing status transi...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Create the cert_expiry_reminders Supabase database table with all required columns, indexes, and constraints. Define the...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Define and apply Row Level Security policies on the cert_expiry_reminders table to enforce coordinator and admin access ...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Create the peer_mentor_status and peer_mentor_status_log Supabase database tables. Define columns for pause state, reaso...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Define RLS policies on peer_mentor_status and peer_mentor_status_log tables. Implement RPC functions for atomic status t...
Data Layer & Infrastructure Foundation · Peer Mentor Pause & Status Management
Extend PauseNotificationService to persist in-app notifications to the notifications table when a pause or reactivation ...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Create a reusable widget that visually displays a peer mentor's current pause status. Support three states: active (gree...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Implement a date picker widget scoped to future dates for optional return date selection during pause activation. Use Fl...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Extend the PauseActivationScreen to handle the reactivation journey when the current mentor status is paused. Show a rea...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Integrate the CertificationExpiryWarningBanner widget into the CoordinatorPauseRosterScreen. For each mentor with an exp...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Integrate FCM push notification dispatch into PauseNotificationService for coordinator-targeted push notifications on pa...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Write comprehensive tests for PauseManagementService covering all valid transitions (active→paused, paused→active, any→e...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Implement an end-to-end integration test covering the complete pause and reactivation journey: peer mentor activates pau...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Build the data access layer for pause status persistence. Implement methods: getPauseStatus(mentorId), savePauseRecord(r...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Build the notification dispatch service that resolves coordinator assignments for a given peer mentor and dispatches bot...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Build the core business logic service enforcing the pause state machine with transitions: active→paused (via mentor self...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Create the database schema for peer mentor pause status tracking, including the pause_records table with columns for men...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Implement the peer mentor-facing pause activation screen. Display current status, a confirmation prompt explaining impli...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Implement the coordinator-facing pause roster screen that displays all assigned peer mentors with inline pause status an...
Core Pause Workflows — Business Logic, UI & Notifications · Peer Mentor Pause & Status Management
Instrument the CertificationExpiryChecker to write a structured audit log entry for every automated status transition an...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Add robust retry logic to HLFWebsiteSyncService with configurable max attempts and exponential backoff. On final retry e...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Instrument HLFWebsiteSyncService to write a structured audit log entry for every sync attempt, including mentor ID, sync...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Write integration tests covering the full CertificationExpiryChecker pipeline: seed test mentors with certifications at ...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Write integration tests for HLFWebsiteSyncService covering: mentor paused triggers removal from Dynamics portal listing;...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Implement the core scan loop inside CertificationExpiryChecker. For each certification that has passed its expiry date, ...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Add reminder notification dispatch logic to the CertificationExpiryChecker for the 30-day, 14-day, and 7-day warning thr...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Wire HLFWebsiteSyncService to listen for mentor status change events (paused, expired_cert, reinstated). On each relevan...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Design and implement the data access layer for the CertificationExpiryChecker service. Create query methods on the certi...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Wire the CertificationExpiryChecker into the nightly job scheduler (394-nightly-scheduler). Configure the cron trigger t...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Build the HLFWebsiteSyncService integration layer that calls the Dynamics portal API (via 395-dynamics-portal-client bui...
Automated Certification Expiry & HLF Website Sync · Peer Mentor Pause & Status Management
Write developer documentation for MentorStatusRepository public interface and CoordinatorNotificationService public inte...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Implement CoordinatorNotificationService.dispatchPushNotification(mentorId, event, payload) that resolves coordinator re...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Implement CoordinatorNotificationService.dispatchInAppNotification(mentorId, event, payload) that resolves coordinator r...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Write Flutter unit tests for MentorStatusRepository covering all read/write paths with mocked Supabase client, and integ...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Implement the Dart MentorStatusRepository class with read operations: fetchMentorStatus(mentorId), fetchActiveMentorsFor...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Add write operations to MentorStatusRepository: pauseMentor(mentorId, reason, pauseAt), reactivateMentor(mentorId), and ...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Implement the coordinator resolution logic in CoordinatorNotificationService: given a mentor_id, query the chapter membe...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Create Supabase migration to add status enum (active, paused, inactive), pause_at timestamp, and pause_reason text colum...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Create Supabase migration for the peer_mentor_status_history table capturing mentor_id, previous_status, new_status, cha...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Write and review Supabase Row Level Security policies for the new status, pause_at, and pause_reason columns on peer_men...
Peer Mentor Pause & Reactivation — Data & Notification Foundation · Peer Mentor Pause & Reactivation
Add a getMentorsByStatus(status: MentorStatus, chapterId?: string) method to MentorStatusService that returns the list o...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Extend MentorStatusService to call CoordinatorNotificationService after every successful status transition. For each tra...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Add the coordinator notification phase to CertificationExpiryJob. After all auto-pauses have been applied, the job must ...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Create a comprehensive unit test suite for MentorStatusService covering all valid transitions (active→paused, paused→act...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Write integration tests for CertificationExpiryJob covering: job correctly identifies only expired-certificate active HL...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Define the TypeScript/Dart interfaces and enums for the mentor status state machine. This includes the MentorStatus enum...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Build the MentorStatusService class with methods pauseMentor(mentorId, reason, actorId), reactivateMentor(mentorId, reas...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Implement the core processing loop in CertificationExpiryJob that iterates over expired-certification mentors and for ea...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Implement the update_mentor_status PostgreSQL function as a Supabase RPC. The function must validate the requested trans...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Implement a PostgreSQL trigger function on the peer_mentors table that enforces the state machine at the database level....
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Implement the database query within CertificationExpiryJob that retrieves all HLF peer mentors whose certification_expir...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Scaffold the CertificationExpiryJob as a Supabase Edge Function (Deno/TypeScript). Set up the function entry point, envi...
Peer Mentor Pause & Reactivation — Core Business Logic & Scheduled Jobs · Peer Mentor Pause & Reactivation
Build the PauseConfirmationDialog modal widget that explains pause consequences to the peer mentor, collects an optional...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Annotate PauseConfirmationDialog with Flutter Semantics widgets: role=dialog, labelled-by title, described-by consequenc...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Build the PauseStatusBanner widget for coordinator-facing mentor list and detail views. It must display paused status, t...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Wrap PauseStatusBanner in appropriate Semantics nodes so screen readers announce paused status, timestamp, and reason as...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Build the PauseReactivateToggle widget for the peer mentor profile screen. It renders an accessible status badge (Active...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Annotate PauseReactivateToggle with Semantics: the status badge must have role=status and announce changes via a live re...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Define the MentorStatusEvent sealed class (PauseMentorEvent, ReactivateMentorEvent) and MentorStatusState sealed class (...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Implement the BLoC event handlers for PauseMentorEvent and ReactivateMentorEvent. Each handler emits Loading, calls Ment...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Wire PauseReactivateToggle to MentorStatusBLoC using BlocBuilder and BlocListener. The toggle renders based on current s...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Wire PauseStatusBanner on coordinator mentor detail and list views to MentorStatusBLoC state. The banner renders only wh...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Write bloc_test unit tests for MentorStatusBLoC covering: successful pause flow emitting Loading then Success, successfu...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Write flutter_test widget tests for PauseConfirmationDialog (renders consequence text, emits confirmed/cancelled, reason...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Run a WCAG 2.2 AA audit across all four components using flutter_accessibility_lint and manual TalkBack/VoiceOver walkth...
Peer Mentor Pause & Reactivation — UI Components & BLoC State Management · Peer Mentor Pause & Reactivation
Implement the SummaryCacheRepository class in Dart that manages read and write operations against the local SQLite cache...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Implement the cache synchronisation logic that coordinates between SummaryPeriodRepository (remote) and SummaryCacheRepo...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Design and create the local SQLite table (via drift or sqflite) that mirrors the structure of periodic_summaries for off...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Write comprehensive flutter_test unit tests covering all methods of PeriodCalculatorService. Include cases for: week bou...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Implement the PeriodCalculatorService in Dart that computes the exact start and end timestamps for weekly, monthly, and ...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Implement the ActivityAggregationRepository class in Dart using the Supabase client. It must call the aggregation RPCs d...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Implement the SummaryPeriodRepository class in Dart that reads from and writes to the periodic_summaries Supabase table ...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Create and apply a PostgreSQL migration that adds the periodic_summaries table with columns for organisation_id, period_...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Write the core Supabase RPC functions (PostgreSQL plpgsql) that aggregate activity records into session counts and total...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Define and apply Supabase Row Level Security policies on the periodic_summaries table ensuring that peer mentors can onl...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Implement the OrgDataIsolationGuard Dart class that acts as a cross-cutting validation layer. It must verify that any re...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Write integration tests using a local Supabase test instance that seed two organisations with overlapping activity data,...
Periodic Summaries Data Foundation & Period Infrastructure · Periodic Activity Summaries
Write developer-facing documentation covering the summary generation pipeline architecture, scheduler cron configuration...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Build the service that computes half-year and quarterly period boundaries from a reference date, identifies the current ...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Add idempotency control to the summary generation service so that re-triggered runs for an already-completed period are ...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Implement configurable threshold management within the outlier detection service, allowing per-organisation and global d...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Extend the push notification dispatcher with summary-specific payload construction logic. Must build personalised notifi...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Implement end-to-end integration tests covering the full summary generation pipeline: period boundary detection, activit...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Implement the push notification dispatcher service responsible for constructing and dispatching personalised digest noti...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Build the service that classifies peer mentors as outliers based on configurable thresholds for activity volume. Must su...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Implement the central orchestration service that drives an organisation-scoped summary generation run: fetches aggregate...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Build the data access layer for summary periods, including CRUD operations for period metadata, period boundary calculat...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Create the caching layer for generated summaries, supporting storage and retrieval of pre-computed summary data with cac...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Implement the repository responsible for querying and aggregating raw activity records across a given period and organis...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Create the infrastructure guard that enforces strict organisation-scoped data access during summary generation runs. Mus...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Create the Supabase Edge Function that acts as the cron-triggered scheduler for summary generation. Must detect half-yea...
Periodic Summaries Core Logic — Generation, Scheduling, Outlier Detection & Notifications · Periodic Activity Summaries
Build the reusable PeriodComparisonWidget Flutter widget that displays side-by-side or stacked period data with directio...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Enhance the PeriodComparisonWidget with animated directional delta indicators. Implement color-coded trend arrows (posit...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Add pull-to-refresh interaction to the PeriodicSummaryCard so peer mentors can trigger a data reload. Implement card dis...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Wire up the PeriodicSummaryCard tap interaction to navigate to the detailed mentor summary or profile screen. Pass the r...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Integrate the outlier detection output into the CoordinatorTeamSummaryView to visually highlight mentors who are underpe...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Integrate the reusable PeriodComparisonWidget into both the PeriodicSummaryCard and the coordinator team mentor detail v...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Audit and remediate all three widgets (PeriodicSummaryCard, CoordinatorTeamSummaryView, PeriodComparisonWidget) for WCAG...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Write integration and golden tests for all three widgets. Integration tests must cover: card dismissal persists state, p...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Create the BLoC state management layer for the periodic-summary-card widget. Define PeriodicSummaryCardState (loading, l...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Implement the visual layout of the PeriodicSummaryCard widget shown on the peer mentor home screen during active summary...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Create the BLoC for the CoordinatorTeamSummaryView. Define states (loading, loaded with mentor list, error) and events (...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Implement the CoordinatorTeamSummaryView screen listing all peer mentors with their period summary stats. Each row must ...
Periodic Summaries User Interface — Digest Cards, Coordinator View & Comparison Widget · Periodic Activity Summaries
Implement the `BulkParticipant` Dart class representing a single peer mentor selected for bulk registration. Fields: pee...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement the `DuplicateConflict` Dart class capturing a detected duplicate activity. Fields: conflictingActivityId, att...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement the `BulkRegistrationRequest` Dart class that wraps a list of `BulkParticipant` and a shared `ProxyActivityRec...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement `BulkRegistrationDefaultsProvider` as a Riverpod StateNotifierProvider that pre-populates form defaults for bu...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Write comprehensive unit tests for all four Dart model classes (ProxyActivityRecord, BulkParticipant, DuplicateConflict,...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Write integration tests for `ProxyActivityRepository` against a local Supabase test instance. Verify: single proxy inser...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement the `ProxyActivityRecord` Dart class with fields: id, registeredBy (coordinator user id), attributedTo (peer m...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement `ProxyActivityRepository` backed by Supabase. Expose: `insertProxyActivity(ProxyActivityRecord)`, `bulkInsert(...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Write and apply a Supabase migration that adds `registered_by` (uuid, NOT NULL, references auth.users) and `attributed_t...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement a PostgreSQL function `bulk_register_activities(records jsonb[])` that inserts multiple activity rows in a sin...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Define a Supabase Row Level Security policy on the activities table that permits INSERT only when the caller holds the c...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Implement `CoordinatorRoleGuard` as a Riverpod provider that reads the current user's role from the session/role state a...
Proxy Registration Foundation: Data Models, Repository & Role Guard · Proxy & Bulk Activity Registration
Add query helper methods to activity-attribution-service that enable audit report generation distinguishing proxy-entere...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Write technical documentation for both domain services covering: method signatures, expected inputs and outputs, the ful...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Define the abstract service interfaces and data transfer objects for both domain services. This includes the DuplicateCh...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Implement the core query method on proxy-duplicate-detection-service that accepts a composite key (peer_mentor_id, date,...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Extend proxy-duplicate-detection-service with a batch variant that accepts a list of composite keys and returns a map of...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Implement the core method on activity-attribution-service that takes a proxy activity record and enforces correct field ...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Extend activity-attribution-service with a batch method that applies attribution enforcement across a list of proxy acti...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Wire proxy-duplicate-detection-service and activity-attribution-service together so that the attribution service invokes...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Write comprehensive unit tests for proxy-duplicate-detection-service covering: detection of a single conflict, detection...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Write unit tests for activity-attribution-service covering: single record attribution success, missing registered_by rai...
Core Business Logic: Duplicate Detection & Activity Attribution Services · Proxy & Bulk Activity Registration
Implement the typed event emission layer in ProxyRegistrationService so that on success it emits ProxyRegistrationSuccee...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Write comprehensive unit tests for ProxyRegistrationService covering: authorization rejection path (non-coordinator prin...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Write comprehensive unit tests for BulkRegistrationService covering: all-clean participants path (batch insert called on...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Define all strongly-typed Dart classes for ProxyRegistrationRequest, ProxyRegistrationResult, and the discriminated unio...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Wire the CoordinatorRoleGuard into ProxyRegistrationService so that any attempt to invoke proxy registration by a non-co...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Call ProxyDuplicateDetectionService inside ProxyRegistrationService prior to any write operation. If a duplicate is dete...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
After a clean duplicate check, invoke ActivityAttributionService to attach coordinator identity as the proxy author to t...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Define all Dart types for BulkRegistrationRequest (list of participant entries with shared activity data), BulkRegistrat...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
For each participant entry in BulkRegistrationRequest, call ProxyDuplicateDetectionService with the participant-specific...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
After the duplicate detection loop, if any conflicts exist, return a BulkRegistrationConflictsDetected result containing...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
For the approved participants, apply ActivityAttributionService to each record, then submit the full set as a single ato...
Registration Orchestration: Proxy & Bulk Registration Services · Proxy & Bulk Activity Registration
Add a swipe-to-dismiss or explicit remove icon button to each participant row in BulkParticipantList. Trigger the onRemo...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the base BulkParticipantList widget as a scrollable Flutter ListView with a typed participant model, empty-state ...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Extend each row in BulkParticipantList to conditionally display a conflict badge when a duplicate activity is detected f...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the base ProxyPeerMentorSelector widget with a TextField-based typeahead input, dropdown result overlay, and load...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Wire the ProxyPeerMentorSelector's text input to a debounced search query that fetches peer mentors filtered to the coor...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Extend ProxyPeerMentorSelector to support a mode prop switching between single-select (radio-style, used in proxy-regist...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the ProxyActivityForm widget containing the standard activity fields (type, date, duration, notes). The form shou...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Implement an inline attribution banner inside ProxyActivityForm that appears when the form is used in proxy context. The...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the ProxyRegistrationScreen route and apply the coordinator role guard at the route level. Render a gated no-acce...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Embed the ProxyPeerMentorSelector (single-select mode) into ProxyRegistrationScreen. Dispatch SelectMentor events to the...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Embed ProxyActivityForm into ProxyRegistrationScreen and wire the submit button to dispatch a SubmitProxyActivity event ...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the BulkRegistrationScreen route with coordinator role guard. Render the screen scaffold (AppBar, two-section lay...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Embed ProxyPeerMentorSelector in multi-select mode into BulkRegistrationScreen. As mentors are selected, add them to the...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Connect per-participant conflict state from the BLoC to BulkParticipantList conflict badges in BulkRegistrationScreen. I...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Create the DuplicateWarningDialog as a Flutter modal (AlertDialog or custom BottomSheet) with a defined layout container...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Build the two-column conflict comparison layout inside DuplicateWarningDialog showing the incoming activity alongside th...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Implement Cancel (dismiss dialog, return to form) and Override (confirm submission despite conflict) action buttons insi...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
Build ProxyRegistrationBloc using the flutter_bloc package to manage all proxy and bulk registration states: initial loa...
User Interface & State Management: Screens, Widgets & BLoC · Proxy & Bulk Activity Registration
In NotificationPreferencesRepository, implement initializeDefaultPreferences(userId, orgId) that checks whether a prefer...
Notification Infrastructure Foundation · Push Notification Delivery
Build the pre-permission rationale dialog shown before the OS permission prompt on both iOS and Android. The dialog must...
Notification Infrastructure Foundation · Push Notification Delivery
Set up flutter_local_notifications with named Android notification channels: activity_reminders (importance: high, sound...
Notification Infrastructure Foundation · Push Notification Delivery
Write unit tests for NotificationPreferencesRepository (CRUD, default init, RLS edge cases), FCMTokenManager (registrati...
Notification Infrastructure Foundation · Push Notification Delivery
Build the NotificationPreferencesRepository Dart class with methods: getPreferences(userId), updatePreference(userId, ca...
Notification Infrastructure Foundation · Push Notification Delivery
Build the NotificationRepository Dart class with methods: getNotifications(userId, {limit, offset}), markAsRead(notifica...
Notification Infrastructure Foundation · Push Notification Delivery
In the FCMTokenManager, implement registerTokenOnSignIn(userId) that retrieves the current FCM token via FirebaseMessagi...
Notification Infrastructure Foundation · Push Notification Delivery
In FCMTokenManager, implement onTokenRefresh listener via FirebaseMessaging.instance.onTokenRefresh that updates the tok...
Notification Infrastructure Foundation · Push Notification Delivery
Define and migrate the notification_preferences table in Supabase with columns for user_id, org_id, category (activity_r...
Notification Infrastructure Foundation · Push Notification Delivery
Define and migrate the fcm_tokens table in Supabase with columns for user_id, token (text), platform (ios/android), devi...
Notification Infrastructure Foundation · Push Notification Delivery
Write and apply Row Level Security policies for both notification_preferences and fcm_tokens tables. Users may only read...
Notification Infrastructure Foundation · Push Notification Delivery
In NotificationPermissionManager, implement requestPermission() for iOS using firebase_messaging's requestPermission() w...
Notification Infrastructure Foundation · Push Notification Delivery
In NotificationPermissionManager, implement Android 13+ POST_NOTIFICATIONS permission request using permission_handler p...
Notification Infrastructure Foundation · Push Notification Delivery
Integrate NotificationPermissionManager with FCMTokenManager so that granting permission automatically triggers FCM toke...
Notification Infrastructure Foundation · Push Notification Delivery
Produce developer documentation covering the end-to-end notification delivery architecture: FCM token lifecycle, trigger...
Push Notification Delivery Engine · Push Notification Delivery
Create the NotificationPermissionManager service that requests iOS/Android notification permissions at first app launch,...
Push Notification Delivery Engine · Push Notification Delivery
Extend NotificationTriggerService to query notification_preferences before each FCM dispatch. If a user has opted out of...
Push Notification Delivery Engine · Push Notification Delivery
Extend PushNotificationService to persist each received notification (foreground, background, and terminated) to the Not...
Push Notification Delivery Engine · Push Notification Delivery
Implement NotificationAccessibilityConfiguration that maps notification categories to accessible semantic labels, provid...
Push Notification Delivery Engine · Push Notification Delivery
Write unit tests for NotificationDeepLinkHandler covering: valid payload resolves correct go_router route, missing resou...
Push Notification Delivery Engine · Push Notification Delivery
Build the NotificationDeepLinkHandler service that parses FCM payload data fields to resolve a go_router route path, val...
Push Notification Delivery Engine · Push Notification Delivery
Create the NotificationTriggerService Supabase Edge Function that listens to database change events (INSERT on assignmen...
Push Notification Delivery Engine · Push Notification Delivery
Extend NotificationTriggerService to build role-differentiated FCM payloads: peer mentor notifications include their spe...
Push Notification Delivery Engine · Push Notification Delivery
Create the NotificationPreferencesRepository data layer that reads and writes per-user per-category notification opt-in/...
Push Notification Delivery Engine · Push Notification Delivery
Create the NotificationRepository data layer that stores received notification records in Supabase with fields for notif...
Push Notification Delivery Engine · Push Notification Delivery
Create the PushNotificationService BLoC skeleton that initializes firebase_messaging and flutter_local_notifications on ...
Push Notification Delivery Engine · Push Notification Delivery
Extend PushNotificationService to display local notifications when the app is in the foreground using flutter_local_noti...
Push Notification Delivery Engine · Push Notification Delivery
Extend NotificationDeepLinkHandler to handle cold-start navigation where the app was terminated when the user tapped the...
Push Notification Delivery Engine · Push Notification Delivery
Create the FCMTokenManager infrastructure service that retrieves the device FCM registration token via firebase_messagin...
Push Notification Delivery Engine · Push Notification Delivery
Write integration tests covering the full notification pipeline: FCM token registration, trigger service dispatch for ne...
Push Notification Delivery Engine · Push Notification Delivery
Set up the NotificationAccessibilityConfig infrastructure layer that defines merged VoiceOver and TalkBack semantic labe...
Notification Centre UI and User Controls · Push Notification Delivery
Create the NotificationPermissionManager service that requests OS-level push notification permission on first use, reads...
Notification Centre UI and User Controls · Push Notification Delivery
Build the NotificationDeepLinkHandler service that parses FCM payload metadata to extract deep-link targets (activity de...
Notification Centre UI and User Controls · Push Notification Delivery
Create the NotificationTriggerService that reads user preferences from NotificationPreferencesRepository and FCM token f...
Notification Centre UI and User Controls · Push Notification Delivery
Create the NotificationPreferencesRepository data layer that persists per-category notification opt-in/opt-out preferenc...
Notification Centre UI and User Controls · Push Notification Delivery
Build the NotificationRepository data layer that fetches paginated notification history from Supabase, supports mark-as-...
Notification Centre UI and User Controls · Push Notification Delivery
Implement the NotificationListItemWidget as a stateless Flutter widget displaying notification icon, title, body preview...
Notification Centre UI and User Controls · Push Notification Delivery
Implement the NotificationSettingsScreen displaying per-category toggle switches (activity reminders, certification expi...
Notification Centre UI and User Controls · Push Notification Delivery
Implement the NotificationBadgeWidget as a small overlay badge on the bottom navigation Notifications tab that subscribe...
Notification Centre UI and User Controls · Push Notification Delivery
Implement the full-screen NotificationCenterScreen displaying paginated notification history using NotificationListItemW...
Notification Centre UI and User Controls · Push Notification Delivery
Implement the FCMTokenManager infrastructure component that registers and refreshes Firebase Cloud Messaging device toke...
Notification Centre UI and User Controls · Push Notification Delivery
Build the PushNotificationService that integrates FCMTokenManager and NotificationDeepLinkHandler to handle incoming FCM...
Notification Centre UI and User Controls · Push Notification Delivery
Write unit tests for LocalStorageAdapter using SharedPreferences.setMockInitialValues. Cover read/write/delete/clear ope...
Data & Infrastructure Foundation · Quick Activity Registration
Implement RegistrationPreferencesStore on top of LocalStorageAdapter. Expose getLastUsedActivityTypeId() → Future<String...
Data & Infrastructure Foundation · Quick Activity Registration
Define Riverpod providers for all data layer components: localStorageAdapterProvider, supabaseActivityClientProvider (us...
Data & Infrastructure Foundation · Quick Activity Registration
Write an integration-level smoke test that boots the full Riverpod provider graph (with a real SharedPreferences mock an...
Data & Infrastructure Foundation · Quick Activity Registration
Write unit tests for SupabaseActivityClient using a mocked Supabase client. Cover: successful insert returns mapped Acti...
Data & Infrastructure Foundation · Quick Activity Registration
Implement the SupabaseActivityClient wrapping the Supabase Flutter SDK. Provide typed methods: insertActivity(ActivityRe...
Data & Infrastructure Foundation · Quick Activity Registration
Define the ActivityRecord Dart class with all required fields (id, activityTypeId, date, durationMinutes, notes, peerId,...
Data & Infrastructure Foundation · Quick Activity Registration
Implement ActivityRepository as the central data access object. The core method is insertActivity(ActivityRecord draft) ...
Data & Infrastructure Foundation · Quick Activity Registration
Implement the LocalStorageAdapter class wrapping Flutter's SharedPreferences (or Hive for structured data). Expose typed...
Data & Infrastructure Foundation · Quick Activity Registration
Write unit tests for ActivityRepository focusing on the optimistic insert Stream contract: verify first emission has a '...
Data & Infrastructure Foundation · Quick Activity Registration
Add saveLastUsedActivityType(String activityTypeId) to RegistrationDefaultsManager that writes the ID to RegistrationPre...
Business Logic & Wizard State Management · Quick Activity Registration
Write unit tests for RegistrationDefaultsManager covering: first-run fallback defaults, reading persisted last-used type...
Business Logic & Wizard State Management · Quick Activity Registration
Write unit tests for ActivityRegistrationCubit using bloc_test. Cover: initialization emits correct pre-filled state, st...
Business Logic & Wizard State Management · Quick Activity Registration
Define the Dart data classes and interfaces for RegistrationDefaults, including today's date, 30-minute default duration...
Business Logic & Wizard State Management · Quick Activity Registration
Implement the concrete RegistrationDefaultsManager class that reads from and writes to RegistrationPreferencesStore. It ...
Business Logic & Wizard State Management · Quick Activity Registration
Create the ActivityRegistrationPayload value object containing all required fields: activity type ID, date, duration in ...
Business Logic & Wizard State Management · Quick Activity Registration
Implement the organisation-specific compensation eligibility logic inside ActivityRegistrationService. Rules must determ...
Business Logic & Wizard State Management · Quick Activity Registration
Implement the primary submitRegistration(payload) method in ActivityRegistrationService. The method must: (1) validate t...
Business Logic & Wizard State Management · Quick Activity Registration
Define the sealed class hierarchy for ActivityRegistrationCubit states: ActivityRegistrationInitial, ActivityRegistratio...
Business Logic & Wizard State Management · Quick Activity Registration
Implement the Cubit constructor and initializeWithDefaults() async method that calls RegistrationDefaultsManager.getDefa...
Business Logic & Wizard State Management · Quick Activity Registration
Implement field mutation methods on ActivityRegistrationCubit: updateActivityType, updateDate, updateDuration, updateNot...
Business Logic & Wizard State Management · Quick Activity Registration
Implement submitRegistration() on ActivityRegistrationCubit. It must emit ActivityRegistrationSubmitting, call ActivityR...
Business Logic & Wizard State Management · Quick Activity Registration
Build the optional NotesStep widget with a multi-line text field and an OS speech-to-text microphone button. The field m...
Registration Wizard UI & Confirmation · Quick Activity Registration
Add animated forward and backward step transitions inside ActivityRegistrationBottomSheet using AnimatedSwitcher or Page...
Registration Wizard UI & Confirmation · Quick Activity Registration
After the RegistrationConfirmationView is shown, start a 3-second auto-dismiss timer that closes the bottom sheet. Provi...
Registration Wizard UI & Confirmation · Quick Activity Registration
Implement the RegistrationConfirmationView widget with a prominent success illustration, activity summary (type, date, d...
Registration Wizard UI & Confirmation · Quick Activity Registration
Build the ActivityTypeStep widget displaying selectable activity-type chips. The last-used activity type must be pre-sel...
Registration Wizard UI & Confirmation · Quick Activity Registration
Build the DateStep widget with today's date pre-filled, recent-date quick-select chips (yesterday, 2 days ago), and a ca...
Registration Wizard UI & Confirmation · Quick Activity Registration
Build the DurationStep widget with duration preset chips (15 min, 30 min, 45 min, 60 min, 90 min, 120 min) defaulting to...
Registration Wizard UI & Confirmation · Quick Activity Registration
On bottom sheet open, load the user's last-used activity type and duration from the registration preferences store and p...
Registration Wizard UI & Confirmation · Quick Activity Registration
Ensure focus is programmatically moved to the first interactive element of each step when it becomes active, and returne...
Registration Wizard UI & Confirmation · Quick Activity Registration
Write flutter_test widget tests for ActivityTypeStep, DateStep, DurationStep, NotesStep, and RegistrationConfirmationVie...
Registration Wizard UI & Confirmation · Quick Activity Registration
Define the Cubit state class covering all wizard fields (activityTypeId, date, durationMinutes, notes), loading/success/...
Registration Wizard UI & Confirmation · Quick Activity Registration
Connect ActivityTypeStep, DateStep, DurationStep, and NotesStep to the ActivityRegistrationCubit using BlocBuilder. Each...
Registration Wizard UI & Confirmation · Quick Activity Registration
Implement the ActivityRegistrationBottomSheet as a DraggableScrollableSheet hosting all wizard steps. Manage animated st...
Registration Wizard UI & Confirmation · Quick Activity Registration
Audit and annotate every interactive element across all five step widgets with Flutter Semantics: labels, hints, roles (...
Registration Wizard UI & Confirmation · Quick Activity Registration
Execute a full accessibility audit of the assembled wizard using Flutter's SemanticsChecker and manual TalkBack/VoiceOve...
Registration Wizard UI & Confirmation · Quick Activity Registration
Write developer documentation covering the public contracts of all five foundation components: ReceiptImagePickerIntegra...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write unit tests for the ReceiptImagePickerIntegration using a mock implementation of the abstract interface. Verify tha...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Extract a pure ReceiptStoragePathBuilder utility class that constructs and parses the org/user/claim storage path from s...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Extend ReceiptImageCompressor to accept an OrgCompressionConfig that allows overriding max dimension, JPEG quality, and ...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Define the ReceiptImagePickerIntegration abstract class with a pickFromGallery() method and a pickFromCamera() method, b...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement concrete iOS and Android classes conforming to the ReceiptImagePickerIntegration interface using the image_pic...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write flutter_test unit tests for all ClaimReceiptRepository methods using an in-memory SQLite database. Cover insert, q...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write integration tests for ReceiptStorageRepository against a Supabase test environment. Cover upload of a small JPEG b...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write comprehensive unit tests for ReceiptThresholdValidator covering: claim exactly at threshold (boundary condition), ...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write flutter_test unit tests for ReceiptImageCompressor using bundled fixture JPEG images of known dimensions and file ...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Write an integration test that exercises the full receipt foundation stack: pick raw bytes via mock ReceiptImagePickerIn...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement the ClaimReceiptRepository class with methods for inserting a new receipt association, querying all receipts b...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement the ReceiptStorageRepository class with methods for uploading a compressed image Uint8List to the Supabase Sto...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement the ReceiptThresholdValidator service with a requiresReceipt(double amountNok, String orgId) method that retur...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement the ReceiptImageCompressor service that accepts raw image bytes and a target quality configuration, applies JP...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Design and implement the SQLite database schema for the claim_receipt_attachments table, including columns for claim_id,...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Define the OrgReceiptThresholdConfig data model containing the receipt_required_threshold_nok field (default 100 NOK). I...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Configure the Supabase Storage bucket for receipt images using the org/user/claim-scoped path strategy: receipts/{org_id...
Receipt Storage Foundation and Image Processing · Receipt Capture and Attachment
Implement the ReceiptThumbnailPreview Flutter widget that displays a compressed preview image of an attached receipt wit...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Create the ReceiptThresholdValidator service that evaluates whether an expense claim amount exceeds the 100 kr threshold...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Build the ReceiptImageCompressor service that performs client-side JPEG compression of captured receipt images before up...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Add comprehensive VoiceOver and TalkBack accessibility support to ReceiptCameraSheet. Assign Semantics labels: 'Attach r...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Handle all ReceiptCameraSheet dismissal scenarios: user swipes down, taps backdrop, presses system back button, or taps ...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Implement the ReceiptImagePickerIntegration infrastructure adapter wrapping the image_picker Flutter plugin. Expose pick...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Write comprehensive tests covering: ReceiptAttachmentService orchestration with mocked storage and repository dependenci...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Implement integration tests that exercise the complete receipt capture flow against a Supabase test environment: open sh...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Build the ReceiptStorageRepository to handle binary image upload and retrieval against Supabase Storage buckets. Impleme...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Build the central ReceiptAttachmentService that orchestrates the end-to-end receipt capture and upload flow. Coordinate ...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Extend ReceiptAttachmentService to perform Supabase Storage uploads in a background isolate, emitting upload progress ev...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Create the ClaimReceiptRepository data layer with methods to create, read, update, and delete claim-receipt associations...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Implement the ReceiptCameraSheet as a Flutter DraggableScrollableSheet presented as a bottom sheet within the expense wi...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Implement the ReceiptAttachmentIndicator widget displayed in the expense form showing current receipt attachment state: ...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Wire ReceiptCameraSheet and ReceiptAttachmentService into the expense registration wizard. The sheet must open inline wi...
Receipt Attachment Service and Camera Sheet Orchestration · Receipt Capture and Attachment
Implement the core Receipt Thumbnail Preview Widget with compressed image thumbnail display, file metadata row (filename...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Overlay a circular progress indicator on the thumbnail while the receipt image is uploading. Accept an upload progress s...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Add Remove and Replace icon-buttons to the thumbnail widget. Remove clears the attached receipt and reverts the parent f...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Implement the Receipt Attachment Indicator as an inline form widget. In its default state it shows a neutral info row ('...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Connect the Receipt Threshold Validator reactive stream to the attachment indicator so it dynamically switches between o...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Write an integration test that provisions two organizations with different receipt thresholds (e.g., Blindeforbundet at ...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Write flutter_test widget tests covering: thumbnail renders with progress overlay at varying progress values, remove and...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Wrap the thumbnail widget with Flutter Semantics nodes. Provide descriptive labels such as 'Receipt attached: filename.j...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
When the threshold stream emits a state change (optional → required or required → optional), emit a Flutter Semantics li...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Add Semantics wrappers to the attachment indicator. Labels must communicate both the requirement status and the current ...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Conduct a structured VoiceOver (iOS) audit of the full receipt capture flow: expense form → attachment indicator (option...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Conduct a structured TalkBack (Android) audit mirroring the VoiceOver audit for the full receipt capture flow. Pay speci...
Receipt UI Widgets, Thumbnail Preview, and Full Accessibility · Receipt Capture and Attachment
Register SupabaseRoleProvider and RoleRepository as Riverpod providers so they are injectable across the app. Use a ref-...
Role Data Infrastructure · Role-Based Access Control
Wire the RoleRepository's cache invalidation logic to the auth session lifecycle so that all cached role assignments are...
Role Data Infrastructure · Role-Based Access Control
Write unit tests for the Role domain model serialization, RoleRepository cache behavior, and SupabaseRoleProvider error ...
Role Data Infrastructure · Role-Based Access Control
Implement the SupabaseRoleProvider class that queries Supabase JWT claims, user metadata, and the user_roles table via t...
Role Data Infrastructure · Role-Based Access Control
Create the typed Role domain model in Dart including fields for roleId, userId, roleName (enum: peer_mentor, coordinator...
Role Data Infrastructure · Role-Based Access Control
Build the RoleRepository class on top of SupabaseRoleProvider. The repository must cache resolved role assignments per s...
Role Data Infrastructure · Role-Based Access Control
Design and implement the user_roles database table in Supabase, including columns for user_id, org_unit_id, role_name (p...
Role Data Infrastructure · Role-Based Access Control
Write and apply Row Level Security policies on the user_roles table ensuring users can only read their own role assignme...
Role Data Infrastructure · Role-Based Access Control
Extend PermissionCheckerService with the sensitive pre-action validation flow: checkPermissionBeforeSubmit(action) perfo...
Role State Management and Permission Services · Role-Based Access Control
Extend RoleStateManager with switchRole(newRole) that validates the requested role is in the user's available roles list...
Role State Management and Permission Services · Role-Based Access Control
Write comprehensive unit tests for RoleStateManager (initial state, setActiveRole, switchRole, resetOnLogout, multi-role...
Role State Management and Permission Services · Role-Based Access Control
Write integration tests covering the complete role resolution flow: mock Supabase returning multi-role user data → RoleR...
Role State Management and Permission Services · Role-Based Access Control
Create the core Dart data models for the role system: UserRole enum (coordinator, peerMentor, globalAdmin, orgAdmin), Ro...
Role State Management and Permission Services · Role-Based Access Control
Define the abstract RoleRepository interface with methods fetchRolesForUser(userId), fetchPrimaryRole(userId), and fetch...
Role State Management and Permission Services · Role-Based Access Control
Build the RoleStateManager as a Riverpod StateNotifier (or BLoC) that holds the active UserRole, exposes a role stream t...
Role State Management and Permission Services · Role-Based Access Control
Build the RoleResolutionService that orchestrates the post-authentication role determination flow: invoke RoleRepository...
Role State Management and Permission Services · Role-Based Access Control
Build the PermissionCheckerService with synchronous canAccess(route, role) and asynchronous checkPermission(action, cont...
Role State Management and Permission Services · Role-Based Access Control
Integrate RoleResolutionService into the post-login auth flow so that after successful BankID/Vipps/email authentication...
Role State Management and Permission Services · Role-Based Access Control
Implement the coordinator-specific home screen content including activity overview summary cards, quick-action registrat...
Role-Driven UI and Navigation · Role-Based Access Control
Implement the peer mentor-specific home screen content variant showing personal activity summary, recent registrations, ...
Role-Driven UI and Navigation · Role-Based Access Control
Implement the org admin home screen content variant showing org-level statistics, member counts, area summaries, and adm...
Role-Driven UI and Navigation · Role-Based Access Control
Build the NoAccessScreen widget displayed when a global admin authenticates. The screen must show a clear, friendly mess...
Role-Driven UI and Navigation · Role-Based Access Control
Build the RoleSwitchWidget dropdown/bottom-sheet selector that lists all roles held by the authenticated user. On role s...
Role-Driven UI and Navigation · Role-Based Access Control
Implement the state update flow triggered by the Role Switch Widget: dispatch role change event to Role State Manager, s...
Role-Driven UI and Navigation · Role-Based Access Control
Ensure StatefulShellRoute correctly preserves scroll positions, form state, and list positions within each tab branch wh...
Role-Driven UI and Navigation · Role-Based Access Control
Conduct a full WCAG 2.2 AA accessibility audit across all role-driven UI components: Role-Based Home Screen variants, Ro...
Role-Driven UI and Navigation · Role-Based Access Control
Write integration tests covering the full role switch flow: authenticate as multi-role user → verify home screen renders...
Role-Driven UI and Navigation · Role-Based Access Control
Write integration tests verifying the complete global admin redirect path: authenticate as global admin → route guard fi...
Role-Driven UI and Navigation · Role-Based Access Control
Create the RoleBasedHomeScreen widget that subscribes to the Role State Manager stream and conditionally renders one of ...
Role-Driven UI and Navigation · Role-Based Access Control
Build the RoleAwareBottomNav widget using StatefulShellRoute (GoRouter) that conditionally renders only the tabs permitt...
Role-Driven UI and Navigation · Role-Based Access Control
Build the RoleRouteGuard as a GoRouter redirect callback. On every navigation event, validate the user's active role aga...
Role-Driven UI and Navigation · Role-Based Access Control
Implement specific redirect logic within the Route Guard to detect global admin role and unconditionally redirect to the...
Role-Driven UI and Navigation · Role-Based Access Control
Extend ScenarioRuleRepository with an offline-capable caching layer using flutter_secure_storage or Hive so the mobile c...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Create Riverpod providers (using riverpod) that expose ScenarioRuleRepository, PromptHistoryRepository, and PushNotifica...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Write unit and integration tests for ScenarioRuleRepository, PromptHistoryRepository, and PushNotificationDispatcher. Co...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Implement the ScenarioRuleRepository Dart class that performs CRUD operations against the scenario_rules Supabase table....
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Implement the PromptHistoryRepository Dart class that reads and writes to the follow_up_notification_log Supabase table....
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Write and apply a Supabase database migration that creates the scenario_rules table. The table must store JSON-configure...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Write and apply a Supabase database migration that creates the follow_up_notification_log table for tracking delivery st...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Define and apply Row Level Security policies on the scenario_rules table to enforce chapter-scoped data isolation. Coord...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Define and apply Row Level Security policies on the follow_up_notification_log table to enforce chapter-scoped isolation...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Implement the PushNotificationDispatcher infrastructure class that sends push notifications via both FCM (Android) and A...
Scenario Follow-up Prompts: Data Foundation · Scenario-based Follow-up Prompts
Write developer documentation for the ScenarioRuleEngine public API including: evaluate() parameter contracts and return...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Extend ScenarioRuleEngine to handle multiple matching rules by applying a priority ordering strategy: explicit priority ...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Implement ScenarioDeepLinkHandler that converts a triggered ScenarioContext (activityId, contactId, activityType, prefil...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Extend ScenarioDeepLinkHandler to validate all route arguments before navigation: verify activityId exists and belongs t...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Wire all three services into the Riverpod provider graph: scenarioRuleEngineProvider (depends on scenarioRuleRepositoryP...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Write unit tests for ScenarioConfigurationManager covering: loading rules for a chapter with and without existing data, ...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Write unit tests for ScenarioDeepLinkHandler covering: valid context produces correct go_router URI with all query param...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Write integration tests that exercise the full evaluation path against a real Supabase test instance: seed scenario_rule...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Define the Dart domain model for ScenarioRule including fields for contact_type filters, wellbeing flags, duration thres...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Build the ScenarioConfigurationManager service that provides chapter-level rule management. Implement loadRulesForChapte...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Implement the ScenarioRuleEngine.evaluate(activityMetadata, rules, promptHistory) method. The algorithm must check: cont...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Create the ScenarioRuleRepository class backed by the scenario_rules Supabase table. Implement fetchRulesForChapter(chap...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Create the PromptHistoryRepository class backed by the scenario_prompt_history Supabase table. Implement recordPromptSen...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Write comprehensive unit tests for the ScenarioRuleEngine covering: exact contact type match, wildcard contact type, sin...
Scenario Follow-up Prompts: Rule Engine and Configuration Logic · Scenario-based Follow-up Prompts
Audit and enhance the ScenarioPromptDetailBottomSheet for WCAG 2.2 AA compliance: focus trap within the sheet when open,...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the deduplication step in the Scheduler Service that filters out ScenarioPrompt candidates already present in ...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Create the ScenarioPromptNotificationCard Flutter widget with Design System v3 dark-mode styling. The card must render i...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the CTA tap handler in ScenarioPromptNotificationCard that constructs and fires a deep link to the activity wi...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Create the ScenarioPromptDetailBottomSheet Flutter widget as a modal bottom sheet following Design System v3. Include se...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Wire the Detail Bottom Sheet to fetch full activity context from the repository when opened. Display peer mentor name, a...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Create the ScenarioConfigurationScreen Flutter widget as a full-page coordinator-only screen. Use Design System v3 sideb...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Wire the ScenarioConfigurationScreen to load all available scenario templates from the Scenario Configuration Manager se...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the toggle change handler in ScenarioConfigurationScreen that calls the Scenario Configuration Manager to upda...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Audit and enhance the ScenarioPromptNotificationCard for WCAG 2.2 AA compliance: add Semantics wrappers with descriptive...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the dismiss flow in the Detail Bottom Sheet: when a coordinator taps 'Dismiss', call the Prompt History Reposi...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Write unit tests for the Scenario Prompt Scheduler Service covering: activity fetch with date window filter, rule engine...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Write Flutter widget tests for ScenarioPromptNotificationCard and ScenarioPromptDetailBottomSheet: verify card renders s...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Write an integration test that covers the complete flow: Scheduler Service runs against a seeded Supabase test instance,...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Create the Dart class skeleton for the Scenario Prompt Scheduler Service including abstract interfaces, dependency injec...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the fetchActivitiesInWindow method in the Scheduler Service that queries Supabase for all activities within th...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Implement the final two stages of the Scheduler pipeline: forward deduplicated prompts to the Push Notification Dispatch...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Wire the Scenario Rule Engine into the Scheduler Service pipeline. After fetching activities, pass each ActivityRecord t...
Scenario Follow-up Prompts: Scheduler Service and Peer Mentor UI · Scenario-based Follow-up Prompts
Add an idempotency check at the start of each scheduler invocation cycle. Query the prompt_history table for entries alr...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Write the Supabase Edge Function deployment script (deploy.sh or Makefile target) that deploys the function with correct...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Instrument the Edge Function to emit structured JSON log entries at key execution points: function invoked, kill switch ...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Write integration tests covering: successful run with mock scheduler service, kill-switch disabled path, per-activity er...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Implement the Supabase Edge Function entry point (index.ts) that initialises a Supabase client authenticated with the se...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Call the Scenario Prompt Scheduler Service from the Edge Function and wrap the per-activity processing loop in individua...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Define and document all environment variables required by the Scenario Evaluation Edge Function, including SUPABASE_SERV...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Before invoking the Scenario Prompt Scheduler Service, query the feature flag store for the scenario-follow-up-prompts k...
Scenario Follow-up Prompts: Edge Function Infrastructure · Scenario-based Follow-up Prompts
Write unit tests for ScenarioDeepLinkRouter covering: cold-start payload resolves correct route with full back-stack, fo...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement ScenarioNotificationContentBuilder that generates FCM/APNs title and body strings for each scenario type. Supp...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement ScenarioDeepLinkRouter to parse incoming push notification payloads (scenario_type, entity_id, target_route) a...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement ScenarioEvaluationConfig as an infrastructure service that reads all scenario-related thresholds and feature f...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Write unit tests for NotificationPreferencesRepository covering: default opted-in behaviour when no row exists, upsert i...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Write unit tests for ScenarioNotificationRepository covering: recordNotificationSent persists correct fields, updateDeli...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Write unit tests for ScenarioNotificationContentBuilder covering: correct Norwegian and English string output per scenar...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Write unit tests for PushNotificationDispatcher covering: successful FCM dispatch records DELIVERED status, first-attemp...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Write an integration test that exercises the full foundation stack: load config from ScenarioEvaluationConfig, build a l...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement the Dart NotificationPreferencesRepository class using the Supabase client. Provide methods: getPreferences(us...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement ScenarioNotificationRepository in Dart with methods: recordNotificationSent(record), updateDeliveryStatus(id, ...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Create the notification_preferences Postgres table in Supabase with columns for user_id, scenario_type, opted_in (defaul...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Create scenario_notification_records table (id, user_id, scenario_type, sent_at, delivery_status, payload_json, retry_co...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Implement PushNotificationDispatcher as a thin wrapper around the FCM HTTP v1 API for Android and APNs for iOS. Provide ...
Scenario Push Engagement — Data & Infrastructure Foundation · Scenario-Based Engagement Push Notifications
Add the milestone scenario evaluator to the trigger engine: query cumulative session count for the current calendar year...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Add the certification expiry scenario evaluator to the trigger engine: query certification expiry dates for the peer men...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Instrument the Scenario Trigger Engine Edge Function with structured JSON logging: log each evaluation run with peer_men...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Instrument the Scenario Edge Function Scheduler with structured JSON logging: log each scheduler run with total active m...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Build the Notification Preference Service as a Dart service class that wraps the preferences repository. Expose methods ...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Within the Scenario Trigger Engine Supabase Edge Function, implement the inactivity scenario evaluator: query the most r...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Build the cooldown enforcement logic in the trigger engine: after a scenario notification is recorded, block further not...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Create the database schema and repository interface for storing per-user notification preferences, including opt-out fla...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Design and implement the database table and repository for scenario notifications, tracking which notifications have bee...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Register the pg_cron job in the Supabase database to invoke the Scenario Edge Function Scheduler on the desired daily ca...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Implement the Scenario Edge Function Scheduler as a Supabase Edge Function designed to be invoked by a pg_cron job. The ...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Integrate the scenario-evaluation-config (from Epic 1, component 583) into the trigger engine. Fetch configurable values...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Wire the trigger engine to call the push notification dispatcher (582-push-notification-dispatcher) when a scenario eval...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Write integration tests covering all three scenario evaluators (inactivity, milestone, certification expiry) in the trig...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Write an end-to-end integration test that simulates a full scheduler run: seed active peer mentors with varying states (...
Scenario Push Engagement — Trigger Engine & Scheduler · Scenario-Based Engagement Push Notifications
Perform end-to-end validation of the full scenario push engagement UI flow: preference toggle persists → evaluation cycl...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Create the base Flutter screen for notification-preferences-screen including app bar, scrollable body, and section group...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Add one toggle switch per supported scenario type (e.g., days-inactive, certification-expiry, session-count) inside the ...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Create the in-app-notification-banner widget as an overlay positioned at the top of the current screen. Implement the vi...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Add a configurable auto-dismiss timer (default 5 seconds) to the in-app-notification-banner using a countdown that cance...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Implement tap handling on the in-app-notification-banner that delegates navigation to scenario-deep-link-router (578). P...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Create the read-only scenario-notification-detail-view screen reachable from the notification centre or a push tap. Buil...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Wire scenario-notification-detail-view to scenario-notification-repository (579) via Riverpod to load the full notificat...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
On scenario-notification-detail-view screen mount, call scenario-notification-repository (579) to mark the notification ...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Connect the toggle controls in notification-preferences-screen to notification-preference-service (577) using Riverpod. ...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Wire the in-app-notification-banner to a Supabase Realtime subscription on the scenario_notifications table filtered by ...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Run a focused accessibility audit across notification-preferences-screen, in-app-notification-banner, and scenario-notif...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Write flutter_test widget tests for notification-preferences-screen (toggle persistence, initial load), in-app-notificat...
Scenario Push Engagement — Mobile User Interface · Scenario-Based Engagement Push Notifications
Write developer documentation covering: the sensitive field registry lookup API and how to register new fields at runtim...
Screen Reader Support Foundation · Screen Reader Support
Write unit tests for SemanticsServiceFacade covering announcement queuing, priority handling, mock injection, and locale...
Screen Reader Support Foundation · Screen Reader Support
Write tests for ScreenReaderDetectionService covering initial detection, foreground re-evaluation, stream emission on st...
Screen Reader Support Foundation · Screen Reader Support
Write comprehensive widget tests for SemanticsWrapperWidget verifying correct semantic label assignment, role attributio...
Screen Reader Support Foundation · Screen Reader Support
Write integration tests verifying that all five foundation components are correctly wired via Riverpod: SensitiveFieldCo...
Screen Reader Support Foundation · Screen Reader Support
Create the Dart data model and constants for the sensitive field configuration registry. Define the SensitiveFieldConfig...
Screen Reader Support Foundation · Screen Reader Support
Implement the SensitiveFieldConfigurationRegistry class with runtime-updatable field registration, lookup API (isSensiti...
Screen Reader Support Foundation · Screen Reader Support
Implement the AccessibilitySettingsRepository backed by SharedPreferences or Hive. Expose a Stream<AccessibilitySettings...
Screen Reader Support Foundation · Screen Reader Support
Implement the ScreenReaderDetectionService that detects VoiceOver (iOS) and TalkBack (Android) activation state at app s...
Screen Reader Support Foundation · Screen Reader Support
Create the AccessibilitySettings data class with fields for screen reader override, announcement verbosity, sensitive fi...
Screen Reader Support Foundation · Screen Reader Support
Create the SemanticsWrapperWidget Flutter widget that wraps any interactive child with a Semantics widget. Accept parame...
Screen Reader Support Foundation · Screen Reader Support
Extend SemanticsWrapperWidget to support dynamic label builders (functions that produce context-aware labels), live regi...
Screen Reader Support Foundation · Screen Reader Support
Create the SemanticsServiceFacade class that wraps Flutter's SemanticsService.announce() and platform MethodChannel call...
Screen Reader Support Foundation · Screen Reader Support
Register the five foundation Riverpod providers (SensitiveFieldConfigurationRegistry, AccessibilitySettingsRepository, S...
Screen Reader Support Foundation · Screen Reader Support
Write developer documentation covering the public APIs of all five components: AccessibilityTestHarness matcher referenc...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Add to FocusManagementService the ability to move focus to dynamically inserted content such as inline validation errors...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Execute AccessibilityAuditService.runAudit() against every existing application screen using the test harness. Collect a...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Use the AccessibilityTestHarness to write comprehensive unit and widget tests for FocusManagementService. Cover: focus l...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Write flutter_test widget tests using AccessibilityTestHarness for AccessibilityAuditService. Create test widget trees w...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Write flutter_test widget tests for LiveRegionAnnouncer covering: polite announcements queue in order, assertive announc...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Write flutter_test widget tests for SensitiveFieldWarningDialog covering: dialog renders with correct field type label a...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Implement the FocusManagementService as a singleton service that intercepts GoRouter route transitions and places VoiceO...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Extend FocusManagementService to handle dialog and bottom sheet lifecycle events. When a dialog opens, focus must move t...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Implement the AccessibilityAuditService core traversal engine that walks the live Flutter semantic tree using SemanticsB...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Add WCAG 2.2 AA audit rules to AccessibilityAuditService: detect unlabelled interactive elements, missing semantic roles...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Implement the LiveRegionAnnouncer widget as a Riverpod provider-backed announcement queue. Support polite announcements ...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Wire the LiveRegionAnnouncer into the application's BLoC/Cubit state streams so that loading, success, and error state t...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Build the SensitiveFieldWarningDialog as a platform-styled alert dialog that warns the user before a sensitive field (na...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Implement the full confirmation flow for SensitiveFieldWarningDialog: on Confirm the sensitive field is revealed and foc...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Build the core AccessibilityTestHarness infrastructure component providing semantic tree traversal matchers for flutter_...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Extend the AccessibilityTestHarness with a screen reader simulation layer that replays the semantic tree as a VoiceOver/...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Use AccessibilityTestHarness screen reader simulation to write integration tests covering the two Blindeforbundet pilot ...
Core Accessibility Services and Dynamic Announcements · Screen Reader Support
Wire the WCAGComplianceChecker into the CI build pipeline so that it runs automatically on every pull request. Configure...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Extend ActivityWizardStepSemantics to detect inline validation errors on each step and announce them via the live region...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Extend AccessibleBottomNavigation to post a live region announcement whenever the user switches tabs. The announcement s...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Add positional semantics (e.g., 'Tab 1 of 5') to each item in the AccessibleBottomNavigation overlay so that screen read...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Extend AccessibleModalSheet to track the widget or button that triggered the sheet's opening. On close (whether via dism...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Add a live region announcement to AccessibleModalSheet that fires when the sheet opens and describes the modal's purpose...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Implement the contrast-ratio evaluation module within WCAGComplianceChecker. Parse the app's design token color palette ...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Implement the touch-target-size validation module in WCAGComplianceChecker. Traverse the widget tree (or a serialised wi...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Implement the semantic completeness validation module in WCAGComplianceChecker. Detect interactive widgets that are miss...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Write Flutter integration tests that simulate a screen reader user navigating to a sensitive field (assignment details, ...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Build the SensitiveFieldPrivacyGuard service that orchestrates the full sensitive-field warning flow. Implement session-...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Produce the final WCAG 2.2 AA compliance documentation package required for Blindeforbundet acceptance sign-off. Include...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Implement the ActivityWizardStepSemantics component's step-transition announcement logic. On each wizard step change, po...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Within ActivityWizardStepSemantics, implement per-step focus management so that when the wizard advances to a new step, ...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Build the AccessibleBottomNavigation overlay widget that wraps the existing bottom navigation bar. Assign explicit seman...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Build the AccessibleModalSheet wrapper that traps keyboard and assistive-technology focus within the modal while it is o...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Integrate the SensitiveFieldPrivacyGuard service with the encrypted field display widget so that whenever a sensitive fi...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Write flutter_test accessibility tests covering all three high-complexity UI components: ActivityWizardStepSemantics (st...
Complex Widget Semantics and WCAG Compliance Enforcement · Screen Reader Support
Write unit and widget tests for AccessibilityLiveRegionAnnouncer. Verify that announcements are dispatched via Semantics...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Write a developer-facing integration guide documenting all four foundation components: NativeSpeechApiBridge (platform a...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Create the AccessibilityLiveRegionAnnouncer utility class that wraps Flutter's SemanticsService to post live region anno...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Write comprehensive unit tests for all PartialTranscriptionRepository methods using an in-memory SQLite test database. C...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Write integration tests using flutter_test and mock MethodChannel handlers to validate the full NativeSpeechApiBridge li...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Build the PartialTranscriptionRepository class that persists, retrieves, and clears partial transcription records from S...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Define the DictationScopeGuard service interface with the core method isDictationPermitted(): bool and the supporting ca...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Implement DictationScopeGuard that inspects the current ActiveSessionState from Riverpod to enforce the business rule: d...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Design and implement the SQLite table schema for persisting in-flight dictation transcriptions. Define the PartialTransc...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Define the abstract NativeSpeechApiBridge interface in Dart with method signatures for: requestPermission(), startRecogn...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Implement the iOS-specific NativeSpeechApiBridge using Flutter MethodChannel to invoke SFSpeechRecognizer via native Swi...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Implement the Android-specific NativeSpeechApiBridge using Flutter MethodChannel to invoke android.speech.SpeechRecogniz...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Wire the platform-specific NativeSpeechApiBridge implementations into the Riverpod dependency graph. Create a nativeSpee...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Write thorough unit tests for DictationScopeGuard covering all state transitions: dictation allowed when no session acti...
Speech-to-Text Foundation: Platform Bridge, Scope Guard & Persistence · Speech-to-Text Input
Implement locale configuration logic within SpeechRecognitionService that selects nb-NO as the primary locale and falls ...
Core Speech Recognition Service · Speech-to-Text Input
Implement dispose() to cleanly tear down active sessions: cancel any in-flight NativeSpeechApiBridge operations, close t...
Core Speech Recognition Service · Speech-to-Text Input
Register SpeechRecognitionService in the Riverpod provider graph as a singleton scoped to the dictation feature. Write D...
Core Speech Recognition Service · Speech-to-Text Input
Define the public Dart interface for SpeechRecognitionService, including all method signatures (initialize, startListeni...
Core Speech Recognition Service · Speech-to-Text Input
Implement the initialize() method that checks microphone permission status using the permission_handler package, request...
Core Speech Recognition Service · Speech-to-Text Input
Implement startListening() and stopListening() methods that enforce explicit user-command-only activation (no auto-start...
Core Speech Recognition Service · Speech-to-Text Input
Wire the raw speech_to_text package callbacks (onResult with isFinal flag) into the domain event stream. Map partial res...
Core Speech Recognition Service · Speech-to-Text Input
Implement error handling for all failure scenarios: permission denied, engine not available, network timeout (on-device ...
Core Speech Recognition Service · Speech-to-Text Input
Write comprehensive unit tests using flutter_test and mockito covering: initialization success and failure paths, permis...
Core Speech Recognition Service · Speech-to-Text Input
Write integration tests using flutter_test that exercise SpeechRecognitionService end-to-end against a fake NativeSpeech...
Core Speech Recognition Service · Speech-to-Text Input
Write an integration test that exercises the full dictation pipeline through TranscriptionStateManager using a fake Nati...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Expose TranscriptionStateManager via a StateNotifierProvider.family keyed by fieldId string so that each dictation-enabl...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Wire the DictationScopeGuard (component 661) into the TranscriptionStateManager so that any attempt to transition from D...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Wire the PartialTranscriptionRepository (component 662) into the state manager so that every partial transcript emission...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Write comprehensive unit tests for TranscriptionStateManager covering: (1) happy-path transitions idle → requesting-perm...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Define the sealed class / freezed union representing all dictation states: DictationIdle, DictationRequestingPermission,...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Implement the TranscriptionStateManager as a Riverpod StateNotifier (or Cubit wrapped in StateNotifierProvider.family ke...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Subscribe the TranscriptionStateManager to the domain event stream emitted by SpeechRecognitionService (component 659). ...
Dictation State Machine & Coordination Layer · Speech-to-Text Input
Implement the conditional rendering logic in DictationMicrophoneButton so the widget fully hides itself when DictationSc...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Consume the TranscriptionStateManager Riverpod provider within RecordingStateIndicator so that UI state (hidden, recordi...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Add the cursor-position-aware merge logic to TranscriptionPreviewField. When a final transcription result arrives, inser...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Handle the cancellation flow within TranscriptionPreviewField: when the user or system cancels an in-progress dictation ...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Wire DictationMicrophoneButton, RecordingStateIndicator, and TranscriptionPreviewField into the post-session report scre...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Update the DynamicFieldRenderer (component 077-dynamic-field-renderer) to conditionally render a DictationMicrophoneButt...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Write flutter_test widget tests covering: DictationMicrophoneButton shows/hides based on availability state, button tap ...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Create the DictationMicrophoneButton Flutter widget that renders inline within designated free-text report fields. The b...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Implement the RecordingStateIndicator Flutter widget as a floating overlay that renders above active report fields durin...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Wire the AccessibilityLiveRegionAnnouncer (component 664) into RecordingStateIndicator so that every state transition em...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Create the TranscriptionPreviewField Flutter widget that wraps a standard TextField and displays live partial transcript...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Run a full WCAG 2.2 AA accessibility audit across DictationMicrophoneButton, RecordingStateIndicator, and TranscriptionP...
Dictation UI Components: Microphone Button, State Indicator & Transcription Preview · Speech-to-Text Input
Implement an in-memory ReportSchemaCache class that stores parsed report field schemas keyed by org_id. Support configur...
Data Layer & Schema Foundation · Structured Post-Session Report
Implement the stateless ReportFieldValidator service that accepts a field definition (FieldConfig) and a raw value, then...
Data Layer & Schema Foundation · Structured Post-Session Report
Write comprehensive unit tests for WayForwardItemRepository (mocking Supabase client) covering create, read, update, del...
Data Layer & Schema Foundation · Structured Post-Session Report
Write unit tests for PostSessionReportRepository covering all CRUD paths, activity_id FK enforcement, partial update, dr...
Data Layer & Schema Foundation · Structured Post-Session Report
Write exhaustive unit tests for ReportFieldValidator covering every validation rule type (required, length, pattern, num...
Data Layer & Schema Foundation · Structured Post-Session Report
Implement the WayForwardItemRepository Dart class with Supabase client integration. Provide methods: createItem, getItem...
Data Layer & Schema Foundation · Structured Post-Session Report
Implement the PostSessionReportRepository Dart class with full Supabase CRUD: createReport, getReportById, getReportsByA...
Data Layer & Schema Foundation · Structured Post-Session Report
Create the Supabase database migration for the post_session_reports table including columns for report_id, activity_id (...
Data Layer & Schema Foundation · Structured Post-Session Report
Create the Supabase database migration for the way_forward_items table including columns for item_id, report_id (foreign...
Data Layer & Schema Foundation · Structured Post-Session Report
Create the database migration for the org_field_configs table with columns: config_id, org_id, feature_key (e.g. 'post_s...
Data Layer & Schema Foundation · Structured Post-Session Report
Implement OrgFieldConfigLoader that fetches per-organisation field configuration records from the org_field_configs Supa...
Data Layer & Schema Foundation · Structured Post-Session Report
Write comprehensive unit tests for report-schema-service covering cache-hit, cache-miss, TTL expiry, schema parse errors...
Backend Services & Speech Integration · Structured Post-Session Report
Write unit tests for way-forward-task-service covering successful task creation, duplicate prevention via idempotency ke...
Backend Services & Speech Integration · Structured Post-Session Report
Write integration tests for speech-to-text-adapter covering the full lifecycle: permission grant flow, start/stop record...
Backend Services & Speech Integration · Structured Post-Session Report
Build the in-memory and persistent cache layer for organisation-specific report schemas. Implement TTL-based expiry, cac...
Backend Services & Speech Integration · Structured Post-Session Report
Build the service that fetches, parses, and caches org-specific report schemas by composing report-schema-cache and org-...
Backend Services & Speech Integration · Structured Post-Session Report
Build the service that converts submitted way-forward entries into structured coordinator follow-up tasks. On report sub...
Backend Services & Speech Integration · Structured Post-Session Report
Implement the Supabase-backed repository for persisting way-forward entries submitted during post-session reports. Defin...
Backend Services & Speech Integration · Structured Post-Session Report
Build the infrastructure component that fetches and parses organisation-specific field configuration from Supabase. Hand...
Backend Services & Speech Integration · Structured Post-Session Report
Wrap Flutter's speech_to_text package into a clean adapter exposing start, stop, pause, and cancel controls. Implement m...
Backend Services & Speech Integration · Structured Post-Session Report
Build the service layer validator that evaluates field values against schema-defined rules: required, minLength, maxLeng...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Create the service layer for way-forward item lifecycle management: create, update, delete, and list items linked to a r...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Build the service that resolves the active report schema for a given org and report type, combining data from OrgFieldCo...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Create the data layer repository for persisting way-forward items to Supabase. Define the WayForwardItem model with fiel...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Create the Supabase-backed repository for persisting complete post-session reports including draft state, submitted repo...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Implement the multi-entry way-forward section UI widget. Render a scrollable list of WayForwardItem cards with add, edit...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Build a local cache layer for org-specific report schemas fetched from Supabase. Use Hive or shared_preferences to persi...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Build the infrastructure adapter bridging Flutter's speech_to_text plugin to the domain layer. Expose a stream-based API...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Create the infrastructure component that fetches and parses org-specific field configuration from Supabase, mapping raw ...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Write integration tests covering the full form engine pipeline: schema load → field rendering → user input → validation ...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Implement the per-field microphone trigger overlay widget. Render a microphone IconButton that transitions through idle,...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Build the Bloc/Riverpod state manager coordinating the full form lifecycle: schema load, field value mutations, draft au...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Implement the core dynamic field renderer that maps a FieldConfig schema object to the appropriate Flutter widget at run...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Perform a systematic WCAG 2.2 AA accessibility audit of all form engine widgets: DynamicFieldRenderer, WayForwardSection...
Dynamic Form Engine & UI Components · Structured Post-Session Report
Write developer-facing documentation covering the post-session report screen's route arguments, session-lock guard contr...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Conduct a pre-pilot production readiness review of the post-session report screen. Verify that crash reporting captures ...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Display a visible draft indicator banner at the top of the post-session report screen when an incomplete (draft) report ...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
After a successful report submission, display a confirmation screen or bottom sheet acknowledging the report was saved, ...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Build the fill-after-session enforcement logic that prevents the post-session report screen from opening while an activi...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Connect the dynamic field renderer and way-forward section widget into the post-session report screen scaffold. The scre...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Add the NSMicrophoneUsageDescription key to Info.plist for iOS and the RECORD_AUDIO permission to AndroidManifest.xml fo...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Ensure every report submitted through the post-session report screen is persisted with the parent activity_id passed via...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Perform structured accessibility testing of the complete post-session report screen on a physical iOS device using Voice...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Write end-to-end integration tests that exercise the full post-session report flow: open screen with a valid activity_id...
Post-Session Report Screen & End-to-End Integration · Structured Post-Session Report
Produce developer documentation covering: Supabase table schemas and column semantics for expense_claims and expense_lin...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Build the AutoApprovalEdgeFunctionClient Dart class that invokes the Supabase Edge Function responsible for evaluating w...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Write and deploy the Supabase Edge Function (Deno/TypeScript) that receives a claim payload, loads the organisation's th...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Implement the ExpenseSummaryCard Flutter widget that displays a compact, read-only summary of an expense claim: type bad...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Build the ExpenseThresholdConfig service that loads organisation-specific auto-approval thresholds (e.g. HLF: auto-appro...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Write integration tests covering the full data layer: expense type catalogue fetch and offline fallback, expense claim c...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Build the ExpenseTypeCatalogueRepository Dart class that reads expense types and exclusive group rules from Supabase, im...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Build the ExpenseRepository Dart class wrapping Supabase queries for CRUD operations on expense claims and line items. I...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Build the ReceiptStorageAdapter Dart class that handles image selection via image_picker, compresses images to ≤500 KB u...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Design and migrate the Supabase database schema for the expense type catalogue, including tables for expense types, excl...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Write and apply Supabase migration scripts for the expense_claims and expense_line_items tables, covering all required f...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Provision the Supabase Storage bucket for receipt images with appropriate bucket policies: private access (no public URL...
Travel & Expense Data Layer and Infrastructure Foundation · Travel & Expense Registration
Add distance range validation for mileage-type expense claims. The validation service must verify that the submitted dis...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Add offline-first draft persistence to the expense submission service. When the device has no connectivity, the service ...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Integrate Supabase Realtime into the expense attestation service so that the coordinator's queue updates live without ma...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Write comprehensive test coverage for ExpenseValidationService (mutual exclusion combinations, receipt threshold edge ca...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Build the core mutual exclusion validation logic within the expense validation service. Implement exclusive_groups confi...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Add receipt attachment validation to the expense validation service. When total expense amount exceeds the configurable ...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Define and implement the public interface of the expense validation service: a single validate() method accepting an Exp...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Build the receipt upload step within the expense submission service. Before persisting the expense record, the service m...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Implement the core submission flow: after validation passes and receipt is uploaded, persist the expense record to Supab...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Build the coordinator-facing pending queue fetch in the expense attestation service. Query the ExpenseRepository for all...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Add the decision submission method to the expense attestation service: acceptClaim(claimId, {comment?}) and rejectClaim(...
Expense Validation, Submission, and Attestation Services · Travel & Expense Registration
Add a receipt thumbnail preview strip beneath the capture button so users can inspect the captured image before submissi...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Extend the ExpenseFormBloc to read the receipt-required threshold from ExpenseThresholdConfig and reactively update form...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Augment the expense type selector with full screen-reader support: each type chip must have a descriptive Semantics labe...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Build the receipt capture widget using the image_picker package to support camera capture and gallery selection. Display...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Build the coordinator attestation queue screen that fetches pending expense claims via ExpenseAttestationService and dis...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Add approve and reject action buttons to each claim card in the attestation queue. Tapping an action opens a bottom shee...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Add the summary confirmation view as the final step before submission. Display all entered values in plain language (no ...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Run a full WCAG 2.2 AA audit of the expense registration screen using the accessibility test harness. Verify focus trave...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Write widget and integration tests covering the end-to-end expense registration flow: type selection with mutual exclusi...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Implement the ExpenseFormBloc using the flutter_bloc package. Define all form states (initial, editing, validating, subm...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Wire the BLoC submit event through ExpenseValidationService and ExpenseSubmissionService. On validation failure emit a f...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Implement the expense type selector widget with a predefined catalogue of fixed expense types. Enforce mutual exclusion ...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Implement the primary expense registration screen that hosts the ExpenseTypeSelectorWidget and ReceiptCaptureWidget with...
Expense Registration UI, Form Orchestration, and Coordinator Queue · Travel & Expense Registration
Add exponential-backoff retry logic to the AccountingIntegrationClient for transient HTTP failures, with a configurable ...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Implement the credential management layer for the AccountingIntegrationClient. Create an accounting_credentials table in...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Build the AccountingIntegrationClient Dart class as a unified REST interface for exporting approved expense records. Imp...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Write integration and widget tests covering the full driver honorarium flow: feature-flag guard renders form only for Bl...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Implement the DriverHonorariumService Dart class with methods to persist honorarium records, retrieve organisation-speci...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Create the database schema for honorarium records, including the honorarium_records table with fields for amount, org-sp...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Build the DriverHonorariumForm Flutter widget that renders conditionally when the parent activity involves client transp...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Extend the DriverHonorariumForm to present the linked confidentiality declaration text, rendered in a scrollable read-on...
Blindeforbundet Driver Honorarium and Accounting Integration · Travel & Expense Registration
Write developer documentation covering: how to read and extend the Accessibility Token Manifest, how to consume the Desi...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Extend the Flutter Accessibility Lint Configuration with custom lint rules (or analyzer plugins) that reject hardcoded h...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Integrate the Flutter Accessibility Lint Configuration into the CI pipeline by adding a dart analyze step that uses the ...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Create flutter_test unit tests verifying that the DesignTokenProvider exposes all tokens declared in the Accessibility T...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Design and implement the versioned JSON/Dart schema for the Accessibility Token Manifest, declaring all color pair contr...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Fill the Accessibility Token Manifest with all required color pair contrast ratio declarations meeting WCAG 2.2 AA thres...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Extend the Accessibility Token Manifest with type scale constraints (minimum font sizes, line heights, letter spacing) a...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Implement the Contrast Ratio Validator core logic using the WCAG 2.2 relative luminance algorithm in Dart. The function ...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Wrap the WCAG luminance algorithm in a ContrastRatioValidator service class exposing methods: validatePair(foreground, b...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Write a validation script that iterates over all color pair declarations in the Accessibility Token Manifest and runs ea...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Create the immutable, typed Dart constant repository (DesignTokenProvider) that exposes all color, typography, spacing, ...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Wire the DesignTokenProvider into the Riverpod provider graph so that all Flutter widgets and services can access design...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Set up the Flutter Accessibility Lint Configuration by adding accessibility-focused lint rules to analysis_options.yaml....
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Create comprehensive flutter_test unit tests for the ContrastRatioValidator covering: known passing pairs (white on blac...
Accessibility Token Foundation and Validation Infrastructure · Visual Design Accessibility
Write the developer-facing documentation covering: how to use AccessibleTouchTargetWrapper, InteractiveControlSpacingSys...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Extend the TokenAccessibilityEnforcer with comprehensive debug assertions that fire immediately when a non-compliant usa...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write comprehensive unit tests for the contrast ratio validator covering: known WCAG pass/fail pairs (white on #767676 =...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write widget tests for AccessibleTouchTargetWrapper verifying: minimum 44x44 pt hit area enforced regardless of child si...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write widget tests for InteractiveControlSpacingSystem verifying: spacing token resolves to correct pt value at 1x scale...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write unit and widget tests covering: DynamicTypeScaleService returns correct budget at textScaleFactor 1.0, 1.5, 2.0; A...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write integration tests for the CI Accessibility Lint Runner using fixture Dart files that contain known violations (har...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Create the accessibility token manifest data layer that enumerates all approved color pairs, minimum text weights, and t...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Build the design token provider that exposes the project's color, typography, and spacing tokens as typed Dart constants...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Implement the pure Dart contrast ratio calculation service that computes relative luminance per WCAG 2.1 formula and ret...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Build the TokenAccessibilityEnforcer service class that consumes the contrast ratio validator and the token manifest to ...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Implement the DynamicTypeScaleService that reads the OS textScaleFactor via MediaQuery and maps it to per-role layout bu...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Extend the DynamicTypeScaleService with per-role overflow prevention that triggers when textScaleFactor exceeds 1.5 (150...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Add the accessibility_lint.dart CLI invocation to the GitHub Actions (or equivalent) CI workflow so it runs on every pul...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Implement the AccessibleTouchTargetWrapper Flutter widget that enforces a minimum 44x44 pt tappable hit area regardless ...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Implement the InteractiveControlSpacingSystem widget that enforces a minimum gap between adjacent tappable controls to p...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Build the AccessibleTextStyleSystem that provides a token-driven TextTheme where every body and label role is enforced t...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Implement the ContrastSafeColorPalette widget and associated data class that provides pre-validated foreground/backgroun...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Produce the analysis_options.yaml additions and a dedicated accessibility_lint_rules.yaml configuration file that specif...
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write the Dart CLI script (bin/accessibility_lint.dart) that scans the project source tree for accessibility violations....
Accessibility Enforcement Services, UI Widgets, and CI Integration · Visual Design Accessibility
Write the developer integration guide for the AccessibleThemeBuilder covering: how to add a new organisation's branding ...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Implement factory methods inside the theme builder that produce ButtonTheme, ElevatedButtonThemeData, InputDecorationThe...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Add assert() blocks that execute exclusively in Flutter debug mode to validate that the assembled ThemeData satisfies WC...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Implement the branding override pipeline that accepts an OrgBrandingConfig for NHF, Blindeforbundet, HLF, or Barnekreftf...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Write unit tests covering: token-to-ColorScheme mapping for all four organisations in both light and dark modes, rejecti...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Implement the color scheme composition layer inside the theme builder that accepts the contrast-safe color palette outpu...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Wire the accessible text style system output into the ThemeData.textTheme field. Map each TextStyle produced by the dyna...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Combine the color scheme, text theme, and all component themes into complete ThemeData instances for both light and dark...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Wire the ThemeBuilder Riverpod provider into the root MaterialApp widget so that the app.theme and app.darkTheme propert...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility
Define the Dart abstract interface and data classes for the AccessibleThemeBuilder, including OrgBrandingConfig (brand c...
Accessible Theme Builder and Organisation Branding Integration · Visual Design Accessibility