P0: Fix variable shadowing in ClubService.createClub/updateClub and
ChallengeService.createChallenge/updateChallenge — renamed local
'var request' to 'var urlRequest' so JSONEncoder encodes the
typed parameter, not the URLRequest.
P1: Wire CreateClubSheet and CreateChallengeSheet to parent ViewModel —
sheets now receive viewModel and call createClub/createChallenge
before dismissing.
P2: Extract HTTPMethod enum to shared Utils/HTTPMethod.swift (was
defined in NotificationService). Remove dead 'body' parameter from
buildRequest in all three services. Add error alert UI to
ClubsView and ChallengesView.
P3: Replace forced URL unwrap with static let defaultBaseURL in all
three services. Fix MockChallengeService.updateChallenge to track
updateCalled instead of always throwing notFound.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
P1: Fix TestFlight deployment — add LendairApp executable target,
use xcodebuild archive/export instead of swift build for IPA
P2: Fix swift-format — use built-in 'swift format lint' (Swift 5.6+)
instead of external 'swift-format' binary
P3: Create missing index.html for Vite build entry point
P3: Update vercel-action from v30 to v25 (better maintained)
- iOS: swift lint, build verification, and test on PR
- Web: typecheck, vitest tests, build, and Vercel deployment (ready for web project)
- Package.swift: defines Lendair as buildable Swift package
- Test target: LendairTests with XCTest boilerplate
Co-Authored-By: Paperclip <noreply@paperclip.ing>