medium priority low complexity frontend pending frontend specialist Tier 3

Acceptance Criteria

Tapping the quick-action link in PauseNotificationCard triggers navigation to the correct peer mentor profile detail screen using the mentor ID from the notification payload
Navigation uses the existing deep-link handler and does not implement a custom routing bypass
If mentor ID is null or invalid, the tap is a no-op and no navigation occurs (no crash, no error screen)
The profile deep-link route resolves correctly for all valid mentor IDs in the database
Navigation preserves back-stack: pressing back from the profile screen returns the user to the notifications screen
The quick-action link is keyboard/screen-reader focusable and has a meaningful accessibility label (e.g., 'View [mentor name]'s profile')
Deep-link routing is consistent with how other notification cards in the app navigate to detail screens
No hardcoded route strings — route constants are used from the central router configuration

Technical Requirements

frameworks
Flutter
go_router or equivalent app router
BLoC or Riverpod for state
data models
assignment
performance requirements
Navigation must complete within 300ms from tap to screen transition start
No unnecessary re-fetches triggered by deep-link navigation if profile data is already cached
security requirements
Mentor ID extracted from notification payload must be validated as a non-empty UUID before route construction
Route parameters must not expose internal database IDs in logs
ui components
PauseNotificationCard quick-action link widget
Peer mentor profile detail screen (existing)

Execution Context

Execution Tier
Tier 3

Tier 3 - 413 tasks

Can start after Tier 2 completes

Implementation Notes

Use the existing deep-link handler (e.g., a GoRouter `context.push` or named route) already used by other notification card types — do not introduce a new routing pattern. Extract the mentor ID from the notification payload model field (not from raw FCM data). Guard against null mentor ID with an early return in the `onTap` callback. The quick-action link widget should pass the `mentorId` as a constructor parameter so it is testable in isolation.

Avoid storing navigator state in the card widget itself; delegate entirely to the router.

Testing Requirements

Widget tests: verify that tapping the quick-action link emits the correct navigation event with the expected mentor ID; verify that a null/invalid mentor ID produces no navigation event and no exception. Integration smoke test: confirm the route resolves to the peer mentor detail screen in a pumped widget tree with a mock router. Accessibility: verify the tap target meets the 48x48dp minimum and has a semantic label.

Epic Risks (2)
medium impact low prob integration

The existing notification feed component may expect a specific notification model shape that does not map cleanly to the pause notification payload structure, requiring either payload transformation or feed refactoring.

Mitigation & Contingency

Mitigation: Review the notification-list-item and notification-model contracts before building the card. Design the pause-notification-card to extend or wrap the existing list item pattern rather than replacing it.

Contingency: If the feed contract is incompatible, implement a lightweight adapter that maps the pause notification payload to the feed's expected model shape, keeping the adapter isolated from the core card widget.

low impact low prob dependency

The app's existing toast/banner infrastructure may not support the auto-dismiss timeout duration or dismissal animation required for the peer mentor confirmation banner, necessitating a custom implementation that diverges from the design system.

Mitigation & Contingency

Mitigation: Audit the existing banner and toast components (in-app-notification-banner, notification-list-item) for configurable dismiss timeout before starting implementation. Prefer configuration over custom code.

Contingency: If the existing infrastructure cannot be configured, implement the banner as a thin wrapper with a custom auto-dismiss timer while reusing all visual tokens (colours, spacing, typography) from the design system to maintain consistency.