* fix(group_rides): make Join Group Ride dialog keyboard-safe in landscape (#69)
* fix(group_rides): responsive landscape form and keyboard scrolling in CreateGroupRideScreen (#70)
* fix(group_rides): constrain and scroll Attach Saved Route sheet in landscape (#75)
* fix(routes): make RoutePlannerScreen keyboard-safe and scrollable in landscape (#76)
* fix(clubs): make CreateClubScreen keyboard-safe and scrollable in landscape (#77)
* fix(forms): address PR #87 review findings on saved-route sheet and stop list auto-scrolling
---------
Co-authored-by: Developer <dev@example.com>
* fix(group_rides): prevent card bottom overflow in landscape grid (#68)
* fix(feed): ensure feed content and empty state scroll clear of share button (#71)
* fix(feed): make ShareRecentSessionModal keyboard-safe and scrollable in landscape
* fix(clubs): responsive grid and constrained card sizing in landscape (#73)
* fix(group_rides): prevent horizontal control clipping in Live Formation landscape (#74)
---------
Co-authored-by: Developer <dev@example.com>
* feat(clubs): enable admin group ride governance
* feat(clubs): add secure member ride discovery
* fix(clubs): protect meeting location in ride discovery
* feat(group-rides): secure club join moderation
* test(clubs): update ride discovery expectations
* test(founder-portal): update rides governance expectations
* fix(group-rides): resolve pre-merge findings on join moderation and discovery
- Block participant hard deletes for accepted status and organizer role for all callers
- Support atomic accessUids removal on invitation decline in firestore.rules
- Restrict mutual-block checks to approvals in GroupRideService, allowing decline of blocked requests
- Implement cursor-paginated candidate scanning with block filtering in website discovery API
- Add comprehensive emulator, vitest, and unit tests covering all 5 findings
* fix(discovery): page candidates until 30 eligible rides collected or query exhausted
- Remove artificial 150 candidate scan ceiling in club rides discovery route
- Continue cursor pagination until 30 unblocked eligible rides are collected or upcoming schedule query is exhausted
- Add test verifying pagination continues past 150 blocked rides to collect all 30 eligible rides
---------
Co-authored-by: Developer <dev@example.com>
Add optional immutable Club affiliation, authorized Club Owner/Admin ride planning, privacy-preserving point access, and narrowly scoped Club admin ride controls.
Club-wide ride discovery remains deferred pending a privacy-preserving architecture.