Events

Admin Event Management

How admins create and manage events through the admin dashboard. Covers the event form, all dashboard tabs, registration management, image upload, and the components that implement each feature.


Admin Event Pages

URLPage FilePurpose
/admin/homesrc/pages/admin/home.tsxEvent listing (grid/list toggle, pagination, all events including unpublished)
/admin/event/newsrc/pages/admin/event/new.tsxCreate a new event
/admin/event/{id}/{year}/editsrc/pages/admin/event/[eventId]/[year]/edit.tsxEdit an existing event
/admin/event/{id}/{year}src/pages/admin/event/[eventId]/[year]/index.tsxEvent dashboard (registrations, analytics, feedback)

Event Creation

Page: src/pages/admin/event/new.tsx Component: src/components/Events/EventForm.tsx Schema: src/components/Events/EventFormSchema.ts Backend: POST /events/ (Cognito auth)

The form is organized into sections:

Settings

  • isApplicationBased — enables accept/reject flow instead of direct registration
  • nonBizTechAllowed — whether non-BizTech members can register

Cover Photo

Uses EventThumbnailUploader.tsx — compresses image client-side (2.5MB max), gets presigned URL from POST /events/event-image-upload-url, uploads optimized + original versions to S3. See Event Image Upload.

Event Information

Frontend FieldMaps ToNotes
Event NameenameDisplay name
Event SlugidURL-friendly, becomes the partition key
CapacitycapacMaximum attendee count
DescriptiondescriptionShown to attendees

Date & Time

Frontend FieldMaps ToFormat
Start DatestartDateISO 8601 string
End DateendDateISO 8601 string
DeadlinedeadlineRegistration deadline

Location

Maps to elocation, longitude, latitude.

Pricing

Frontend FieldMaps ToNotes
Member Pricepricing.membersIn dollars — backend reads as dollars, payment handler multiplies by 100 for Stripe cents
Non-Member Pricepricing.nonMembersSame

Registration Questions

CustomQuestions.tsx (React Hook Form field array) lets admins add dynamic questions. Each question:

  • Type: TEXT, SELECT, CHECKBOX, UPLOAD, WORKSHOP_SELECTION, SKILLS
  • Label: question text
  • Required: boolean
  • Options: for select/checkbox types

Component hierarchy: CustomQuestions.tsxCustomQuestionItem.tsx (individual question editor)

Partner Fields

Partner description and partnerRegistrationQuestions for partner-facing events. Uses the same CustomQuestions.tsx component.

Live Preview

PreviewForm.tsx renders a live preview of the registration form as the admin configures it, with hardcoded options for year levels and faculties.

What Happens on Submit

new.tsx transforms frontend field names to backend format (e.g., eventSlugid, capacitycapac, customQuestionsregistrationQuestions) and POSTs to /events/. On success, redirects to the edit page.

See Event Creation Flow for the full frontend-to-backend trace.


Event Editing

Page: src/pages/admin/event/[eventId]/[year]/edit.tsx Backend: PATCH /events/{id}/{year} (Cognito auth)

The edit page:

  1. Fetches the event via GET /events/{id}/{year}
  2. Transforms backend format back to frontend schema
  3. Shows the same EventForm.tsx
  4. On save, transforms and sends PATCH with the changed fields

Publishing happens here — toggling isPublished and saving makes the event visible on the public events page.


Admin Event Dashboard

Page: src/pages/admin/event/[eventId]/[year]/index.tsx Container: src/components/EventsDashboard/EventDashboard.tsx

Dashboard Header

Shows the event name, dates, capacity utilization, and a graphic overview (EventOverviewGraphic.tsx). Fetches event data with GET /events/{id}/{year}?count=true&users=true.

Tab Components

All in src/components/EventsDashboard/:

TabComponentWhat It Shows
Data TableEventDashboard.tsx (built-in)All registrations with filtering, sorting, status toggles, CSV export
TeamsTeamsTab.tsxTeam assignments for team-based activities
AnalyticsAnalyticsTab.tsxRegistration timeline, capacity utilization, response distributions
FeedbackFeedbackTab.tsxFeedback question builder + response viewer

Supporting Components

ComponentPurpose
EventCard.tsxCard layout for event listings (/admin/home)
FilterTab.tsxRegistration data filters
GuestBanner.tsxGuest user banner
SearchBar.tsxRegistration search
Tabs.tsxTab navigation

Data Table Tab

The main registration management interface. Powered by GET /events/{id}/{year}?users=true:

  1. Scans all registrations for the event via event-query GSI
  2. Batch-gets user records from biztechUsers
  3. Merges registration status with user profile data
  4. Returns enriched list

Admin Actions

ActionEndpointStatus Change
Check inPUT /registrations/{email}/{fname}checkedIn
Promote from waitlistPUT /registrations/{email}/{fname}waitlistregistered
Accept applicationPUT /registrations/{email}/{fname}accepted / acceptedPending
Reject applicationPUT /registrations/{email}/{fname}rejected
CancelPUT /registrations/{email}/{fname}cancelled
Delete oneDELETE /registrations/{email}Removes record
Batch deleteDELETE /registrationsRemoves multiple records
Mass updatePUT /registrations/massUpdateBulk status changes

Each mass update calls updateHelper() per registration — capacity checks and email triggers still apply individually.


Analytics Tab

Component: src/components/EventsDashboard/AnalyticsTab.tsx

Shows:

  • Registration timeline — registrations over time
  • Capacity utilization — percentage of capac filled
  • Response distributions — charts for each registration question
  • Demographics — faculty and year-level breakdowns

Counts are from GET /events/{id}/{year}?count=true, which calls getEventCounts() in services/registrations/helpers.js.


Feedback Tab

Component: src/components/EventsDashboard/FeedbackTab.tsx

Two modes:

  1. Builder — configure feedback questions using FeedbackQuestionsBuilder.tsx. Add questions of type SHORT_TEXT, LONG_TEXT, MULTIPLE_CHOICE, CHECKBOXES, LINEAR_SCALE. Toggle attendeeFeedbackEnabled / partnerFeedbackEnabled. Saves via PATCH /events/{id}/{year}.
  2. Responses — view submitted feedback via GET /events/{id}/{year}/feedback/{formType}/submissions. Shows per-question response lists.

QR code and shareable link for feedback forms are displayed for distribution at or after the event.

See Event Feedback for the full feedback system.


Active Event Detection

GET /events/getActiveEvent scans all events and filters by startDate <= now AND endDate >= now using ISO 8601 string comparison. Returns the earliest-starting active event or null.

Unpublished events

getActiveEvent does not filter by isPublished. An unpublished event with current dates will be returned as active.

See Active Event Detection for implementation details.


Event Deletion

DELETE /events/{id}/{year} removes the event record from biztechEvents. Handler checks the event exists first (returns 404 if not).

No cascade delete

Deleting an event does not remove associated registrations in biztechRegistrations, feedback submissions in biztechEventFeedback, or S3 images. These become orphaned records.


Key Files

FilePurpose
src/pages/admin/event/new.tsxEvent creation page
src/pages/admin/event/[eventId]/[year]/edit.tsxEvent edit page
src/pages/admin/event/[eventId]/[year]/index.tsxEvent dashboard page
src/pages/admin/home.tsxAdmin event listing
src/components/Events/EventForm.tsxShared event form
src/components/Events/EventFormSchema.tsZod validation schema
src/components/Events/EventThumbnailUploader.tsxImage upload
src/components/Events/CustomQuestions.tsxRegistration question manager
src/components/Events/CustomQuestionItem.tsxIndividual question editor
src/components/Events/PreviewForm.tsxLive form preview
src/components/Events/FeedbackQuestionsBuilder.tsxFeedback question editor
src/components/EventsDashboard/EventDashboard.tsxDashboard container
src/components/EventsDashboard/AnalyticsTab.tsxAnalytics visualizations
src/components/EventsDashboard/FeedbackTab.tsxFeedback builder + viewer
src/components/EventsDashboard/TeamsTab.tsxTeam management
src/components/EventsDashboard/EventCard.tsxEvent card component
src/components/EventsDashboard/EventOverviewGraphic.tsxDashboard header graphic
src/queries/events.tsuseAllEvents() for admin listing
services/events/handler.jsAll backend event handlers

Previous
Registrations Service API