Event Structure
Events are stored in theevents table with these fields:
- name - Event title (e.g., “Hackathon 00”)
- slug - Unique URL identifier (e.g., “hackathon-00”)
- description - Event details and rules
- startsAt / endsAt - Event time window
- registrationOpensAt / registrationClosesAt - Registration period
- status - Current event phase (see lifecycle below)
Hackathon 00
The inaugural Buildstory event (March 1-8, 2026) — a 7-day AI building sprint
Event-first design
All features are built to serve events but work independently for long-term use
Event Status Lifecycle
Events progress through five distinct phases:The status enum is defined in
lib/db/schema.ts as eventStatusEnum and enforced at the database level.Registration Flow
New users register for events through the guided onboarding flow at/hackathon:
Step 1: Identity
- Set display name and username (with real-time availability check)
- Select country and region (ISO 3166 codes with virtualized comboboxes)
Step 2: Experience
- Choose experience level:
- Getting started - New to building with AI
- Built a few things - Shipped a project or two
- Ships constantly - Building with AI daily
Step 3: Commitment Level
- Set your availability:
- All in - Full-time focus
- Daily - Regular daily sessions
- Nights & weekends - Part-time around work
- Not sure - Playing it by ear
Step 4: Team Preference
- Declare your team status:
- Solo - Building alone
- Has team - Team formed, roster locked
- Has team (open) - Team formed, accepting members
- Looking for team - Open to invites
The team preference determines whether you appear in team-finding searches and can receive direct invites.
Step 5: Bridge
- Choose your path forward:
- Add a project - Create your hackathon project now
- Skip for now - Register without a project (can add later)
- Joining a team - Search for an existing project to join
Steps 6-8: Project Creation (Optional)
- Project basics - Name, description, custom slug
- Starting point - New project vs. existing project
- Project goal - What you want to accomplish
Step 9: Celebration
- Confetti animation, registration complete!
9 steps
Guided multi-step wizard with progress stepper
Dev mode
?dev=true enables step jumping and mock data for testingState management
Client-side orchestrator in
hackathon-onboarding.tsx owns all stateEvent Registrations
Registrations are stored ineventRegistrations with a unique constraint on (eventId, profileId):
Completing Registration
ThecompleteRegistration server action:
- Validates all required fields (username, team preference)
- Checks for existing registration (prevents duplicates)
- Updates profile with identity/location/experience
- Inserts
eventRegistrationsrow - Fires Discord signup webhook
- Checks and fires milestone webhooks (10, 25, 50, 100, etc.)
Team Preferences
Your team preference affects discoverability:| Preference | Can receive invites? | Shows in search? | Use case |
|---|---|---|---|
| Solo | No | No | Building alone |
| Has team | No | No | Team locked |
| Has team (open) | Yes | Yes | Accepting members |
| Looking for team | Yes | Yes | Open to any invite |
The
allowInvites profile field (privacy setting) overrides team preference — if disabled, you won’t receive any invites regardless of team preference.Commitment Levels
Commitment level is optional and stored ineventRegistrations:
- Used for self-pacing and community matching
- Not enforced or validated during the event
- Helps set expectations for team formation
Linking Projects to Events
Projects can be associated with events via theeventProjects junction table:
- During onboarding -
createOnboardingProjectauto-links to event - Standalone creation -
createProjectaccepts optionaleventIdparam - Unique constraint - One project per event (prevents duplicate submissions)
Querying Event Projects
Discord Notifications
Event actions trigger fire-and-forget Discord webhooks:- Signup - When
completeRegistrationsucceeds - Project creation - When
createOnboardingProjectorcreateProjectwith eventId - Milestones - At 10, 25, 50, 75, 100, 150, 200, 250, 500, 1000 signups/projects
Public Stats
ThegetPublicStats query returns real-time event metrics: