Add custom RSVP questions to events - #256
Merged
Merged
Conversation
Hosts can ask attendees up to six questions (short text or multiple choice with up to ten options) when they RSVP. Closes #196. - Questions are stored on the event with stable IDs, and answers on the attendee with a snapshot of the prompt, so answers survive edits to the questions and outlive deleted ones - Web attendees answer in the RSVP modal; answers are shown only to the host, with 'No answer' placeholders for unanswered questions - Fediverse attendees are DMed a link to a standalone answers form, keyed on a hash of their (newly generated) removal password - Answers are echoed in the attendee confirmation email and sent to the host via the attendeeAwaitingApproval email, a new attendeeJoined email on every plain RSVP, and a new attendeeAnswered email when the standalone form is submitted; delivery failures are logged - Multiple choice answers are re-validated server-side against the stored options, and validation failures on the plain-HTML forms redirect with a flash message instead of serving raw JSON
The nested-checkbox options list is now a stack of feature cards
(public listing, event group, comments, RSVPs), each with a
description and a toggle switch, the whole header row clickable.
RSVP settings - attendance requests, the attendee limit, and custom
questions - live inside the expanded RSVPs card.
- Attendance requests is a nested card with human-friendly copy
explaining that the location stays hidden until the host approves
- The attendee limit checkbox and number field are merged into a
single field whose empty state ('No limit') means no limit; the
legacy checkbox value is derived at submit time
- The custom question builder gets stable client-side keys so Alpine
doesn't leave stale inputs behind on mid-list removal
- Restores the semibold label styling that was lost at some point,
with checkbox labels and host-authored question prompts kept at
regular weight
- The first-load welcome banner (with its 'do not share this link'
warning) was shown to whoever loaded the event or group page first,
and that first view consumed the one-shot flag - so a visitor could
both see the host-only message and prevent the host from ever seeing
it. It is now gated on holding the edit token.
- The event group edit token field's label rendered its help text
('You can find this long string of characters...') because the label
and the help text shared an i18n key; the label now has its own key.
The host's answer listing sized its question column to the longest unwrapped prompt, so a long question (they can be 200 characters) would overflow the attendee card. The column is now capped at half the card width with wrapping, and on narrow screens each answer stacks under its question instead of sharing a row.
lowercasename
force-pushed
the
feature/custom-rsvp-questions
branch
from
August 12, 2026 14:26
312663e to
c06d726
Compare
Rewording a question can change what an existing answer means - 'Are you vegan or vegetarian?' answered 'No', then reworded to 'Do you have any dietary restrictions?', must not present that 'No' as answering the new question. The host's answer listing now uses the prompt snapshot stored with each answer (as deleted questions already did), while unanswered questions show the current wording.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
End-to-end feature to handle custom questions for events. I've also updated the styling of the event options section to make it a bit friendlier. Works for the ActivityPub route as well, and I've added email sending for all RSVPs, not just ones on approval-only events.
This should close up #196.
New options cards:
Custom questions!
Answering custom questions:
Admin sees the answers, attendees don't:
ActivityPub attendees get a DM with a secret link to fill in their answers post hoc:
...and can only do it once.