low complexity extracted Coordinator & Admin Tools Confidence: 100%
6
Components
198
Shared
12
User Stories
Yes
Analyzed

Description

Allows coordinators to attach supporting documents to activity records — including invitations, Facebook event screenshots, flyers, and other evidence materials. NHF specifically requires this for Bufdir verification, where inspectors may request proof that a registered activity actually took place. Attachments are linked at the activity level and can be uploaded from the device camera roll or file system. The feature must support common formats (PDF, JPEG, PNG) and store files securely in Supabase Storage with appropriate access controls so only coordinators and admins within the same organisation can retrieve them.

Analysis

Business Value

Enables NHF to meet Bufdir's evidence requirements without maintaining a separate paper archive. Reduces audit risk and administrative burden when grant inspections occur.

Implementation Notes

Use Supabase Storage with bucket-level RLS tied to org_id. Limit file size to 10 MB per attachment, max 5 attachments per activity. Generate signed URLs for download. Display thumbnails in activity detail view. Include attachment count and download links in Bufdir export.

Components (204)

User Interface (3)

Service Layer (2)

Data Layer (1)

Shared Components

These components are reused across multiple features

User Interface (59)

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

Service Layer (52)

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

Data Layer (33)

Infrastructure (54)

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

User Stories (12)

Remove or Replace an Attachment on a Submitted Activity
medium 3 pts

As a As a Coordinator

I want to delete an incorrectly uploaded attachment or replace it with the correct file after an activity has been submitted

So that the activity record always contains accurate and relevant documentation without requiring coordinator intervention

Acceptance Criteria
  • Given I am viewing the thumbnail grid for an activity I submitted, when I long-press a thumbnail, then a context menu appears with a 'Remove Attachment' option
  • Given I select 'Remove Attachment', when the confirmation dialog appears, then I can confirm or cancel without accidental deletion
  • Given I confirm deletion, when the operation completes, then the thumbnail is removed from the grid and the file is deleted from Supabase Storage
  • +3 more
View Full Story →
Attach Multiple Documents to a Single Activity
medium 5 pts

As a As a Coordinator

I want to attach multiple documents (e.g., an invitation flyer, a participant list, and a screenshot) to a single activity in one session

So that I can provide all evidence at once without having to revisit the activity multiple times

Acceptance Criteria
  • Given the attachment picker is open, when I select multiple files from my photo library, then all selected files appear as thumbnails in a pending upload queue
  • Given the pending upload queue has 3 files, when I tap 'Upload', then all three files upload in parallel and I see individual progress indicators for each
  • Given all uploads have succeeded, when the upload session ends, then all thumbnails appear in the activity's attachment thumbnail grid
  • +3 more
View Full Story →
Attach Documents Offline and Sync When Connectivity Is Restored
medium 8 pts

As a As a Coordinator

I want to queue document attachments locally when I have no internet connection and have them automatically uploaded when connectivity is restored

So that I can complete activity registration with attachments in remote or low-connectivity environments without losing my work

Acceptance Criteria
  • Given I am offline and attach a document to an activity, when I confirm the selection, then the file is stored locally and shown in the thumbnail grid with a 'Pending upload' indicator
  • Given there is a pending attachment queue, when the device regains internet connectivity, then all queued files are uploaded automatically in the background
  • Given background sync completes successfully, when all queued attachments are uploaded, then the 'Pending upload' indicators are replaced with normal thumbnails and a success notification is shown
  • +3 more
View Full Story →
Remove or Replace an Attachment on a Submitted Activity
medium 3 pts

As a As a Organization Administrator

I want to delete an incorrectly uploaded attachment or replace it with the correct file after an activity has been submitted

So that the activity record always contains accurate and relevant documentation without requiring coordinator intervention

Acceptance Criteria
  • Given I am viewing the thumbnail grid for an activity I submitted, when I long-press a thumbnail, then a context menu appears with a 'Remove Attachment' option
  • Given I select 'Remove Attachment', when the confirmation dialog appears, then I can confirm or cancel without accidental deletion
  • Given I confirm deletion, when the operation completes, then the thumbnail is removed from the grid and the file is deleted from Supabase Storage
  • +3 more
View Full Story →
Attach Multiple Documents to a Single Activity
medium 5 pts

As a As a Organization Administrator

I want to attach multiple documents (e.g., an invitation flyer, a participant list, and a screenshot) to a single activity in one session

So that I can provide all evidence at once without having to revisit the activity multiple times

Acceptance Criteria
  • Given the attachment picker is open, when I select multiple files from my photo library, then all selected files appear as thumbnails in a pending upload queue
  • Given the pending upload queue has 3 files, when I tap 'Upload', then all three files upload in parallel and I see individual progress indicators for each
  • Given all uploads have succeeded, when the upload session ends, then all thumbnails appear in the activity's attachment thumbnail grid
  • +3 more
View Full Story →
Attach Documents Offline and Sync When Connectivity Is Restored
medium 8 pts

As a As a Organization Administrator

I want to queue document attachments locally when I have no internet connection and have them automatically uploaded when connectivity is restored

So that I can complete activity registration with attachments in remote or low-connectivity environments without losing my work

Acceptance Criteria
  • Given I am offline and attach a document to an activity, when I confirm the selection, then the file is stored locally and shown in the thumbnail grid with a 'Pending upload' indicator
  • Given there is a pending attachment queue, when the device regains internet connectivity, then all queued files are uploaded automatically in the background
  • Given background sync completes successfully, when all queued attachments are uploaded, then the 'Pending upload' indicators are replaced with normal thumbnails and a success notification is shown
  • +3 more
View Full Story →
Preview Attached Documents on a Registered Activity
high 3 pts

As a As a Coordinator

I want to view a thumbnail grid of all documents attached to an activity and open any attachment in full-screen preview

So that I can verify the correct files were uploaded and review them without leaving the app

Acceptance Criteria
  • Given I open an activity that has attached documents, when the screen renders, then a thumbnail grid shows one thumbnail per attachment with a file-type indicator badge
  • Given the thumbnail grid is visible, when I tap a thumbnail, then a full-screen preview modal opens with the document rendered at full resolution
  • Given the preview modal is open, when I tap the close button or swipe down, then I return to the activity detail screen with focus restored to the thumbnail I tapped
  • +3 more
View Full Story →
Receive Accessibility-Compliant Feedback During Document Upload
high 3 pts

As a As a Coordinator

I want to receive clear, screen-reader-compatible feedback about the status of document uploads — including success, failure, and progress

So that I can confidently complete activity registration even when using assistive technologies such as VoiceOver or TalkBack

Acceptance Criteria
  • Given an upload starts, when the upload progress changes to in-progress, then a live region announcement reads 'Uploading [filename], please wait'
  • Given an upload completes successfully, when the status changes, then a live region announcement reads 'Attachment [filename] uploaded successfully'
  • Given an upload fails, when the error state is reached, then a live region announcement reads a plain-language error message and focus moves to a retry button
  • +3 more
View Full Story →
Attach Supporting Documents When Registering an Activity
high 5 pts

As a As a Coordinator

I want to attach documents such as invitations, event flyers, or screenshots when registering an activity

So that the activity record has verifiable supporting evidence for Bufdir auditing and organizational reporting

Acceptance Criteria
  • Given I am on the activity registration confirmation step, when I tap 'Add Attachment', then the attachment picker UI opens showing camera and file library options
  • Given the attachment picker is open, when I select an image or PDF from my device, then a thumbnail preview is shown before confirming
  • Given I have selected a file, when I confirm the selection, then the file is uploaded to Supabase Storage and linked to the activity record via the activity attachment repository
  • +3 more
View Full Story →
Preview Attached Documents on a Registered Activity
high 3 pts

As a As a Organization Administrator

I want to view a thumbnail grid of all documents attached to an activity and open any attachment in full-screen preview

So that I can verify the correct files were uploaded and review them without leaving the app

Acceptance Criteria
  • Given I open an activity that has attached documents, when the screen renders, then a thumbnail grid shows one thumbnail per attachment with a file-type indicator badge
  • Given the thumbnail grid is visible, when I tap a thumbnail, then a full-screen preview modal opens with the document rendered at full resolution
  • Given the preview modal is open, when I tap the close button or swipe down, then I return to the activity detail screen with focus restored to the thumbnail I tapped
  • +3 more
View Full Story →
Receive Accessibility-Compliant Feedback During Document Upload
high 3 pts

As a As a Organization Administrator

I want to receive clear, screen-reader-compatible feedback about the status of document uploads — including success, failure, and progress

So that I can confidently complete activity registration even when using assistive technologies such as VoiceOver or TalkBack

Acceptance Criteria
  • Given an upload starts, when the upload progress changes to in-progress, then a live region announcement reads 'Uploading [filename], please wait'
  • Given an upload completes successfully, when the status changes, then a live region announcement reads 'Attachment [filename] uploaded successfully'
  • Given an upload fails, when the error state is reached, then a live region announcement reads a plain-language error message and focus moves to a retry button
  • +3 more
View Full Story →
Attach Supporting Documents When Registering an Activity
high 5 pts

As a As a Organization Administrator

I want to attach documents such as invitations, event flyers, or screenshots when registering an activity

So that the activity record has verifiable supporting evidence for Bufdir auditing and organizational reporting

Acceptance Criteria
  • Given I am on the activity registration confirmation step, when I tap 'Add Attachment', then the attachment picker UI opens showing camera and file library options
  • Given the attachment picker is open, when I select an image or PDF from my device, then a thumbnail preview is shown before confirming
  • Given I have selected a file, when I confirm the selection, then the file is uploaded to Supabase Storage and linked to the activity record via the activity attachment repository
  • +3 more
View Full Story →