Workflow — Visitor Registration
| Module | Registration |
| Actors | Guest → Visitor, System |
| SRS refs | UC-03, FR-0301–0303, BR-008 |
| Status | Planned — ships with v0.4.0 |
Purpose
Let anyone register attendance for an event in under a minute, and give them a shareable "I am visiting" card for social media.
Preconditions
- Event exists, status =
registration_open. - Feature toggle
registration.visitor= on.
Main flow
- Guest lands on homepage → taps Register as Visitor (
/register/visitor?event={slug}). - System shows two options: Continue with LinkedIn (preferred, BR-008) or basic form.
- LinkedIn path: OAuth consent → system receives id, name, email, picture → account created/linked.
Basic path: name + email (+ optional WhatsApp) → magic-link style confirmation later.
- System creates
user (role=visitor)+registration (type=visitor), enforcing BR-001. - Success page shows:
- confirmation + event details,
- generated "I am visiting {event}" share card (FR-0601, GD driver),
- buttons: Download PNG · Copy post text · Back to event.
- System sends notification + (when configured) WhatsApp/email confirmation.
Alternate / error flows
- A1 Event closed → friendly message + optional waitlist signup.
- A2 Already registered → skip to success page with existing card.
- A3 Existing user registered as applicant/GoH for same event → blocked (BR-001): "You are already registered for this event."
- A4 LinkedIn popup cancelled → back to step 2 with basic-form hint.
- A5 Card generation fails → success page without card; retry button; incident logged.
Rules applied
BR-001, BR-008; normal (non-AI) events require no interview (FR-0405).
Data touched
| Table | Change |
|---|---|
| users | INSERT/lookup by linkedin_id or email |
| registrations | INSERT (type=visitor, unique event+user) |
| votes / ai_* | — |
| audit_log | registration.created |
| notifications | welcome |
Sequence
sequenceDiagram
participant G as Guest
participant W as Website
participant LI as LinkedIn
participant DB as MariaDB
participant GD as Card Gen (GD)
G->>W: /register/visitor
W->>G: LinkedIn or basic form
G->>W: Continue with LinkedIn
W->>LI: OAuth authorize
LI-->>W: profile (id, name, email, picture)
W->>DB: create user + registration (visitor)
W->>GD: render "I am visiting" card
GD-->>W: card PNG
W-->>G: success + card + share buttons