Core Concepts
Registrations
The lifecycle of a registration, where registrants see it, and how confirmations and receipts work.
A registration records that a user has signed up for a specific option on a listing.
Registrations are always created against a single option. A user can hold multiple registrations across different options on the same listing.
Lifecycle
Pending → Confirmed → Cancelled (soft delete)
↘ Refunded (in part or full)| State | Meaning |
|---|---|
| Pending | The registration was created but payment (for paid options) hasn't completed |
| Confirmed | Registration is live; for paid options the payment intent succeeded |
| Refunded | A staff member or the org's Stripe Dashboard issued a refund. Refunds may be partial or full and do not automatically cancel the registration. |
| Cancelled | Registration was cancelled. Cancellation is a soft delete — the row is preserved with a cancelled_at timestamp so it remains visible to the registrant and to staff with a "Cancelled" badge. |
Cancelled rows are excluded from capacity, dedup, waitlist, and check-in queries but still appear in the registrant's "Registrations" list and the staff listings table.
Where registrants see their registration
https://register.paddlesup.io/registrations— the registrant's full list of registrations, sorted by event date.- The listing landing page — the registrant's current registration is
highlighted with a green "You are registered" indicator on the option detail,
a "You" badge on their row in the registrations list, and
aria-current="true"on the row. - Confirmation view — every listing page supports a
?view=confirmationstate with a top-level View Confirmation CTA. This view shows registration status, payment status, the last error (if any), and a View receipt link when one is available. Clicking a row in/registrationsroutes directly to/l/<org>/<event>?view=confirmation.
Receipts
For paid registrations:
- The registrant's email and a readable description (
<event> – <option>) are sent to Stripe with the PaymentIntent so Stripe sends a native receipt email. - The Stripe-hosted
receipt_urlis persisted from thecharge.succeededwebhook and surfaced as View receipt in the confirmation view.
Compete membership side effect
Registering for a listing automatically creates (idempotently upserts) a compete membership for the registrant. This connects the registrant to the organization that owns the event without requiring a separate join step.
Confirmation, refund, and cancel actions
- Registrants confirm and pay through the public
/l/...flow. - Staff manage refunds and cancellations from the staff registrations detail view — see Refunds and cancellations.