Networking Event Platform - Specification
Project Overview
- Project Name: NetEvent
- Type: Full-stack web application (Flask + MySQL)
- Core Functionality: A platform for organizing networking events where attendees can RSVP, connect, schedule appointments, and attend breakout sessions
- Target Users: Event organizers, event staff, and event attendees
Technology Stack
- Backend: Python Flask
- Database: MySQL (roast.duckdns.org:33062)
- Frontend: HTML/CSS/JavaScript with Jinja2 templates
Database Schema
Tables
organizers
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Organizer ID |
| email |
VARCHAR(255) UNIQUE |
Organizer email |
| password_hash |
VARCHAR(255) |
Hashed password |
| name |
VARCHAR(255) |
Organizer name |
| staff_code |
VARCHAR(10) UNIQUE |
Staff access code |
| preferred_language |
VARCHAR(5) DEFAULT 'en' |
Preferred language code |
| reset_token |
VARCHAR(64) |
Password reset token |
| reset_token_expiry |
DATETIME |
Password reset token expiry |
| created_at |
TIMESTAMP |
Creation timestamp |
events
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Event ID |
| organizer_id |
INT FOREIGN KEY |
Reference to organizers |
| code |
VARCHAR(10) UNIQUE |
Unique 10-char alphanumeric event code |
| name |
VARCHAR(255) |
Event name |
| description |
TEXT |
Event description |
| start_time |
DATETIME |
Event start date/time |
| end_time |
DATETIME |
Event end date/time |
| location |
VARCHAR(255) |
Event location |
| max_attendees |
INT |
Maximum attendees (NULL = unlimited) |
| created_at |
TIMESTAMP |
Creation timestamp |
attendees
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Attendee ID |
| event_id |
INT FOREIGN KEY |
Reference to events |
| email |
VARCHAR(255) |
Attendee email |
| password_hash |
VARCHAR(255) |
Hashed password |
| first_name |
VARCHAR(100) |
First name |
| last_name |
VARCHAR(100) |
Last name |
| organisation |
VARCHAR(255) |
Organization/Company |
| role |
VARCHAR(255) |
Role/Profession |
| introduction |
TEXT |
Short introduction |
| profile_picture |
VARCHAR(255) |
Profile picture path |
| checked_in |
BOOLEAN DEFAULT FALSE |
Check-in status |
| attendance_status |
ENUM('attending', 'not_attending') |
Attendance status |
| confirmation_token |
VARCHAR(64) |
Email confirmation token |
| attendee_code |
VARCHAR(10) UNIQUE |
Unique attendee code for QR |
| phone |
VARCHAR(50) |
Phone number |
| linkedin |
VARCHAR(255) |
LinkedIn profile URL |
| attendee_type_id |
INT FOREIGN KEY |
Reference to attendee_types |
| preferred_language |
VARCHAR(5) DEFAULT 'en' |
Preferred language code |
| created_at |
TIMESTAMP |
Creation timestamp |
connections
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Connection ID |
| attendee_id |
INT FOREIGN KEY |
Requester attendee |
| connected_attendee_id |
INT FOREIGN KEY |
Connect target attendee |
| status |
ENUM('pending','accepted','rejected') |
Connection status |
| created_at |
TIMESTAMP |
Creation timestamp |
appointments
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Appointment ID |
| event_id |
INT FOREIGN KEY |
Reference to events |
| requester_id |
INT FOREIGN KEY |
Requester attendee |
| target_id |
INT FOREIGN KEY |
Target attendee |
| appointment_time |
DATETIME |
Proposed meeting time |
| location |
VARCHAR(255) |
Meeting location |
| notes |
TEXT |
Appointment notes |
| status |
ENUM('pending','accepted','rejected') |
Appointment status |
| created_at |
TIMESTAMP |
Creation timestamp |
breakout_sessions
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Session ID |
| code |
VARCHAR(10) UNIQUE |
Unique session code |
| event_id |
INT FOREIGN KEY |
Reference to events |
| name |
VARCHAR(255) |
Session name |
| description |
TEXT |
Session description |
| start_time |
DATETIME |
Session start time |
| end_time |
DATETIME |
Session end time |
| location |
VARCHAR(255) |
Session location |
| max_attendees |
INT |
Maximum attendees (NULL = unlimited) |
| created_at |
TIMESTAMP |
Creation timestamp |
breakout_session_organizers
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
ID |
| breakout_session_id |
INT FOREIGN KEY |
Reference to breakout_sessions |
| organizer_id |
INT FOREIGN KEY |
Reference to organizers |
| created_at |
TIMESTAMP |
Creation timestamp |
breakout_session_rsvps
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
RSVP ID |
| breakout_session_id |
INT FOREIGN KEY |
Reference to breakout_sessions |
| attendee_id |
INT FOREIGN KEY |
Reference to attendees |
| status |
ENUM('registered','cancelled') |
RSVP status |
| created_at |
TIMESTAMP |
Creation timestamp |
staff
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Staff ID |
| event_id |
INT FOREIGN KEY |
Reference to events |
| email |
VARCHAR(255) |
Staff email |
| password_hash |
VARCHAR(255) |
Hashed password |
| first_name |
VARCHAR(100) |
First name |
| last_name |
VARCHAR(100) |
Last name |
| staff_code |
VARCHAR(10) UNIQUE |
Staff access code |
| invite_token |
VARCHAR(64) |
Invite token |
| invite_used |
BOOLEAN DEFAULT FALSE |
Invite used flag |
| preferred_language |
VARCHAR(5) DEFAULT 'en' |
Preferred language code |
| created_at |
TIMESTAMP |
Creation timestamp |
languages
| Column |
Type |
Description |
| code |
VARCHAR(5) PRIMARY KEY |
Language code |
| name |
VARCHAR(50) |
English language name |
| native_name |
VARCHAR(50) |
Native language name |
| is_active |
BOOLEAN |
Active status |
| is_default |
BOOLEAN |
Default language flag |
| date_format |
VARCHAR(30) |
Date format string |
| sort_order |
INT |
Display sort order |
attendee_types
| Column |
Type |
Description |
| id |
INT PRIMARY KEY AUTO_INCREMENT |
Type ID |
| event_id |
INT FOREIGN KEY |
Reference to events |
| code |
VARCHAR(10) |
Type code (unique per event) |
| name |
VARCHAR(100) |
Type name |
| price |
DECIMAL(10,2) |
Ticket price |
| created_at |
TIMESTAMP |
Creation timestamp |
Functionality Specification
Organizer Features
- Authentication: Login/logout for organizers
- Event Management: Create, edit, delete events
- Attendee Management: View, edit attendees; manage attendee types
- Badge Printing: Generate printable badge list (PDF-ready HTML)
- QR Code Scanning: Mobile camera-based check-in by scanning attendee QR codes
- Breakout Sessions: Create/manage breakout sessions within events
- Staff Management: Add staff members to events via invite codes
- Event Staff View: See which staff are assigned to events
Staff Features
- Authentication: Login via staff invite code
- QR Scanning: Scan attendee QR codes for check-in
- Event Dashboard: View assigned events and scan functionality
Attendee Features
- Authentication: Register/login for attendees
- Event Registration: RSVP for events with optional payment
- Profile Management: Update profile with name, org, role, intro, photo (with crop/zoom)
- Connections: Send/accept/reject connection requests
- Appointments: Request/accept/reject meeting appointments
- Breakout Sessions: RSVP for breakout sessions
- Password Reset: Request password reset via email
User Interactions & Flows
Organizer Flow
- Login → Dashboard → Create Event → Manage Attendees → Print Badges / Scan Check-in
- Create breakout sessions, manage attendee types, invite staff
Staff Flow
- Use invite code → Login → View assigned events → Scan attendees for check-in
Attendee Flow
- Register → Login → RSVP to Event → Manage Profile → Connect with Attendees → Request Appointments
- Browse and register for breakout sessions
Key Pages
Auth
/auth/login - Organizer/attendee login
/auth/forgot-password - Request password reset
/auth/reset-password/<token> - Reset password with token
Organizer
/organizer/dashboard - Event overview and management
/organizer/events/create - Create new event
/organizer/events/<id> - Event details and management
/organizer/events/<id>/edit - Edit event
/organizer/events/<id>/attendees - View attendee list
/organizer/events/<id>/badges - Print badges
/organizer/events/<id>/scan - QR scanner for check-in
/organizer/events/<id>/edit-attendee/<attendee_id> - Edit attendee
/organizer/events/<id>/attendee-types - Manage attendee types
/organizer/events/<id>/breakout-sessions - Manage breakout sessions
/organizer/events/<id>/breakout-sessions/create - Create breakout session
/organizer/events/<id>/breakout-sessions/<session_id> - Edit breakout session
/organizer/events/<id>/staff - Event staff management
Attendee
/attendee/dashboard - Event dashboard
/attendee/profile - Profile management with photo crop/zoom
/attendee/connections - View accepted connections
/attendee/connection-requests - Manage incoming connection requests
/attendee/appointments - View appointments
/register - Event registration
/attendee/personal - Personal information page
Security
- Password hashing with bcrypt
- Session-based authentication
- CSRF protection
- SQL injection prevention via parameterized queries
File Structure