Invitation & Response

How speakers receive credentials, sign in, and respond to BATbern speaking invitations

Last updated: June 13, 2026 Reading time: 6 minutes File size: 9.74 KB

Implemented β€” Epic 6.1b & 6.2a, refactored to Cognito auth in Epic 11.E.3

Last Updated: 2026-06-13

Overview

When an organizer promotes a speaker to READY and sends the invitation, the speaker receives an email with a login link and a temporary password. The speaker signs in to BATbern with their Cognito account (email + password, or β€œContinue with Google”), lands on their dashboard, and accepts or declines the invitation from there. There is no magic link β€” the portal is behind the standard logged-in session.

The Invitation Email

The speaker receives an HTML email (DE/EN) containing:

  • Event name, date, and location
  • Session topic and title (if assigned)
  • Response deadline with a countdown
  • Organiser name and contact email
  • A login link to www.batbern.ch
  • A temporary password for first sign-in
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  You've been invited to speak at BATbern 57  β”‚
β”‚                                              β”‚
β”‚  Event:    BATbern 57                        β”‚
β”‚  Date:     15 March 2026                     β”‚
β”‚  Topic:    Digital Transformation            β”‚
β”‚                                              β”‚
β”‚  Please respond by: 1 February 2026         β”‚
β”‚                                              β”‚
β”‚  Your login:    hans.mueller@example.com     β”‚
β”‚  Temp password: β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’                   β”‚
β”‚                                              β”‚
β”‚  [  Log in to BATbern  ]                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
ℹ️ Note for organizers: The invitation is sent from the Phase B: Outreach screen by clicking Send Invitation on the speaker's kanban card (status moves to INVITED). The Cognito account was already provisioned when the speaker was promoted to READY; the invitation email simply delivers the credentials. The email is generated automatically using the configured template (DE/EN).

Signing In

Speaker clicks β€œLog in to BATbern”

The link opens the standard BATbern login page (the same one every role uses). The speaker enters their email and the temporary password β€” or chooses β€œContinue with Google” if their Google account matches the invited email.

First-login password change

On first sign-in with a temporary password, Cognito requires the speaker to set a new password (FORCE_CHANGE_PASSWORD β†’ CONFIRMED). Google sign-in skips this step.

Speaker lands on their dashboard

After authenticating, the speaker is taken to /speaker-portal/dashboard, which lists every event they’re involved in. Pending invitations show a Respond to Invitation action.

Accepting an Invitation

Speaker opens the invitation

From the dashboard, the speaker clicks Respond to Invitation on the relevant event card. The response page targets that specific event via its eventCode in the URL path (e.g. /speaker-portal/events/BATbern57/respond) β€” no token is involved.

Response confirmation screen

The speaker sees a summary of the event details plus an optional message field:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Confirm Acceptance                          β”‚
β”‚                                              β”‚
β”‚  Event:    BATbern 57 β€” 15 March 2026       β”‚
β”‚  Session:  Digital Transformation            β”‚
β”‚                                              β”‚
β”‚  Message to organiser (optional):           β”‚
β”‚  [                                         ] β”‚
β”‚                                              β”‚
β”‚  [  Confirm Acceptance  ]                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Automatic actions on acceptance

When the speaker confirms:

  • Speaker status transitions: INVITED β†’ ACCEPTED
  • A confirmation email is sent automatically to the speaker with the content submission deadline and a link to sign in and submit content
  • The organiser is notified in-app (async)
  • The acceptance is recorded in speaker_status_history with changed_by_username = the speaker’s Cognito username

Success page

The speaker sees a confirmation message with next-step links back into the portal:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  βœ… You're confirmed for BATbern 57!         β”‚
β”‚                                              β”‚
β”‚  Next steps:                                 β”‚
β”‚  β€’ Update your speaker profile               β”‚
β”‚  β€’ Submit your presentation details          β”‚
β”‚                                              β”‚
β”‚  Content submission deadline:                β”‚
β”‚  1 March 2026 (28 days away)                β”‚
β”‚                                              β”‚
β”‚  [  Update Profile  ]  [  Submit Content  ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Declining an Invitation

Speaker chooses to decline

From the response page for that event, the speaker selects Decline.

Decline reason (required)

The speaker must provide a reason:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Decline Invitation                          β”‚
β”‚                                              β”‚
β”‚  We're sorry you can't join us this time.   β”‚
β”‚                                              β”‚
β”‚  Reason for declining *:                    β”‚
β”‚  [                                         ] β”‚
β”‚                                              β”‚
β”‚  [  Confirm Decline  ]                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Automatic actions on decline

  • Speaker status transitions: INVITED β†’ DECLINED (DECLINED is the single terminal β€œnot happening” state, reachable from any non-terminal state)
  • The decline reason is stored in speaker_status_history
  • The organiser is notified in-app
  • The decline timestamp is recorded

Already Responded

If a speaker returns to the response page for an event they’ve already responded to, the page shows their previous response and offers next-step options:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  You've already responded                    β”‚
β”‚                                              β”‚
β”‚  Response: βœ… Accepted on 15 Jan 2026       β”‚
β”‚                                              β”‚
β”‚  [  Go to Dashboard  ]  [  Contact Organiser ]β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Authorization

Because the portal is Cognito-secured, a speaker can only act on events they were invited to:

  • The backend resolves the speaker’s pool entry from (authenticated username, eventCode).
  • A request for an eventCode the speaker has no pool row for returns 403 Forbidden (not 404).
  • Unauthenticated requests return 401 Unauthorized; an ORGANIZER- or PARTNER-only token (no SPEAKER role) returns 403.

What Organizers See

After a speaker responds, the organiser sees:

  • Kanban card moves to the ACCEPTED or DECLINED column automatically
  • Contact history shows the response event with timestamp and any message
  • Status history records the transition with changed_by_username = the speaker’s Cognito username
  • In-app notification appears in the organiser’s notification centre

See Phase B: Outreach β†’ for how to manage the speaker pool after responses.

Troubleshooting

Speaker says they didn’t receive the invitation email

  1. Check the speaker’s email address on their profile (must be correct)
  2. Ask the speaker to check their spam folder
  3. Resend the invitation from the Phase B Kanban board (re-sends the login credentials)
  4. If the email is incorrect, update the speaker profile and resend

Speaker can’t sign in / forgot their password

The speaker uses the standard β€œForgot password” flow on the BATbern login page (Cognito self-service reset) β€” no organizer action needed. If the temporary password was never used and expired, resend the invitation from Phase B to issue a fresh temporary password.

Speaker accepted in error and wants to decline

The speaker can move from ACCEPTED β†’ DECLINED themselves (decline is reachable from any non-terminal state). Alternatively, organizers with the ORGANIZER role can update speaker status directly from the speaker edit modal.