Initial commit: conference app with Flask
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user