Flows

Event Lifecycle

How an event moves through its lifecycle in the BizTech system: creation, registration, check-in, companion, feedback, and post-event analytics. Each stage with the key files and endpoints involved.


Lifecycle Stages

CreateConfigurePublishRegistrationEvent DayFeedbackAnalytics
                                   │               │
                                   │          ┌─────┴──────┐
                                   │          │  Companion
                                   │          │  Check-in
                                   │          └────────────┘

                              ┌────┴────┐
Payments
Waitlist
                              └─────────┘

1. Event Creation

Admins create events at /admin/event/new.

Frontend: src/pages/admin/event/new.tsx uses src/components/Events/EventForm.tsx with Zod validation from src/components/Events/EventFormSchema.ts.

What gets configured:

FieldPurpose
id (slug), yearComposite primary key (e.g. "blueprint" + 2026)
ename, descriptionDisplay name and description
startDate, endDateISO 8601 timestamps — used for active event detection
capacMaximum registration capacity — enforced by updateHelper()
pricing{ members: 0, nonMembers: 5 } — price in dollars per group
imageUrlEvent thumbnail uploaded to S3 via presigned URL
registrationQuestionsDynamic form questions for attendees
partnerRegistrationQuestionsDynamic form questions for partners
attendeeFeedbackQuestionsPost-event feedback form config
partnerFeedbackQuestionsPost-event feedback form config
isApplicationBasedEnables accept/reject flow instead of direct registration
nonBizTechAllowedWhether non-members can register

Backend: POST /events/ — validates feedback questions, normalizes question arrays via feedbackHelpers.js, assigns UUIDs to registration questions, checks for duplicates, and writes to biztechEvents.

Key files:

  • src/pages/admin/event/new.tsx — creation page with schema transform
  • src/components/Events/EventForm.tsx — shared form with live preview
  • src/components/Events/EventThumbnailUploader.tsx — image upload
  • src/components/Events/CustomQuestions.tsx — registration question builder
  • services/events/handler.jscreate — backend handler
  • services/events/feedbackHelpers.js — question normalization/validation

See Event Creation Flow for the full trace from form to DynamoDB.


2. Publishing and Event Listing

Events are created with isPublished: false by default. The admin toggles publishing from the edit page.

Once published, the event appears on /events (public events listing). The frontend query hook useEvents() in src/queries/events.ts filters for isPublished: true and excludes alumni-night events.

Admin users see all events (published and unpublished) on /admin/home via useAllEvents().


3. Registration Period

Users register at /event/{eventId}/{year}/register. The registration form includes:

  1. Standard fields — email, name, year level, faculty, major, pronouns, dietary
  2. Dynamic fields — generated from the event's registrationQuestions array

Capacity management: updateHelper() in services/registrations/handler.js checks registeredCount >= event.capac. If full, status is set to "waitlist" instead of "registered".

Paid events: Create a Stripe Checkout session using event.pricing.members or event.pricing.nonMembers based on user.isMember. Status starts as "incomplete" until payment completes.

Key files:

  • src/pages/event/[eventId]/[year]/register/index.tsx — attendee registration page
  • src/components/Events/AttendeeEventRegistrationForm.tsx — attendee form
  • src/components/Events/PartnerEventRegistrationForm.tsx — partner form
  • services/registrations/handler.jsupdateHelper — capacity check and status logic
  • services/payments/handler.jspayment — Stripe session creation

See Events and Registrations for the full registration-event dependency.


4. Event Day: Check-In

Admins check attendees in via the admin dashboard at /admin/event/[eventId]/[year]:

  • QR scanner tab: Scans the QR code from the attendee's registration email
  • Manual check-in: Click status toggle in the Data Table tab

Check-in calls PUT /registrations/{email}/{fname} with registrationStatus: "checkedIn".

Dashboard tabs:

TabComponentWhat It Shows
Data TableEventDashboard.tsxAll registrations with filtering, sorting, status toggles, CSV export
TeamsTeamsTab.tsxTeam assignments for team-based activities
AnalyticsAnalyticsTab.tsxRegistration timeline, capacity usage, response breakdowns
FeedbackFeedbackTab.tsxFeedback question builder + response viewer

All dashboard components are in src/components/EventsDashboard/.

See Event Check-In for the check-in flow details.


5. During the Event: Companion App

For events with companion configurations (defined in src/constants/companion-events.ts), attendees access /companion/{eventId}/{year}.

Current companion-enabled events:

  • Blueprint 2025 / 2026
  • ProductX 2025
  • Kickstart 2025

The companion provides:

  • Profile page — attendee's business card with QR/NFC
  • Quests — gamified tasks tracked in biztechQuests
  • Connections — NFC-based networking stored in bizConnections
  • Partner directory — browse sponsors

getActiveEvent (GET /events/getActiveEvent) returns the live event by comparing startDate <= now AND endDate >= now as ISO strings. This powers automatic event detection without manual selection.

See Active Event Detection and Companion System.


6. Post-Event: Feedback

Feedback uses a built-in system with configurable question types (SHORT_TEXT, LONG_TEXT, MULTIPLE_CHOICE, CHECKBOXES, LINEAR_SCALE).

Collection:

  • Feedback forms at /event/{id}/{year}/feedback/attendee and .../feedback/partner
  • Both endpoints are public — no login required
  • Submissions stored in biztechEventFeedback table with eventFormKey GSI

Admin review:

  • FeedbackTab in the admin dashboard shows all submissions
  • GET /events/{id}/{year}/feedback/{formType}/submissions — Cognito-protected

Default question: Every feedback form starts with a locked "How would you rate this event overall?" question (LINEAR_SCALE 1-10), injected by ensureDefaultOverallRatingQuestion().

See Event Feedback for the complete feedback system.


7. Post-Event: Analytics

The Analytics tab (src/components/EventsDashboard/AnalyticsTab.tsx) shows:

  • Registration timeline chart
  • Capacity utilization percentage
  • Response distributions for each registration question
  • Faculty and year-level breakdowns

Registration counts are powered by GET /events/{id}/{year}?count=true, which calls getEventCounts() — counting registered, checkedIn, and waitlist statuses.


Key Data Model Fields

See Event Data Model for the complete field reference. Key fields:

{
  "id": "blueprint",
  "year": 2026,
  "ename": "Blueprint 2026",
  "description": "Product and design conference",
  "startDate": "2026-01-25T09:00:00.000Z",
  "endDate": "2026-01-25T18:00:00.000Z",
  "capac": 200,
  "isPublished": true,
  "pricing": { "members": 0, "nonMembers": 5 },
  "registrationQuestions": [
    {
      "questionId": "q-why",
      "type": "TEXT",
      "label": "Why do you want to attend?",
      "required": true
    }
  ],
  "attendeeFeedbackEnabled": true,
  "attendeeFeedbackQuestions": [
    {
      "questionId": "overall-rating",
      "type": "LINEAR_SCALE",
      "label": "How would you rate this event overall?",
      "required": true,
      "scaleMin": 1,
      "scaleMax": 10
    }
  ]
}

All Event Endpoints

MethodPathAuthHandlerDescription
POST/events/CognitocreateCreate event
GET/events/PublicgetAllList all events
GET/events/{id}/{year}PublicgetGet event (?count, ?users)
PATCH/events/{id}/{year}CognitoupdateUpdate event
DELETE/events/{id}/{year}CognitodelDelete event
GET/events/getActiveEventPublicgetActiveEventCurrently active event
POST/events/event-image-upload-urlCognitocreateThumbnailPicUploadUrlS3 presigned upload URL
GET/events/{id}/{year}/feedback/{formType}PublicgetFeedbackFormFeedback form config
POST/events/{id}/{year}/feedback/{formType}PublicsubmitFeedbackSubmit feedback
GET/events/{id}/{year}/feedback/{formType}/submissionsCognitogetFeedbackSubmissionsList feedback submissions

Previous
Membership