Add Phase 2 community features: clubs and challenges (FRE-4664)

Implement full MVVM stack for two new community features:

Clubs:
- Persistent runner groups with type, privacy, and member management
- Club discovery, creation, join/leave, and invite workflows
- Member roles (Owner, Admin, Member) and capacity limits

Challenges:
- Time-bound competitive goals with progress tracking and leaderboards
- Challenge types: distance, time, frequency, elevation, calories, streak
- Progress submission, participation status, and ranking

Files:
- Models: Club.swift, Challenge.swift
- Services: ClubService.swift, ChallengeService.swift
- ViewModels: ClubViewModel.swift, ChallengeViewModel.swift
- Views: ClubsView.swift, ClubDetailView.swift, ChallengesView.swift, ChallengeDetailView.swift
- Tests: ClubServiceTests.swift, ChallengeServiceTests.swift
- Updated README.md with new feature documentation
This commit is contained in:
Senior Engineer
2026-05-03 19:10:34 -04:00
committed by Michael Freno
parent 57a460761a
commit 88d57a3389
29 changed files with 4012 additions and 63 deletions

View File

@@ -0,0 +1,37 @@
# Atomic facts for Lendair iOS project
- id: "lendair-ios-fre4686"
type: "project_milestone"
date: "2026-05-03"
title: "Notifications screen implementation"
status: "in_progress"
details:
parent_issue: "FRE-4686"
child_issues:
- "FRE-4737"
- "FRE-4738"
- "FRE-4739"
- "FRE-4740"
implementation_approach: "MVVM with SwiftUI"
notification_types:
- "LOAN_APPROVED"
- "LOAN_REJECTED"
- "PAYMENT_RECEIVED"
- "PAYMENT_DUE"
- "NEW_LENDER"
- "SYSTEM_UPDATE"
files_created:
- "Lendair/Views/NotificationsView.swift"
- "Lendair/Views/NotificationRowView.swift"
- "Lendair/ViewModels/NotificationsViewModel.swift"
team分工:
founding_engineer:
- "FRE-4737"
- "FRE-4738"
senior_engineer:
- "FRE-4739"
- "FRE-4740"
code_reviewer:
reviewing:
- "FRE-4737"
- "FRE-4738"

View File

@@ -0,0 +1,54 @@
# Lendair iOS Project
## Overview
Lendair is an iOS peer-to-peer lending application with real-time notifications, user profiles, and loan management.
## Current Active Work
**FRE-4686**: Add Notifications screen to Lendair iOS app
### Implementation Status
**Recovery:**
- FRE-4750: Issue recovery task (done - CTO)
**Completed/In Review:**
- FRE-4737: NotificationsView component (in_review - Code Reviewer)
- FRE-4738: Mark-as-read actions (in_review - Code Reviewer)
**Pending:**
- FRE-4739: MainTabView integration (todo - Senior Engineer)
- FRE-4740: Unread badge count (todo - Senior Engineer)
## Architecture
### Notification System
- **View Layer**: NotificationsView.swift, NotificationRowView.swift
- **ViewModel Layer**: NotificationsViewModel.swift (MVVM pattern)
- **Data Layer**: tRPC notifications router integration
- **Notification Types**: LOAN_APPROVED, LOAN_REJECTED, PAYMENT_RECEIVED, PAYMENT_DUE, NEW_LENDER, SYSTEM_UPDATE
### Key Files
- `Lendair/Views/NotificationsView.swift` - Main container with SwiftUI List
- `Lendair/Views/NotificationRowView.swift` - Individual notification row
- `Lendair/ViewModels/NotificationsViewModel.swift` - Data fetching and state management
## Technical Decisions
1. **MVVM Pattern**: Used for separation of concerns and testability
2. **SwiftUI List**: For efficient rendering of notification collections
3. **Pull-to-refresh**: Native Refreshable API for manual refresh
4. **Empty State**: Custom empty state view with friendly messaging
5. **Notification Types**: Enum-based system for type-safe notification handling
## Dependencies
- Backend: `web/src/server/api/routers/notifications.ts`
- Database: `web/src/server/db/schema.ts` (notifications table)
## Team Assignments
- **Founding Engineer**: FRE-4737, FRE-4738 (core UI and actions)
- **Code Reviewer**: Reviewing FRE-4737, FRE-4738
- **Senior Engineer**: FRE-4739, FRE-4740 (integration and polish)