dec6446d7d
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
178 lines
6.3 KiB
Markdown
178 lines
6.3 KiB
Markdown
# 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/<id>` - Get event details
|
|
- `PUT /api/events/<id>` - Update event
|
|
- `DELETE /api/events/<id>` - Delete event
|
|
|
|
### Attendees
|
|
- `GET /api/events/<id>/attendees` - List attendees for event
|
|
- `GET /api/attendees/<id>` - Get attendee profile
|
|
- `PUT /api/attendees/<id>` - Update attendee profile
|
|
- `POST /api/attendees/<id>/photo` - Upload profile photo
|
|
|
|
### Connections
|
|
- `GET /api/connections` - List my connections
|
|
- `POST /api/connections` - Send connection request
|
|
- `PUT /api/connections/<id>` - Accept/reject connection
|
|
- `GET /api/attendees` - Search attendees
|
|
|
|
### Appointments
|
|
- `GET /api/appointments` - List my appointments
|
|
- `POST /api/appointments` - Request appointment
|
|
- `PUT /api/appointments/<id>` - Accept/reject appointment
|
|
|
|
### Organizer Tools
|
|
- `GET /api/organizer/events/<id>/badges` - Get badge printable view
|
|
- `GET /api/organizer/events/<id>/stats` - Get attendance stats
|
|
- `GET /api/organizer/events/<id>/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
|
|
```
|