Unified eventyay Architecture
Overview
Eventyay is a unified, open-source event management platform that integrates three major components:
Tickets Component - Ticket sales, registration, payment processing, and attendee management
Talk Component - Call for Papers (CfP), submission management, schedule building, and speaker coordination
Video Component - Virtual event platform with video streaming, interactive rooms, and networking features
All components are now integrated into a single codebase under the app/eventyay directory, sharing a unified data model, authentication system, and user interface.
Architecture Principles
Unified Data Model
All components share a common Django-based data model located in app/eventyay/base/models/. Key shared entities include:
Event - The central model representing both physical and virtual events
Organizer - Organizations managing events
User - Unified authentication across all components
Team - Permission and access control
Component-Specific Models
Each component extends the base models with specialized functionality:
Tickets Component Models:
Product, ProductCategory, ProductVariation
Order, OrderPosition, OrderPayment
Quota, Voucher, Invoice
CheckinList, Checkin
Talk Component Models:
Submission, SubmissionType, SubmissionStates
SpeakerProfile, Review, ReviewPhase
Schedule, TalkSlot, Track
CfP (Call for Papers)
Video Component Models:
Room, RoomView, Channel
StreamingServer, BBBServer, JanusServer
Poll, Exhibitor, Poster
RouletteRequest (networking)
Directory Structure
The unified codebase is organized as follows:
app/eventyay/
├── base/ # Core models, shared services
├── control/ # Organizer/admin interface
├── presale/ # Public ticket shop
├── orga/ # Talk organizer interface
├── agenda/ # Public talk schedule
├── cfp/ # Call for papers interface
├── features/ # Video and advanced features
│ ├── live/ # Live streaming
│ ├── integrations/
│ └── social/
├── api/ # REST API
├── plugins/ # Plugin system
└── config/ # Django settings
Authentication & Permissions
Eventyay uses a unified authentication system:
Single sign-on across all components
Role-based access control (RBAC)
Team-based permissions
OAuth2 support for third-party integrations
Users can have different roles:
Superuser - Full system access
Organizer - Can create and manage events
Team Member - Limited access based on team permissions
Speaker/Presenter - Can submit and manage talks
Attendee - Can purchase tickets and attend events
Database Schema
The unified database schema uses PostgreSQL (recommended) with the following key relationships:
Organizer (1) ──── (N) Event
│ │
│ ├── (N) Product (Tickets)
│ ├── (N) Submission (Talks)
│ ├── (N) Room (Video)
│ └── (N) Order
│
└── (N) Team ─── (N) User
API Architecture
The unified REST API (/api/v1/) provides access to all components:
GET /api/v1/organizers/ - List organizers
GET /api/v1/organizers/{org}/events/ - List events
GET /api/v1/organizers/{org}/events/{event}/products/ - Tickets
GET /api/v1/organizers/{org}/events/{event}/submissions/ - Talks
GET /api/v1/organizers/{org}/events/{event}/rooms/ - Video rooms
All API endpoints support:
Token authentication
OAuth2 authentication
Pagination
Filtering and searching
Webhooks for real-time updates
Plugin System
Eventyay supports plugins that can extend all components:
from eventyay.base.plugins import PluginConfig
class MyPluginApp(PluginConfig):
name = 'eventyay_myplugin'
class EventyayPluginMeta:
name = 'My Plugin'
category = 'FEATURE'
description = 'Extends eventyay functionality'
Plugins can:
Add new models and database fields
Register signal handlers
Provide custom views and URLs
Extend the API
Add payment providers
Create custom exporters
Frontend Architecture
The unified frontend uses:
Django Templates - Server-side rendering for main interfaces
Vue.js 3 - Interactive components (schedule editor, live features)
Bootstrap 5 - Responsive CSS framework
WebSockets - Real-time updates for video and chat
Key frontend modules:
app/eventyay/static/- Shared static assetsapp/eventyay/webapp/- Vue.js applicationsapp/eventyay/frontend/- Component libraries
Deployment Options
Eventyay can be deployed in several configurations:
All-in-One (Recommended for small to medium events):
Single server running all components
Docker Compose setup available
Suitable for events up to 10,000 attendees
Microservices (For large scale):
Separate containers for tickets, talk, video
Shared database and Redis
Load balancing and auto-scaling
Suitable for events with 10,000+ attendees
Hybrid:
Tickets and Talk on one server
Video on dedicated streaming infrastructure
Cost-effective for mostly physical events
Environment Variables
Unified environment variables (replacing component-specific ones):
EVENTYAY_DB_URL- Database connectionEVENTYAY_REDIS_URL- Redis connectionEVENTYAY_CONFIG_FILE- Configuration file pathEVENTYAY_DATA_DIR- Data directoryEVENTYAY_DEBUG- Debug mode (development only)
Migration from Legacy Systems
If migrating from standalone Pretix, Pretalx, or Venueless:
Database Migration: Use the provided migration scripts in
app/eventyay/base/migrations/Configuration: Update environment variables to use
EVENTYAY_prefixPlugins: Update plugin entry points to use
eventyay.pluginCustom Code: Update imports from
pretix.*toeventyay.*
For more details on the unified architecture, see the sections above.
Development Setup
To set up a local development environment:
# Clone the repository
git clone https://github.com/fossasia/eventyay.git
cd eventyay
# Set up the app directory
cd app
python -m venv venv
source venv/bin/activate
# Install dependencies
pip install -e .
# Run migrations
python manage.py migrate
# Create superuser
python manage.py createsuperuser
# Run development server
python manage.py runserver
The unified interface will be available at:
Tickets: http://localhost:8000/
For more details, see Development setup.
Testing
Run the unified test suite:
cd app
pytest
# Run specific component tests
pytest eventyay/base/tests/
pytest eventyay/orga/tests/ # Talk tests
pytest eventyay/presale/tests/ # Tickets tests
pytest eventyay/features/tests/ # Video tests
Performance Considerations
The unified architecture provides several performance benefits:
Shared Connection Pooling - All components use the same database connections
Unified Caching - Redis cache shared across components
Asset Optimization - Single build process for all static assets
Reduced Memory Footprint - No duplicate services or processes
For high-traffic events:
Use PostgreSQL with connection pooling (PgBouncer)
Enable Redis caching for sessions and data
Use CDN for static assets and media files
Configure Celery for background tasks
Scale horizontally with load balancing
Security
The unified platform implements comprehensive security measures:
CSRF Protection - Django CSRF tokens on all forms
XSS Prevention - Content Security Policy headers
SQL Injection Prevention - Django ORM with parameterized queries
Rate Limiting - API rate limits and throttling
Secure Sessions - HTTPOnly, Secure cookies
2FA Support - Two-factor authentication for organizers
See Also
Development setup - Setting up your development environment
Creating a plugin - Creating plugins
REST API - API documentation
Administrator documentation - Administrator documentation