Workflow — Visitor Registration

ModuleRegistration
ActorsGuest → Visitor, System
SRS refsUC-03, FR-0301–0303, BR-008
StatusPlanned — 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

  1. Guest lands on homepage → taps Register as Visitor (/register/visitor?event={slug}).
  2. System shows two options: Continue with LinkedIn (preferred, BR-008) or basic form.
  3. LinkedIn path: OAuth consent → system receives id, name, email, picture → account created/linked.

Basic path: name + email (+ optional WhatsApp) → magic-link style confirmation later.

  1. System creates user (role=visitor) + registration (type=visitor), enforcing BR-001.
  2. 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.
  3. 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

TableChange
usersINSERT/lookup by linkedin_id or email
registrationsINSERT (type=visitor, unique event+user)
votes / ai_*
audit_logregistration.created
notificationswelcome

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