NetEvent Conference Platform - Specification
1. Project Overview
Project Name: NetEvent
Type: Web-based conference/networking event management platform
Core Functionality: A multi-language platform for organizing events, managing attendees, handling breakout sessions, staff coordination, check-in/badge generation, and professional networking/connections.
2. Tech Stack
- Backend: Python Flask
- Database: MySQL (mysql.connector)
- Internationalization: Flask-Babel with 7 languages (en, nl, de, fr, es, it, pl)
- PDF Generation: ReportLab
- Excel Export: openpyxl
- QR Codes: qrcode library
- Email: SMTP (Brevo/Sendinblue)
- Frontend: HTML/CSS (Jinja2 templates)
3. Database Schema
organizers
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| email |
VARCHAR(255) |
UNIQUE NOT NULL |
| password_hash |
VARCHAR(255) |
NOT NULL |
| name |
VARCHAR(255) |
NOT NULL |
| staff_code |
VARCHAR(10) |
UNIQUE DEFAULT NULL |
| preferred_language |
VARCHAR(5) |
DEFAULT 'en' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
events
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| organizer_id |
INT |
NOT NULL, FOREIGN KEY → organizers(id) |
| code |
VARCHAR(10) |
UNIQUE NOT NULL |
| name |
VARCHAR(255) |
NOT NULL |
| description |
TEXT |
|
| start_time |
DATETIME |
NOT NULL |
| end_time |
DATETIME |
|
| location |
VARCHAR(255) |
|
| max_attendees |
INT |
DEFAULT NULL |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
attendees
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| event_id |
INT |
NOT NULL, FOREIGN KEY → events(id) |
| email |
VARCHAR(255) |
NOT NULL |
| password_hash |
VARCHAR(255) |
NOT NULL |
| first_name |
VARCHAR(100) |
NOT NULL |
| last_name |
VARCHAR(100) |
NOT NULL |
| organisation |
VARCHAR(255) |
|
| role |
VARCHAR(255) |
|
| introduction |
TEXT |
|
| phone |
VARCHAR(50) |
DEFAULT '' |
| linkedin |
VARCHAR(255) |
DEFAULT '' |
| profile_picture |
VARCHAR(255) |
DEFAULT NULL |
| checked_in |
BOOLEAN |
DEFAULT FALSE |
| attendance_status |
ENUM('attending', 'not_attending') |
DEFAULT 'attending' |
| confirmation_token |
VARCHAR(64) |
DEFAULT NULL |
| attendee_code |
VARCHAR(10) |
UNIQUE |
| attendee_type_id |
INT |
DEFAULT NULL, FOREIGN KEY → attendee_types(id) |
| preferred_language |
VARCHAR(5) |
DEFAULT 'en' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (event_id, email) |
connections
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| attendee_id |
INT |
NOT NULL, FOREIGN KEY → attendees(id) |
| connected_attendee_id |
INT |
NOT NULL, FOREIGN KEY → attendees(id) |
| status |
ENUM('pending', 'accepted', 'rejected') |
DEFAULT 'pending' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (attendee_id, connected_attendee_id) |
appointments
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| event_id |
INT |
NOT NULL, FOREIGN KEY → events(id) |
| requester_id |
INT |
NOT NULL, FOREIGN KEY → attendees(id) |
| target_id |
INT |
NOT NULL, FOREIGN KEY → attendees(id) |
| appointment_time |
DATETIME |
NOT NULL |
| location |
VARCHAR(255) |
|
| notes |
TEXT |
|
| status |
ENUM('pending', 'accepted', 'rejected') |
DEFAULT 'pending' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
breakout_sessions
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| code |
VARCHAR(10) |
UNIQUE NOT NULL |
| event_id |
INT |
NOT NULL, FOREIGN KEY → events(id) |
| name |
VARCHAR(255) |
NOT NULL |
| description |
TEXT |
|
| start_time |
DATETIME |
NOT NULL |
| end_time |
DATETIME |
NOT NULL |
| location |
VARCHAR(255) |
|
| max_attendees |
INT |
DEFAULT NULL |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
breakout_session_organizers
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| breakout_session_id |
INT |
NOT NULL, FOREIGN KEY → breakout_sessions(id) |
| organizer_id |
INT |
NOT NULL, FOREIGN KEY → organizers(id) |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (breakout_session_id, organizer_id) |
breakout_session_rsvps
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| breakout_session_id |
INT |
NOT NULL, FOREIGN KEY → breakout_sessions(id) |
| attendee_id |
INT |
NOT NULL, FOREIGN KEY → attendees(id) |
| status |
ENUM('registered', 'cancelled') |
DEFAULT 'registered' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (breakout_session_id, attendee_id) |
staff
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| event_id |
INT |
NOT NULL, FOREIGN KEY → events(id) |
| email |
VARCHAR(255) |
NOT NULL |
| password_hash |
VARCHAR(255) |
DEFAULT NULL |
| first_name |
VARCHAR(100) |
NOT NULL |
| last_name |
VARCHAR(100) |
NOT NULL |
| staff_code |
VARCHAR(10) |
UNIQUE DEFAULT NULL |
| invite_token |
VARCHAR(64) |
DEFAULT NULL |
| invite_used |
BOOLEAN |
DEFAULT FALSE |
| preferred_language |
VARCHAR(5) |
DEFAULT 'en' |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (event_id, email) |
languages
| Column |
Type |
Constraints |
| code |
VARCHAR(5) |
PRIMARY KEY |
| name |
VARCHAR(50) |
NOT NULL |
| native_name |
VARCHAR(50) |
NOT NULL |
| is_active |
BOOLEAN |
DEFAULT TRUE |
| is_default |
BOOLEAN |
DEFAULT FALSE |
| date_format |
VARCHAR(30) |
DEFAULT '%B %d, %Y at %H:%M' |
| sort_order |
INT |
DEFAULT 0 |
attendee_types
| Column |
Type |
Constraints |
| id |
INT |
PRIMARY KEY AUTO_INCREMENT |
| event_id |
INT |
NOT NULL, FOREIGN KEY → events(id) |
| code |
VARCHAR(10) |
NOT NULL |
| name |
VARCHAR(100) |
NOT NULL |
| price |
DECIMAL(10,2) |
DEFAULT 0.00 |
| created_at |
TIMESTAMP |
DEFAULT CURRENT_TIMESTAMP |
|
|
UNIQUE KEY (event_id, code) per event |
4. User Types & Roles
Organizer
- Creates/manages events
- Manages attendee types (with pricing)
- Creates/manages breakout sessions
- Adds/removes staff members
- Checks in attendees
- Generates badge PDFs (rectangular format)
- Downloads attendee Excel sheets
- Sends notifications
- Manages all event aspects
Staff
- Invited via email with token link
- Access staff dashboard for assigned events
- Check-in attendees at events
- Limited to event-specific operations
Attendee
- Registers for events (with optional payment)
- Manages personal profile
- RSVP's for breakout sessions
- Connects with other attendees (request/accept/reject)
- Requests appointments
- Downloads personal badge
- Scans QR codes to connect with others
Presenter (via presenter dashboard)
- Access to presenter-specific dashboard
5. Core Features
Event Management
- Create/edit/delete events
- Set event date, time, location, max attendees
- Generate unique event codes
- Event registration with type-based pricing
- Payment processing
- Email notifications
Attendee Management
- Registration (email/password)
- Profile management (name, organization, role, bio, phone, LinkedIn)
- Profile photo upload with crop/zoom
- Personal attendee page (token-based access)
- Attendee type assignment (VIP, General, etc.)
- Check-in tracking
- Badge generation
Breakout Sessions
- Create sessions within events
- RSVP system (register/cancel)
- Capacity management
- Multiple organizer assignment
Staff Management
- Invite staff via email
- Token-based invitation flow
- Staff code generation
- Edit/remove staff
Networking
- Connect with other attendees (QR scan or search)
- Connection request system (pending/accepted/rejected)
- Appointment scheduling
- Connection requests management
Internationalization
- 7 languages: English, Dutch, German, French, Spanish, Italian, Polish
- Language preference per user
- Locale detection (URL, session, cookie, browser, user preference)
Export/Reporting
- Excel export of attendees
- Badge PDF generation (rectangular)
- QR code integration for badges
6. Key Routes
Public
/ - Landing page
/login - Login page
/register/organizer - Organizer registration
/register/attendee/<code> - Attendee registration for event
/event/register/<code> - Event registration with type
/event/<code>/payment - Payment processing
/staff/<staff_code> - Staff invitation accept
/attendee/request-link - Request personal page link
/attendee/personal/<token> - Personal attendee page
Organizer
/organizer/dashboard - Dashboard
/organizer/event/create - Create event
/organizer/event/<id>/edit - Edit event
/organizer/event/<id>/attendee-types - Manage attendee types
/organizer/event/<id>/breakout-sessions - Manage breakout sessions
/organizer/event/<id>/staff - Manage staff
/organizer/event/<id>/attendees/batch-assign-type - Batch assign types
/organizer/event/<id>/checkin/<attendee_id> - Check-in attendee
/organizer/event/<id>/badges/rectangular/download - Download badges
/organizer/event/<id>/attendees/excel/download - Excel export
Staff
/staff/dashboard - Staff dashboard
/staff/<event_id>/dashboard - Event-specific staff view
/staff/invite/<token> - Accept invitation
Attendee
/attendee/dashboard - Attendee dashboard
/attendee/profile - Edit profile
/attendee/photo - Upload photo
/attendee/breakout-sessions - View/RSVP sessions
/attendee/event/attendance - Update attendance status
/attendee/badge/download - Download badge
/attendee/scan - QR scan interface
/attendee/connection-requests - Manage connection requests
/appointments - Manage appointments
Presenter
/presenter/dashboard - Presenter dashboard