8000 [Feature] Annual renewal system · Issue #283 · jra3/mulm · GitHub
[go: up one dir, main page]

Skip to content

[Feature] Annual renewal system #283

Open

Description

@jra3

Current delivery plan — 2026-10-15

Delivery plan: #558; launch verification: #564. Preserve the original requirements and design discussion below, with these implementation constraints:

  • Use the independent CARES registration model introduced in Give CARES registrations their own table #478, not CARES fields on a collection entry. Collection removal must not silently destroy registration history.
  • The January 21 design comment specifies January 1 prompts, a grace period through March 31, and reactivation by confirming. Reconcile the older body's “current calendar year = active” shortcut with that decision in one documented state rule used by profile, coverage and reports.
  • Store enough confirmation history to prove consecutive confirmed years; elapsed days between registration and last confirmation is insufficient. Decide how to represent existing registrations with incomplete history, without fabricating past confirmations. Record that decision before migration.
  • Implement individual and bulk confirmation end to end, owner-only and safe on repeated requests, with clear active/pending/lapsed presentation and retained history.
  • Test year and March 31/April 1 boundaries, skipped years, legacy history, bulk failure, repeat confirmations and unauthorized access using a controlled clock.

Blocked by: None externally. Historical-data policy and the precise timezone/date boundary must be recorded before implementation is considered ready. Keep the admin-only gate while building this flow.

Earlier requirements and design

Overview

Members confirm their CARES registrations annually to maintain active status.

Parent: #276

Phase 2 - Activities

Requirements

  • FR8.1: Track last confirmation date per registration
  • FR8.2: Prompt members to confirm at start of calendar year
  • FR8.3: Unconfirmed registrations marked as "lapsed" (not deleted)
  • FR8.4: Consecutive confirmations earn longevity recognition

Logic

  • Registration is "active" if cares_last_confirmed is within current calendar year
  • Unconfirmed registrations become "lapsed" but data is retained
  • Longevity seals count consecutive confirmed years
  • 2+ consecutive years = longevity recognition

UX

  • Dashboard notification for registrations needing confirmation
  • Bulk "confirm all" option
  • Individual confirmation per species
  • Visual distinction for lapsed vs active registrations

Acceptance Criteria

  • Annual confirmation prompt appears for registered species
  • Confirmation updates cares_last_confirmed date
  • Lapsed registrations are visually distinguished
  • Longevity indicator shows for 2+ consecutive years
  • Bulk confirmation option available

Activity

  1. added
    enhancementNew feature or request
    ui/uxUser interface and user experience improvements
    on Jan 21, 2026
  2. jra3 commented on Jan 21, 2026

    @jra3
    OwnerAuthor

    UI/UX Design

    Notification Delivery

    Primary: Dashboard banner on member's CARES profile section
    Secondary: Email notification (optional, if email system exists)

    Timing

    • Prompt appears on first login after January 1 of each year
    • Check: cares_last_confirmed < current year

    Renewal UI

    On CARES profile section, show renewal banner when species need confirmation:

    ┌────────────────────────────────────────────────────────┐
    │ ⏰ Annual CARES Renewal                                │
    │                                                        │
    │ Confirm you're still maintaining your registered       │
    │ CARES species for 2025.                               │
    │                                                        │
    │ 3 species need confirmation                           │
    │                                                        │
    │ [Confirm All]  or confirm individually below          │
    └────────────────────────────────────────────────────────┘
    

    Style: bg-yellow-50 border-l-4 border-yellow-400

    Bulk Confirmation

    • "Confirm All" button confirms all pending species at once
    • Individual "Confirm" button on each species card for selective confirmation
    • After confirmation: "✓ Confirmed for 2025"

    Lapsed Visual Treatment

    Species not confirmed by end of Q1 (March 31):

    • Card shows warning badge: "⚠️ Lapsed"
    • Card has reduced opacity (0.7)
    • Not included in liaison reports as "active"
    • Can still be re-activated by confirming

    Re-Activation

    Lapsed registrations can be renewed at any time:

    • "Reactivate" button on lapsed species card
    • Updates cares_last_confirmed to current date
    • Restores active status

    Longevity Milestones

    Badge progression shown on species cards:

    • 2+ years: ⭐ (bronze star)
    • 5+ years: ⭐⭐ (silver star)
    • 10+ years: ⭐⭐⭐ (gold star)

    Hover shows: "Maintained for X consecutive years since [year]"

  3. added a commit that references this issue on Feb 22, 2026
  4. added
    priority:mediumMedium priority - important but not urgent
    needs-triageMaintainer needs to evaluate this issue
    on Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestneeds-triageMaintainer needs to evaluate this issuepriority:mediumMedium priority - important but not urgentui/uxUser interface and user experience improvements

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0