RSVP Links¶
Invitation emails contain Accept/Maybe/Decline links that point to calendars.<domain>/rsvp/. These are Django server-rendered pages, not part of the single-page app.
URL Format¶
The token contains the event UID, attendee email, and action, signed with TimestampSigner.
Reverse Proxy¶
The RSVP endpoint must be proxied through Caddy to the Django backend:
Without this, /rsvp/ serves the static frontend (index.html), which loads the calendar app instead of the RSVP page.
APP_URL¶
The APP_URL setting controls the base URL used in invitation emails:
If not set, RSVP links are generated with an empty base:
Flow¶
- Organizer creates event with attendee
- CalDAV IMip plugin sends callback to Django
- Django generates HTML email with RSVP links
- Django submits email via Messages API → Brevo
- Attendee clicks Accept/Maybe/Decline
- Django RSVP view processes the action
- Django updates CalDAV attendee PARTSTAT via internal CalDAV client
- Organizer's refresh shows updated status
Thunderbird Integration¶
Thunderbird's native Accept/Decline sends an iMIP reply email. This reply reaches the Messages inbox but does NOT auto-update the calendar. The attendee must click the email link for the organizer to see the status change.