Frontend Applications Overview
The unified eventyay system includes several frontend applications built with modern web technologies.
This page provides an overview of all frontend applications. For component-specific details:
Video Webapp: See Video Component Frontend - Web Application
Talk Frontend Apps: See Talk Component Frontend
Video Web Application
The main video/virtual event interface is a comprehensive Vue 3 application.
Location: app/eventyay/webapp/
For complete documentation, see Video Component Frontend - Web Application.
Architecture
Framework: Vue 3 with Vuex for state management
Build System: Vite
Routing: Vue Router
Styling: Stylus with custom theming
i18n: vue-i18n for internationalization
Core Application Structure
Main Entry Point
File: src/main.js
Initializes the Vue application, sets up: - Store (Vuex) - Router - i18n - Global components - WebSocket connections
Root Component
File: src/App.vue
The root component that contains: - AppBar (top navigation) - Router view (dynamic content) - Global error boundaries - Theme provider
Key Components
Chat System
components/Chat.vue- Main chat containercomponents/ChatContent.vue- Message display areacomponents/ChatInput.vue- Message input with emoji supportcomponents/ChatMessage.vue- Individual message componentcomponents/ChatUserCard.vue- User profile card in chatcomponents/CreateChatPrompt.vue- New channel creationcomponents/CreateDmPrompt.vue- Direct message creation
Video & Streaming
components/Livestream.vue- HLS/RTMP stream viewercomponents/MediaSource.vue- Media source selectorcomponents/JanusCall.vue- Janus WebRTC video callcomponents/JanusChannelCall.vue- Channel-based video callscomponents/janus/- Janus-specific components
Interactive Features
components/Poll.vue- Single poll display and votingcomponents/Polls.vue- Polls listingcomponents/Question.vue- Single Q&A questioncomponents/Questions.vue- Q&A question listcomponents/Roulette.vue- Speed networking roulette
Exhibition
components/Exhibition.vue- Exhibition hall viewcomponents/ContactExhibitorPrompt.vue- Exhibitor contact formcomponents/PosterHall.vue- Poster session hall
User Interface
components/Avatar.vue- User avatar displaycomponents/Identicon.vue- Generated user identiconscomponents/EmojiPicker.vue- Emoji selectioncomponents/ColorPicker.vue- Color selectioncomponents/ReactionsBar.vue- Reaction emoji barcomponents/ReactionsOverlay.vue- Floating reaction overlayscomponents/Scrollbars.vue- Custom scrollbar styling
Content Display
components/MarkdownContent.js- Markdown renderercomponents/MarkdownPage.vue- Full markdown pagecomponents/RichTextContent.vue- Rich text displaycomponents/RichTextEditor.vue- Quill-based rich text editorcomponents/StaticPage.vue- Static content pagescomponents/IframePage.vue- Embedded iframe pages
Forms & Prompts
components/Prompt.vue- Base modal promptcomponents/UserActionPrompt.vue- User action confirmationcomponents/FeedbackPrompt.vue- Feedback submissioncomponents/RecordingsPrompt.vue- Recording accesscomponents/QRCodePrompt.vue- QR code displaycomponents/AVDevicePrompt.vue- Audio/video device selection
Utility Components
components/UploadButton.vue- File upload buttoncomponents/UploadUrlInput.vue- URL or file uploadcomponents/UserSearch.vue- User searchcomponents/UserSelect.vue- User selection dropdowncomponents/InfiniteScroll.vue- Infinite scroll loadercomponents/CopyableText.vue- Click-to-copy textcomponents/ErrorBoundary.vue- Error boundary component
Views
The application includes 70+ views in src/views/ organized by feature:
Room Views
Room layout and configuration
Room settings
Room permissions
Stage management
Event Views
Event home page
Schedule display
Session details
Speaker profiles
User Views
User profile
Settings
Notifications
Direct messages
Admin Views
Event configuration
Room management
User moderation
Analytics dashboard
State Management
Vuex Store Modules (src/store/)
- announcement.js
Global announcements
Notification banners
- chat.js
Chat messages and channels
Unread counts
Message history
- exhibition.js
Exhibitor data
Contact requests
Booth interactions
- poll.js
Poll data and votes
Real-time results
- question.js
Q&A questions
Voting and moderation
- roulette.js
Networking queue
Match history
- schedule.js
Event schedule
Session bookmarks
- notifications.js
In-app notifications
Browser notifications
Push subscriptions
Utility Libraries
API Client (src/lib/api.js)
Provides methods for: - Authentication - Room operations - Chat operations - User management - Event data fetching
WebSocket Client (src/lib/WebSocketClient.js)
Handles: - Real-time bidirectional communication - Automatic reconnection - Message queuing - Channel subscriptions
Other Utilities
src/lib/emoji.js- Emoji utilities and renderingsrc/lib/gravatar.js- Gravatar image URLssrc/lib/identicon.js- Generated identicon imagessrc/lib/validators.js- Form validationsrc/lib/profile.js- User profile helperssrc/lib/janus.js- Janus WebRTC integrationsrc/lib/search.js- Search utilitiessrc/lib/filetypes.js- File type detectionsrc/lib/ApiError.js- API error handling
Internationalization
Supported Languages (src/locales/):
- English (en)
- German (de)
- Spanish (es)
- French (fr)
- Portuguese (pt_BR)
- Russian (ru)
- Ukrainian (uk)
- Arabic (ar)
Implementation: vue-i18n with JSON translation files
Usage:
1// In components
2this.$t('key.path')
3
4// In templates
5{{ $t('key.path') }}
Styling & Theming
Base System: Stylus preprocessor
Files (src/styles/):
- global.styl - Global styles
- variables.styl - CSS variables and colors
- typography.styl - Font definitions
- common-ui.styl - Common UI components
- themed-buntpapier.styl - Themed component library
- media-queries.styl - Responsive breakpoints
Theme System (src/theme.js):
- Dynamic color themes
- Custom branding support
- Dark mode support
Building & Development
Development Server:
cd app/eventyay/webapp
npm install
npm run dev
Production Build:
npm run build
Output: dist/ directory with optimized assets
Configuration
vite.config.js - Vite build configuration
vue.config.js - Vue-specific configuration
babel.config.js - Babel transpilation
eslint.config.js - ESLint code quality
Talk Component Frontend Applications
The talk component includes two specialized frontend applications:
Schedule Editor
A TypeScript/Vue 3 application for visual schedule editing.
Location: app/eventyay/frontend/schedule-editor/
For complete documentation, see Talk Component Frontend.
Global Navigation Menu
A web component for unified navigation across all eventyay interfaces.
Location: app/eventyay/frontend/global-nav-menu/
For complete documentation, see Talk Component Frontend.
Development Setup
Prerequisites
Node.js 18+ and npm
Python 3.11+ (for backend API)
Modern web browser
Full Stack Development
Start Backend:
cd app
make run
Start Webapp Frontend:
cd app/eventyay/webapp
npm install
npm run dev
Access: - Frontend: http://localhost:8880 - Backend API: http://localhost:8000
Frontend-Only Development
For frontend-only changes, you can use the production backend:
cd app/eventyay/webapp
# Edit config.js to point to production API
npm run dev
Testing
1# Run linting
2npm run lint
3
4# Run unit tests (when available)
5npm run test
Best Practices
Component Development
Single Responsibility: Each component should do one thing well
Props vs Events: Use props down, events up pattern
Composition: Prefer composition over inheritance
Async/Await: Use async/await for API calls
Error Handling: Always handle errors gracefully
State Management
Local vs Global: Use component state for local UI, Vuex for shared state
Immutability: Never mutate Vuex state directly
Actions: Use actions for async operations
Getters: Use getters for computed state
Performance
Lazy Loading: Use dynamic imports for route-based code splitting
Virtual Scrolling: Use for long lists (implemented in InfiniteScroll)
Memoization: Cache expensive computations
Debouncing: Debounce user input handlers
Accessibility
Semantic HTML: Use proper HTML elements
ARIA Labels: Add labels for screen readers
Keyboard Navigation: Ensure keyboard accessibility
Color Contrast: Maintain WCAG AA standards
Troubleshooting
Common Issues
- WebSocket Connection Fails
Check CORS configuration
Verify WebSocket URL in config
Check browser console for errors
- Build Errors
Clear node_modules and reinstall
Check Node.js version (18+)
Verify all dependencies installed
- Hot Reload Not Working
Restart dev server
Clear browser cache
Check file watcher limits
- API Calls Failing
Verify backend is running
Check API URL configuration
Inspect network tab for errors
Further Reading
Vue 3 Documentation: https://vuejs.org
Vuex Documentation: https://vuex.vuejs.org
Vite Documentation: https://vitejs.dev
TypeScript: https://www.typescriptlang.org