What's new
Reschedule flow — guests and hosts can reschedule bookings without cancelling and rebooking.
Guest reschedule
- Click "Reschedule" in the confirmation email → pick a new slot → booking goes to pending for host approval
- Host receives an approval email with Approve/Decline buttons
Host reschedule
- Click "Reschedule" on any booking in the dashboard → pick a new slot → booking stays confirmed
- CalDAV event updated in place (same UID), guest notified with updated
.ics
Details
- Amber banner on slot picker shows current booking info ("Rescheduling: 30-Minute Intro Call")
- Reschedule confirmation page with strikethrough old time → green new time
- All tokens (reschedule, cancel, confirm) regenerated after each reschedule — old email links stop working
- Self-conflict handled: the booking being rescheduled doesn't block its own new slot
reminder_sent_atcleared so reminders fire for the updated time- Confirmation and pending emails now include a "Reschedule" button alongside "Cancel"
- Dark mode support for the reschedule banner
Other improvements
- Dashboard bookings: Reschedule + Cancel buttons, cleaner expand/collapse for cancel form
- Reschedule confirmation page: branded header, 12h time format support
- Guest reschedule shows "Reschedule requested" instead of generic "Pending confirmation"
- All 22 screenshots refreshed with seeded data
seed_screenshots.shfor reproducible screenshot generation- Updated README and booking-flow docs
Quality
- 243 tests (18 new): token lookup, status filtering, token regeneration, self-conflict exclusion, host stays confirmed, reminder reset
cargo clippyclean,cargo fmtclean
Full Changelog: https://github.com/olivierlambert/calrs/blob/main/CHANGELOG.md#0220---2026-03-14