Files
conference/SPEC.md
T
paul 934848b7f5 Add password reset flow, attendee profile enhancements, and spec
- Add forgot_password and reset_password templates and routes
- Enhance profile.html with photo crop/zoom functionality
- Add attendee type management to edit_attendee.html
- Update templates styling and layout consistency
- Document database schema in SPEC.md
- Add CLAUDE.md project guidance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 19:52:42 +00:00

12 KiB

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

  1. Authentication: Login/logout for organizers
  2. Event Management: Create, edit, delete events
  3. Attendee Management: View, edit attendees; manage attendee types
  4. Badge Printing: Generate printable badge list (PDF-ready HTML)
  5. QR Code Scanning: Mobile camera-based check-in by scanning attendee QR codes
  6. Breakout Sessions: Create/manage breakout sessions within events
  7. Staff Management: Add staff members to events via invite codes
  8. Event Staff View: See which staff are assigned to events

Staff Features

  1. Authentication: Login via staff invite code
  2. QR Scanning: Scan attendee QR codes for check-in
  3. Event Dashboard: View assigned events and scan functionality

Attendee Features

  1. Authentication: Register/login for attendees
  2. Event Registration: RSVP for events with optional payment
  3. Profile Management: Update profile with name, org, role, intro, photo (with crop/zoom)
  4. Connections: Send/accept/reject connection requests
  5. Appointments: Request/accept/reject meeting appointments
  6. Breakout Sessions: RSVP for breakout sessions
  7. Password Reset: Request password reset via email

User Interactions & Flows

Organizer Flow

  1. Login → Dashboard → Create Event → Manage Attendees → Print Badges / Scan Check-in
  2. Create breakout sessions, manage attendee types, invite staff

Staff Flow

  1. Use invite code → Login → View assigned events → Scan attendees for check-in

Attendee Flow

  1. Register → Login → RSVP to Event → Manage Profile → Connect with Attendees → Request Appointments
  2. 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

/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
│   └── uploads/           # User uploaded files
└── templates/
    ├── base.html
    ├── index.html
    ├── register.html
    ├── attendees.html
    ├── auth/
    │   ├── login.html
    │   ├── forgot_password.html
    │   └── reset_password.html
    ├── organizer/
    │   ├── dashboard.html
    │   ├── create_event.html
    │   ├── edit_event.html
    │   ├── edit_event_confirm.html
    │   ├── event_detail.html
    │   ├── event_staff.html
    │   ├── badges.html
    │   ├── scan.html
    │   ├── edit_attendee.html
    │   ├── attendee_types.html
    │   ├── all_attendee_types.html
    │   ├── edit_attendee_type.html
    │   ├── breakout_sessions.html
    │   ├── breakout_session_detail.html
    │   ├── create_breakout_session.html
    │   ├── edit_breakout_session.html
    │   ├── edit_breakout_session_confirm.html
    │   └── edit_staff.html
    ├── attendee/
    │   ├── dashboard.html
    │   ├── profile.html
    │   ├── connections.html
    │   ├── connection_requests.html
    │   ├── event.html
    │   ├── event_register.html
    │   ├── payment.html
    │   ├── personal.html
    │   └── request_link.html
    ├── staff/
    │   ├── dashboard.html
    │   ├── staff_events.html
    │   └── scan.html
    └── presenter/
        └── dashboard.html