low complexity extracted Authentication & Access Control Confidence: 100%
5
Components
198
Shared
24
User Stories
Yes
Analyzed

Description

Standard credential-based authentication allowing users to log in with an email address and password. This is the baseline authentication method available to all organizations and all roles in the initial MVP phase. Must include proper error handling, accessible form fields meeting WCAG 2.2 AA contrast and label requirements, and integrate with Supabase Auth as the backend. Password visibility toggle and keyboard-aware layout are expected for mobile usability.

Analysis

Business Value

Provides a universally accessible login path for all users regardless of technical sophistication, ensuring no user is blocked from the app during rollout phases before BankID/Vipps is available.

Implementation Notes

Uses Supabase Auth email/password flow. AppTextField and AppButton design system components. Form state managed via BLoC or Riverpod. WCAG 2.2 AA compliance required on all form elements.

Components (203)

User Interface (3)

Service Layer (2)

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 (24)

Validate Email Format Before Submitting Login
medium 2 pts

As a As a Peer Mentor (Likeperson)

I want I want the app to check that my email address is in a valid format before sending my login request

So that So that I get immediate feedback if I have made a typo in my email, rather than waiting for a server round-trip to tell me something is wrong

Acceptance Criteria
  • Given the email field contains 'notanemail', When the user taps the sign-in button, Then inline validation displays 'Please enter a valid email address' adjacent to the email field and no network request is made
  • Given the email field is completely empty, When the user taps sign in, Then the error 'Email address is required' is shown for the email field
  • Given the password field is empty, When the user taps sign in, Then the error 'Password is required' is shown for the password field
  • +2 more
View Full Story →
Validate Email Format Before Submitting Login
medium 2 pts

As a As a Coordinator

I want I want the app to check that my email address is in a valid format before sending my login request

So that So that I get immediate feedback if I have made a typo in my email, rather than waiting for a server round-trip to tell me something is wrong

Acceptance Criteria
  • Given the email field contains 'notanemail', When the user taps the sign-in button, Then inline validation displays 'Please enter a valid email address' adjacent to the email field and no network request is made
  • Given the email field is completely empty, When the user taps sign in, Then the error 'Email address is required' is shown for the email field
  • Given the password field is empty, When the user taps sign in, Then the error 'Password is required' is shown for the password field
  • +2 more
View Full Story →
Validate Email Format Before Submitting Login
medium 2 pts

As a As a Organization Administrator

I want I want the app to check that my email address is in a valid format before sending my login request

So that So that I get immediate feedback if I have made a typo in my email, rather than waiting for a server round-trip to tell me something is wrong

Acceptance Criteria
  • Given the email field contains 'notanemail', When the user taps the sign-in button, Then inline validation displays 'Please enter a valid email address' adjacent to the email field and no network request is made
  • Given the email field is completely empty, When the user taps sign in, Then the error 'Email address is required' is shown for the email field
  • Given the password field is empty, When the user taps sign in, Then the error 'Password is required' is shown for the password field
  • +2 more
View Full Story →
Toggle Password Visibility While Typing
high 2 pts

As a As a Peer Mentor (Likeperson)

I want I want to toggle the visibility of the password I am typing

So that So that I can verify I have typed my password correctly before submitting, reducing failed login attempts

Acceptance Criteria
  • Given the login form is visible, When the user looks at the password field, Then an eye icon toggle button is visible on the right side of the field
  • Given the password is hidden (default), When the user taps the eye icon, Then the password text becomes visible and the icon changes to indicate it can be hidden again
  • Given the password is visible, When the user taps the eye icon again, Then the password text is hidden and the icon reverts
  • +2 more
View Full Story →
Receive Plain-Language Error Feedback on Login Failure
high 3 pts

As a As a Peer Mentor (Likeperson)

I want I want to see a clear, plain-language error message when my login fails

So that So that I understand what went wrong and know what action to take next without feeling confused or locked out

Acceptance Criteria
  • Given incorrect credentials are submitted, When authentication fails, Then the message 'Incorrect email or password. Please try again.' is displayed prominently below the form
  • Given a network timeout occurs during login, When the request fails, Then the message 'Unable to connect. Check your internet connection and try again.' is shown
  • Given a screen reader is active and an error appears, When the error is rendered, Then the screen reader announces the error text automatically without requiring the user to navigate to it
  • +2 more
View Full Story →
Login on a Keyboard-Aware Layout Without Field Occlusion
high 3 pts

As a As a Peer Mentor (Likeperson)

I want I want the login form fields to remain visible and reachable while the software keyboard is open

So that So that I can see what I am typing without scrolling awkwardly or having the submit button hidden behind the keyboard

Acceptance Criteria
  • Given the login screen is displayed on an iPhone SE (small viewport), When the user taps the password field and the keyboard opens, Then the password field and sign-in button are both visible above the keyboard without manual scrolling
  • Given the keyboard is open and the user fills in both fields, When the user taps sign in, Then the button is tappable and is not hidden behind the keyboard
  • Given the user submits the form (e.g. by pressing the keyboard's return key), When the keyboard dismisses, Then the layout returns to its original state without visual glitches
  • +2 more
View Full Story →
Transition Seamlessly from Email Login to Biometric Authentication
high 8 pts

As a As a Peer Mentor (Likeperson)

I want I want the app to offer biometric login (Face ID or fingerprint) after I have successfully logged in once with my email and password

So that So that subsequent logins are fast and effortless, enabling me to open the app quickly in real-world situations between peer support interactions

Acceptance Criteria
  • Given a successful first email/password login on a biometric-capable device, When the user reaches the home screen, Then a prompt appears offering to enable Face ID or fingerprint login for future sessions
  • Given the user accepts biometric setup, When they next open the app with a valid stored session, Then the biometric prompt is shown instead of the login form
  • Given biometric authentication succeeds, When the session is resumed, Then the user is navigated to the home screen within 1 second
  • +3 more
View Full Story →
Toggle Password Visibility While Typing
high 2 pts

As a As a Coordinator

I want I want to toggle the visibility of the password I am typing

So that So that I can verify I have typed my password correctly before submitting, reducing failed login attempts

Acceptance Criteria
  • Given the login form is visible, When the user looks at the password field, Then an eye icon toggle button is visible on the right side of the field
  • Given the password is hidden (default), When the user taps the eye icon, Then the password text becomes visible and the icon changes to indicate it can be hidden again
  • Given the password is visible, When the user taps the eye icon again, Then the password text is hidden and the icon reverts
  • +2 more
View Full Story →
Receive Plain-Language Error Feedback on Login Failure
high 3 pts

As a As a Coordinator

I want I want to see a clear, plain-language error message when my login fails

So that So that I understand what went wrong and know what action to take next without feeling confused or locked out

Acceptance Criteria
  • Given incorrect credentials are submitted, When authentication fails, Then the message 'Incorrect email or password. Please try again.' is displayed prominently below the form
  • Given a network timeout occurs during login, When the request fails, Then the message 'Unable to connect. Check your internet connection and try again.' is shown
  • Given a screen reader is active and an error appears, When the error is rendered, Then the screen reader announces the error text automatically without requiring the user to navigate to it
  • +2 more
View Full Story →
Login on a Keyboard-Aware Layout Without Field Occlusion
high 3 pts

As a As a Coordinator

I want I want the login form fields to remain visible and reachable while the software keyboard is open

So that So that I can see what I am typing without scrolling awkwardly or having the submit button hidden behind the keyboard

Acceptance Criteria
  • Given the login screen is displayed on an iPhone SE (small viewport), When the user taps the password field and the keyboard opens, Then the password field and sign-in button are both visible above the keyboard without manual scrolling
  • Given the keyboard is open and the user fills in both fields, When the user taps sign in, Then the button is tappable and is not hidden behind the keyboard
  • Given the user submits the form (e.g. by pressing the keyboard's return key), When the keyboard dismisses, Then the layout returns to its original state without visual glitches
  • +2 more
View Full Story →
Transition Seamlessly from Email Login to Biometric Authentication
high 8 pts

As a As a Coordinator

I want I want the app to offer biometric login (Face ID or fingerprint) after I have successfully logged in once with my email and password

So that So that subsequent logins are fast and effortless, enabling me to open the app quickly in real-world situations between peer support interactions

Acceptance Criteria
  • Given a successful first email/password login on a biometric-capable device, When the user reaches the home screen, Then a prompt appears offering to enable Face ID or fingerprint login for future sessions
  • Given the user accepts biometric setup, When they next open the app with a valid stored session, Then the biometric prompt is shown instead of the login form
  • Given biometric authentication succeeds, When the session is resumed, Then the user is navigated to the home screen within 1 second
  • +3 more
View Full Story →
Toggle Password Visibility While Typing
high 2 pts

As a As a Organization Administrator

I want I want to toggle the visibility of the password I am typing

So that So that I can verify I have typed my password correctly before submitting, reducing failed login attempts

Acceptance Criteria
  • Given the login form is visible, When the user looks at the password field, Then an eye icon toggle button is visible on the right side of the field
  • Given the password is hidden (default), When the user taps the eye icon, Then the password text becomes visible and the icon changes to indicate it can be hidden again
  • Given the password is visible, When the user taps the eye icon again, Then the password text is hidden and the icon reverts
  • +2 more
View Full Story →
Receive Plain-Language Error Feedback on Login Failure
high 3 pts

As a As a Organization Administrator

I want I want to see a clear, plain-language error message when my login fails

So that So that I understand what went wrong and know what action to take next without feeling confused or locked out

Acceptance Criteria
  • Given incorrect credentials are submitted, When authentication fails, Then the message 'Incorrect email or password. Please try again.' is displayed prominently below the form
  • Given a network timeout occurs during login, When the request fails, Then the message 'Unable to connect. Check your internet connection and try again.' is shown
  • Given a screen reader is active and an error appears, When the error is rendered, Then the screen reader announces the error text automatically without requiring the user to navigate to it
  • +2 more
View Full Story →
Login on a Keyboard-Aware Layout Without Field Occlusion
high 3 pts

As a As a Organization Administrator

I want I want the login form fields to remain visible and reachable while the software keyboard is open

So that So that I can see what I am typing without scrolling awkwardly or having the submit button hidden behind the keyboard

Acceptance Criteria
  • Given the login screen is displayed on an iPhone SE (small viewport), When the user taps the password field and the keyboard opens, Then the password field and sign-in button are both visible above the keyboard without manual scrolling
  • Given the keyboard is open and the user fills in both fields, When the user taps sign in, Then the button is tappable and is not hidden behind the keyboard
  • Given the user submits the form (e.g. by pressing the keyboard's return key), When the keyboard dismisses, Then the layout returns to its original state without visual glitches
  • +2 more
View Full Story →
Transition Seamlessly from Email Login to Biometric Authentication
high 8 pts

As a As a Organization Administrator

I want I want the app to offer biometric login (Face ID or fingerprint) after I have successfully logged in once with my email and password

So that So that subsequent logins are fast and effortless, enabling me to open the app quickly in real-world situations between peer support interactions

Acceptance Criteria
  • Given a successful first email/password login on a biometric-capable device, When the user reaches the home screen, Then a prompt appears offering to enable Face ID or fingerprint login for future sessions
  • Given the user accepts biometric setup, When they next open the app with a valid stored session, Then the biometric prompt is shown instead of the login form
  • Given biometric authentication succeeds, When the session is resumed, Then the user is navigated to the home screen within 1 second
  • +3 more
View Full Story →
Sign In with Email and Password
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want I want to sign in to the app using my email address and password

So that So that I can access my activity registration tools, contact list, and reporting features securely

Acceptance Criteria
  • Given the app is launched and no session exists, When the user navigates past org selection, Then the login screen is displayed with email and password fields and a sign-in button
  • Given the login screen is visible, When the user taps the password field, Then the keyboard appears and the form scrolls so the password field remains visible above the keyboard
  • Given valid credentials are entered, When the user taps sign in, Then the app authenticates via Supabase Auth and navigates to the peer mentor home screen within 3 seconds
  • +3 more
View Full Story →
Remain Logged In Across App Restarts
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want I want the app to remember that I am logged in when I close and reopen it

So that So that I do not need to re-enter my credentials every time I want to register an activity, which would make the app too cumbersome to use regularly

Acceptance Criteria
  • Given the user has successfully logged in, When the user closes the app completely and reopens it, Then the app navigates directly to the peer mentor home screen without showing the login form
  • Given a stored session token exists, When the app launches, Then the session manager validates the token with Supabase before routing the user, completing within 1 second on a normal connection
  • Given the stored token has expired, When the app launches, Then the user is redirected to the login screen with the message 'Your session has expired. Please sign in again.'
  • +2 more
View Full Story →
Access Login Screen with Full Screen Reader Support
critical 5 pts

As a As a Peer Mentor (Likeperson)

I want I want to complete the email and password login flow using only a screen reader (VoiceOver or TalkBack)

So that So that I can authenticate independently without sighted assistance, as required by users with visual impairments

Acceptance Criteria
  • Given VoiceOver is enabled and the login screen is displayed, When the user swipes right to navigate, Then focus moves in order: organisation name header → email field → password field → visibility toggle → sign-in button
  • Given focus is on the email field, When VoiceOver reads it, Then the announcement includes the label 'Email address', the field role 'text field', and any current value
  • Given focus is on the password field, When VoiceOver reads it, Then the announcement includes the label 'Password' and the role 'secure text field'
  • +3 more
View Full Story →
Sign In with Email and Password
critical 5 pts

As a As a Coordinator

I want I want to sign in to the app using my email address and password

So that So that I can access my activity registration tools, contact list, and reporting features securely

Acceptance Criteria
  • Given the app is launched and no session exists, When the user navigates past org selection, Then the login screen is displayed with email and password fields and a sign-in button
  • Given the login screen is visible, When the user taps the password field, Then the keyboard appears and the form scrolls so the password field remains visible above the keyboard
  • Given valid credentials are entered, When the user taps sign in, Then the app authenticates via Supabase Auth and navigates to the peer mentor home screen within 3 seconds
  • +3 more
View Full Story →
Remain Logged In Across App Restarts
critical 5 pts

As a As a Coordinator

I want I want the app to remember that I am logged in when I close and reopen it

So that So that I do not need to re-enter my credentials every time I want to register an activity, which would make the app too cumbersome to use regularly

Acceptance Criteria
  • Given the user has successfully logged in, When the user closes the app completely and reopens it, Then the app navigates directly to the peer mentor home screen without showing the login form
  • Given a stored session token exists, When the app launches, Then the session manager validates the token with Supabase before routing the user, completing within 1 second on a normal connection
  • Given the stored token has expired, When the app launches, Then the user is redirected to the login screen with the message 'Your session has expired. Please sign in again.'
  • +2 more
View Full Story →
Access Login Screen with Full Screen Reader Support
critical 5 pts

As a As a Coordinator

I want I want to complete the email and password login flow using only a screen reader (VoiceOver or TalkBack)

So that So that I can authenticate independently without sighted assistance, as required by users with visual impairments

Acceptance Criteria
  • Given VoiceOver is enabled and the login screen is displayed, When the user swipes right to navigate, Then focus moves in order: organisation name header → email field → password field → visibility toggle → sign-in button
  • Given focus is on the email field, When VoiceOver reads it, Then the announcement includes the label 'Email address', the field role 'text field', and any current value
  • Given focus is on the password field, When VoiceOver reads it, Then the announcement includes the label 'Password' and the role 'secure text field'
  • +3 more
View Full Story →
Sign In with Email and Password
critical 5 pts

As a As a Organization Administrator

I want I want to sign in to the app using my email address and password

So that So that I can access my activity registration tools, contact list, and reporting features securely

Acceptance Criteria
  • Given the app is launched and no session exists, When the user navigates past org selection, Then the login screen is displayed with email and password fields and a sign-in button
  • Given the login screen is visible, When the user taps the password field, Then the keyboard appears and the form scrolls so the password field remains visible above the keyboard
  • Given valid credentials are entered, When the user taps sign in, Then the app authenticates via Supabase Auth and navigates to the peer mentor home screen within 3 seconds
  • +3 more
View Full Story →
Remain Logged In Across App Restarts
critical 5 pts

As a As a Organization Administrator

I want I want the app to remember that I am logged in when I close and reopen it

So that So that I do not need to re-enter my credentials every time I want to register an activity, which would make the app too cumbersome to use regularly

Acceptance Criteria
  • Given the user has successfully logged in, When the user closes the app completely and reopens it, Then the app navigates directly to the peer mentor home screen without showing the login form
  • Given a stored session token exists, When the app launches, Then the session manager validates the token with Supabase before routing the user, completing within 1 second on a normal connection
  • Given the stored token has expired, When the app launches, Then the user is redirected to the login screen with the message 'Your session has expired. Please sign in again.'
  • +2 more
View Full Story →
Access Login Screen with Full Screen Reader Support
critical 5 pts

As a As a Organization Administrator

I want I want to complete the email and password login flow using only a screen reader (VoiceOver or TalkBack)

So that So that I can authenticate independently without sighted assistance, as required by users with visual impairments

Acceptance Criteria
  • Given VoiceOver is enabled and the login screen is displayed, When the user swipes right to navigate, Then focus moves in order: organisation name header → email field → password field → visibility toggle → sign-in button
  • Given focus is on the email field, When VoiceOver reads it, Then the announcement includes the label 'Email address', the field role 'text field', and any current value
  • Given focus is on the password field, When VoiceOver reads it, Then the announcement includes the label 'Password' and the role 'secure text field'
  • +3 more
View Full Story →