User Interface low complexity frontendmobile
0
Dependencies
0
Dependents
0
Entities
0
Integrations

Description

In-app notification card displayed in the Notifications tab when a peer mentor has not recorded contact within the configured window. Includes a clear call-to-action button that deep-links directly to the relevant assignment detail screen.

Feature: Assignment Follow-up Reminders

reminder-notification-card

Summaries

Timely reminders to peer mentors are essential for maintaining consistent support relationships — the core value proposition of the platform. The Reminder Notification Card surfaces these reminders directly in the app's notification center with a clear call-to-action, eliminating friction between a mentor reading a reminder and taking the required action. By deep-linking directly to the relevant assignment, the component reduces the steps between awareness and action, directly improving mentor contact compliance rates. Higher compliance produces better outcomes for mentees and generates stronger evidence of program effectiveness, which is critical for sustaining institutional partnerships and securing continued funding.

Low-complexity mobile UI component deliverable within a single sprint. Deep-link routing to the assignment detail screen requires early coordination with the navigation team to confirm the URI scheme and route registration — a missing route registration will cause silent tap failures that are hard to catch without manual testing. `formatElapsedTime(lastContactDate)` edge cases (same day, multiple weeks elapsed) require UX-reviewed copy before implementation. Dismissal and mark-as-read interactions must be verified against the notification-repository interface to confirm persistence is working correctly end-to-end.

Widget tests should cover CTA tap, dismiss, and elapsed time display variants. Accessibility review is required before release: contrast ratios and screen-reader semantics must meet platform standards.

Stateless Flutter widget consuming a `Reminder` domain model and an `Assignment` reference. `buildAssignmentLink(assignmentId)` generates a deep-link URI (e.g., `app://assignments/{assignmentId}`) consumed by the `onTap` handler via GoRouter or Navigator 2.0 push. `formatElapsedTime(lastContactDate)` should use `DateTime.now().difference(lastContactDate)` with tiered string output ('Today', '3 days ago', '2 weeks ago'). `markAsRead` and `dismiss` delegate to `NotificationRepository` through the parent BLoC or provider — the card must remain stateless, exposing these only as `onTap`/`onDismiss` callbacks.

Wrap the CTA button in a `Semantics` widget with a descriptive label for TalkBack/VoiceOver compliance. Test with long assignment names to verify text overflow behavior and with mock dates covering all elapsed time tiers.

Responsibilities

  • Render reminder message with assignment context
  • Provide deep-link CTA to assignment screen
  • Display time elapsed since last contact
  • Support dismissal and mark-as-read interactions

Interfaces

ReminderNotificationCard({reminder, onTap, onDismiss})
buildAssignmentLink(assignmentId)
formatElapsedTime(lastContactDate)
markAsRead(reminderId)
dismiss(reminderId)