# 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, and schedule appointments - **Target Users**: Event organizers 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 | | 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 for deep linking | | 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 | | 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 | ## Functionality Specification ### Organiser Features 1. **Authentication**: Login/logout for organizers 2. **Event Management**: Create, edit, delete events 3. **Attendee List**: View all attendees for their events 4. **Badge Printing**: Generate printable badge list (PDF-ready HTML) 5. **Attendance Stats**: See check-in counts and attendee statistics 6. **QR Code Scanning**: Mobile camera-based check-in by scanning attendee QR codes ### Attendee Features 1. **Authentication**: Register/login for attendees 2. **Event RSVP**: Register for events 3. **Profile Management**: Update profile with name, org, role, intro, photo 4. **Connections**: Send/accept/reject connection requests 5. **Appointments**: Request/accept/reject meeting appointments ### User Interactions & Flows #### Organiser Flow 1. Login → Dashboard → Create Event → View Attendees → Print Badges #### Attendee Flow 1. Register → Login → RSVP to Event → Manage Profile → Connect with Attendees → Request Appointments ## API Endpoints ### Auth - `POST /api/auth/organizer/register` - Register organizer - `POST /api/auth/organizer/login` - Login organizer - `POST /api/auth/attendee/register` - Register attendee - `POST /api/auth/attendee/login` - Login attendee - `POST /api/auth/logout` - Logout ### Events - `GET /api/events` - List public events - `POST /api/events` - Create event (organizer) - `GET /api/events/` - Get event details - `PUT /api/events/` - Update event - `DELETE /api/events/` - Delete event ### Attendees - `GET /api/events//attendees` - List attendees for event - `GET /api/attendees/` - Get attendee profile - `PUT /api/attendees/` - Update attendee profile - `POST /api/attendees//photo` - Upload profile photo ### Connections - `GET /api/connections` - List my connections - `POST /api/connections` - Send connection request - `PUT /api/connections/` - Accept/reject connection - `GET /api/attendees` - Search attendees ### Appointments - `GET /api/appointments` - List my appointments - `POST /api/appointments` - Request appointment - `PUT /api/appointments/` - Accept/reject appointment ### Organizer Tools - `GET /api/organizer/events//badges` - Get badge printable view - `GET /api/organizer/events//stats` - Get attendance stats - `GET /api/organizer/events//scan` - QR code scanner page for check-in ## Security - Password hashing with bcrypt - Session-based authentication - CSRF protection - SQL injection prevention via parameterized queries ## File Structure ``` /home/paul/conference/ ├── app.py # Flask application ├── config.py # Configuration ├── init_db.py # Database initialization script ├── requirements.txt # Python dependencies ├── static/ │ ├── css/ │ │ └── style.css │ └── js/ │ └── main.js └── templates/ ├── base.html ├── index.html ├── auth/ │ ├── login.html │ └── register.html ├── organizer/ │ ├── dashboard.html │ ├── create_event.html │ ├── event_detail.html │ ├── badges.html │ └── scan.html └── attendee/ ├── dashboard.html ├── event.html ├── profile.html ├── connections.html └── appointments.html ```