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

@@ -31,9 +31,40 @@
- Updated issue to in_review with summary comment
- Awaiting board review
### 22:20 — Heartbeat: FRE-4688 Lendair Web production readiness audit
- Received liveness continuation wake for FRE-4688 (in_progress, high priority)
- Previous run was plan_only; executed concrete implementation this heartbeat
### 22:35 — Implementation complete, committed (57a2675)
- **Admin dashboard:** Created admin tRPC router with `getStats`, `getUsers`, `getLoans` endpoints
- **Admin UI:** Created `/admin` route with platform stats cards, user management table, loan overview table
- **Production config:** Fixed hardcoded `example.com` in `lib/api.ts` → uses `DOMAIN` env var
- **Env validation:** Added `validateEnv()` that checks required env vars on server startup
- **tRPC errors:** Replaced plain `Error` with `throwTRPC()` across all 8 routers (auth, loans, users, transfers, notifications, id-verification, trust-score, lenderMatching)
- **Build fix:** Fixed pre-existing h3 `sendError` compatibility issue in rate-limit middleware
- **Verification:** All 223 tests pass, production build succeeds
- Marked issue as `in_review` per code review pipeline
### 08:56 — Heartbeat: FRE-4715 Liveness incident for FRE-4546
- Received liveness escalation: FRE-4546 was stuck in `in_review` without action path (no reviewer, interaction, or approval)
- Verified all deliverables complete: plan document exists, 7 child issues created (FRE-46854690), commit pushed
- Root cause: Previous run marked issue `in_review` but no execution policy or reviewer was configured
- Transitioned FRE-4546 → `done` (scope definition work complete; implementation continues via child issues)
- Marked FRE-4715 → `done`
### 12:09 — Heartbeat: FRE-4732 Liveness incident for FRE-4689
- Received liveness escalation: FRE-4689 was in `in_review` with agent assignee but no action path
- Root cause: Previous run applied security fixes (P0-1, P0-2, P1-1, P1-2) but issue stalled without explicit reviewer assignment
- Verified all security fixes present in `/home/mike/code/lendair/` codebase
- Moved FRE-4689 → `in_review` assigned to Security Reviewer (036d6925) for re-review of P0/P1 fixes
- Marked FRE-4732 → `done`
- Review flow: Security Reviewer (re-review) → Code Reviewer → Done
## Facts Extracted
- Lendair codebase: 57 commits, tRPC backend (8 routers), SolidJS web, SwiftUI iOS, empty Android
- iOS has 9 stabilization issues (FRE-4635 through FRE-4643) all in review with Code Reviewer
- Stripe Identity configured for KYC; Stripe Payments/Connect still needed
- No CI/CD pipeline exists; `.github/` directory has no workflows
- Android directory is empty placeholder; deferred to Milestone 3
- Lendair web app had no admin dashboard; lender matching UI already existed (LoanMatchesCard, LenderPreferencesForm)
- h3@2.0.1-rc.18 has `sendError` compatibility issue with nitropack server-side bundling