Invitation & Response
How speakers receive credentials, sign in, and respond to BATbern speaking invitations
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 ] β
βββββββββββββββββββββββββββββββββββββββββββββββ
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_historywithchanged_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 (
DECLINEDis 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
eventCodethe 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
- Check the speakerβs email address on their profile (must be correct)
- Ask the speaker to check their spam folder
- Resend the invitation from the Phase B Kanban board (re-sends the login credentials)
- 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.