Yearly Impact Summary
Feature Detail
Description
This feature provides peer mentors and coordinators with an annual retrospective of their contributions, presented in a visually engaging, story-driven format inspired by Spotify Wrapped. Users see animated statistics, milestone highlights, and personalized insights covering the full calendar year as well as a mid-year half-year summary. The experience transforms raw activity logs into a meaningful narrative that celebrates the volunteer's impact on individuals and the broader community, making invisible effort visible and emotionally resonant.
Analysis
Volunteer retention is a critical challenge for all partner organisations; research consistently shows that recognition and a sense of meaning are stronger retention drivers than financial incentives. By giving peer mentors a tangible, shareable summary of their year, the feature creates an emotional connection to the organisation and reinforces the value of continued participation. Coordinators who receive an equivalent view gain motivation and a shareable artifact for internal communication and recruitment. The feature also serves as organic marketing: a visually striking annual summary encourages social sharing, increasing awareness of the peer mentor programme and lowering recruitment costs for all partner organisations.
The feature is built on top of pre-aggregated statistics stored in the impact_summaries table, populated by the Impact Calculation Service after each reporting period. The animated UI layer uses Flutter's animation framework (AnimationController, Tween, Hero transitions) to create the Wrapped-style reveal sequence with minimal performance overhead. A configurable trigger date (e.g., 31 December and 30 June) fires a push notification via the Push Notification Gateway to invite users to view their summary. The summary is generated server-side as a JSON payload so it can be rendered offline and shared as a static image or deep-link. The implementation must handle users with zero activity gracefully and support the organisation-specific label system so terminology matches each partner's vocabulary.
Dependencies
Definition of Done
User Stories (17)
As a As a user
I want I want to be able to view my impact summary without an internet connection after having loaded it once
So that So that I can revisit and share my summary at any time regardless of network availability, including in areas with poor connectivity
- Given the user has previously loaded their impact summary with network access, when they open the summary screen with no network connection, then the cached summary renders without errors
- Given the device has no network and the summary is cached, when the user navigates through all slides, then all content including statistics and animations displays correctly
- Given a new summary is generated by the server, when the user next opens the app with network access, then the stale cache is replaced with the updated summary
- +1 more
As a As a user
I want I want to see an encouraging and informative screen if I have no recorded activities for the summary period
So that So that the absence of data is handled gracefully without presenting a confusing error or blank screen that damages my experience of the app
- Given a user has zero activities for the summary period, when their summary is opened, then an encouraging empty-state screen is shown instead of blank content or an error
- Given the empty-state screen is shown, when the user taps the call-to-action, then they are navigated to the activity registration flow
- Given the empty-state screen is shown, when it is displayed, then the screen still uses the animated summary layout so the visual design remains consistent
- +1 more
As a As a user
I want I want to see my key impact metrics (total hours, contacts helped, activities completed) animate upward from zero to their final values as I progress through the summary
So that So that the reveal of each statistic feels celebratory and emotionally impactful rather than a static data display
- Given a metric slide becomes active in the summary sequence, when the animation triggers, then the numeric value counts up from 0 to the final value over approximately 1.5 seconds
- Given the device is a low-end smartphone, when the count-up animation runs, then frame rate does not drop below 30fps during the animation
- Given the user navigates back to a previously viewed metric slide, when the slide re-enters view, then the count-up animation replays from zero
- +1 more
As a As a user
I want I want to receive and view a half-year impact summary on 30 June covering the first six months of the year
So that So that I receive recognition and motivational reinforcement at the midpoint of the year, not only at year-end
- Given the date is 30 June, when the Impact Summary Trigger Service fires, then half-year summaries are generated for all eligible users
- Given a half-year summary is available, when the user opens it, then the period label clearly indicates 'First Half [Year]' rather than 'Annual Review'
- Given both an annual and a half-year summary exist, when the user navigates to summaries, then both are accessible and clearly differentiated by period label
- +1 more
As a As a user
I want I want to share my impact summary as a static image or a deep link from within the summary screen
So that So that I can share my volunteer achievements on social media or with colleagues, making my contributions visible beyond the app
- Given the user is viewing an impact summary, when they tap the share button, then the native share sheet appears with a pre-generated image or deep link
- Given the device has no network connection but the summary is cached, when the user taps share, then a shareable image is still generated successfully from the cached payload
- Given the share sheet is opened, when the user selects a social media app, then the image or link is correctly passed to that app
- +2 more
As a As a user
I want I want to be able to view my impact summary without an internet connection after having loaded it once
So that So that I can revisit and share my summary at any time regardless of network availability, including in areas with poor connectivity
- Given the user has previously loaded their impact summary with network access, when they open the summary screen with no network connection, then the cached summary renders without errors
- Given the device has no network and the summary is cached, when the user navigates through all slides, then all content including statistics and animations displays correctly
- Given a new summary is generated by the server, when the user next opens the app with network access, then the stale cache is replaced with the updated summary
- +1 more
As a As a user
I want I want to see an encouraging and informative screen if I have no recorded activities for the summary period
So that So that the absence of data is handled gracefully without presenting a confusing error or blank screen that damages my experience of the app
- Given a user has zero activities for the summary period, when their summary is opened, then an encouraging empty-state screen is shown instead of blank content or an error
- Given the empty-state screen is shown, when the user taps the call-to-action, then they are navigated to the activity registration flow
- Given the empty-state screen is shown, when it is displayed, then the screen still uses the animated summary layout so the visual design remains consistent
- +1 more
As a As a user
I want I want to see my key impact metrics (total hours, contacts helped, activities completed) animate upward from zero to their final values as I progress through the summary
So that So that the reveal of each statistic feels celebratory and emotionally impactful rather than a static data display
- Given a metric slide becomes active in the summary sequence, when the animation triggers, then the numeric value counts up from 0 to the final value over approximately 1.5 seconds
- Given the device is a low-end smartphone, when the count-up animation runs, then frame rate does not drop below 30fps during the animation
- Given the user navigates back to a previously viewed metric slide, when the slide re-enters view, then the count-up animation replays from zero
- +1 more
As a As a user
I want I want to receive and view a half-year impact summary on 30 June covering the first six months of the year
So that So that I receive recognition and motivational reinforcement at the midpoint of the year, not only at year-end
- Given the date is 30 June, when the Impact Summary Trigger Service fires, then half-year summaries are generated for all eligible users
- Given a half-year summary is available, when the user opens it, then the period label clearly indicates 'First Half [Year]' rather than 'Annual Review'
- Given both an annual and a half-year summary exist, when the user navigates to summaries, then both are accessible and clearly differentiated by period label
- +1 more
As a As a user
I want I want to share my impact summary as a static image or a deep link from within the summary screen
So that So that I can share my volunteer achievements on social media or with colleagues, making my contributions visible beyond the app
- Given the user is viewing an impact summary, when they tap the share button, then the native share sheet appears with a pre-generated image or deep link
- Given the device has no network connection but the summary is cached, when the user taps share, then a shareable image is still generated successfully from the cached payload
- Given the share sheet is opened, when the user selects a social media app, then the image or link is correctly passed to that app
- +2 more
As a As a Coordinator
I want I want administrators to be able to configure the annual and half-year summary trigger dates and feature flags for my organisation without requiring a code deployment
So that So that the summary generation schedule can be adjusted to align with our organisation's reporting calendar and rollout readiness
- Given an administrator updates the annual trigger date for an organisation, when the configured date arrives, then summaries are generated for that organisation's users on the new date
- Given an administrator disables the half-year summary for an organisation, when 30 June arrives, then no half-year summaries or notifications are generated for that organisation's users
- Given an administrator enables the feature for an organisation for the first time, when the next trigger date arrives, then summaries are generated for all eligible users in that organisation
- +1 more
As a As a user
I want I want to receive a push notification and an in-app notification card when my new impact summary has been generated
So that So that I am immediately informed and can access my summary with a single tap without having to remember to check
- Given a new impact summary is generated for a user, when the trigger service completes, then a push notification is dispatched within 5 minutes
- Given the user taps the push notification, when the app opens, then the Impact Summary Screen is shown directly without requiring additional navigation
- Given the user opens the Notifications screen, when a new impact summary is available, then an Impact Summary Notification Card appears at the top of the list with a 'View Summary' call-to-action
- +2 more
As a As a user
I want I want to navigate forward and backward through the individual story slides in my impact summary
So that So that I can review specific highlights at my own pace and revisit slides I found particularly meaningful
- Given the user is on a story slide, when they tap the forward region or swipe left, then the next slide transitions in using a hero animation
- Given the user is on a story slide past the first, when they tap the backward region or swipe right, then the previous slide is shown
- Given the user is on the last slide, when they tap forward, then a summary end-screen or close option is shown
- +2 more
As a As a user
I want I want to view my annual impact summary as an animated, story-driven retrospective covering the full calendar year
So that So that I can see the cumulative value of my volunteer contributions presented in a visually meaningful and emotionally resonant way
- Given a new annual summary has been generated, when the user opens the Impact Summary Screen, then the animated story sequence starts automatically from the first slide
- Given the user is on any slide, when they tap forward, then the next hero-transition slide is shown with smooth animation
- Given the summary payload is cached locally, when the user opens the summary without network access, then the full sequence renders correctly from the cached JSON
- +2 more
As a As a user
I want I want to receive a push notification and an in-app notification card when my new impact summary has been generated
So that So that I am immediately informed and can access my summary with a single tap without having to remember to check
- Given a new impact summary is generated for a user, when the trigger service completes, then a push notification is dispatched within 5 minutes
- Given the user taps the push notification, when the app opens, then the Impact Summary Screen is shown directly without requiring additional navigation
- Given the user opens the Notifications screen, when a new impact summary is available, then an Impact Summary Notification Card appears at the top of the list with a 'View Summary' call-to-action
- +2 more
As a As a user
I want I want to navigate forward and backward through the individual story slides in my impact summary
So that So that I can review specific highlights at my own pace and revisit slides I found particularly meaningful
- Given the user is on a story slide, when they tap the forward region or swipe left, then the next slide transitions in using a hero animation
- Given the user is on a story slide past the first, when they tap the backward region or swipe right, then the previous slide is shown
- Given the user is on the last slide, when they tap forward, then a summary end-screen or close option is shown
- +2 more
As a As a user
I want I want to view my annual impact summary as an animated, story-driven retrospective covering the full calendar year
So that So that I can see the cumulative value of my volunteer contributions presented in a visually meaningful and emotionally resonant way
- Given a new annual summary has been generated, when the user opens the Impact Summary Screen, then the animated story sequence starts automatically from the first slide
- Given the user is on any slide, when they tap forward, then the next hero-transition slide is shown with smooth animation
- Given the summary payload is cached locally, when the user opens the summary without network access, then the full sequence renders correctly from the cached JSON
- +2 more