A sophisticated desktop application built with Electron, Next.js, and Redis for optimizing seat assignments for large events and venues. Originally developed for "Grote Avond" events at educational institutions.
This application automates the complex task of seating arrangement for large events, taking into account guest preferences, VIP status, group assignments, and venue constraints. It features an intelligent algorithm that optimizes seat placement while respecting social connections and accessibility requirements.
- Automatic Optimization: AI-powered algorithm that assigns seats based on multiple criteria
- Preference Matching: Groups guests who want to sit together
- VIP Management: Prioritizes special guests with preferred seating areas
- Balcony Management: Automatic balcony utilization based on capacity thresholds
- Conflict Resolution: Advanced handling of seating conflicts with multiple resolution strategies
- Bulk Import: Excel/CSV import with automatic guest type detection
- Individual Editing: Modify guest details with real-time seating updates
- Search & Filter: Find guests by name, email, or student ID
- Export Functionality: Generate reports and backup data
- Flexible Layout: Configurable seating arrangements for different venues
- Seat Blocking: Manual seat blocking for equipment or accessibility needs
- Priority Zones: Define VIP areas and preferred seating sections
- Balcony Support: Multi-level seating with automatic overflow management
- Multi-Day Events: Support for events spanning multiple days
- Offline Mode: Continue working without internet connectivity
- Algorithm Logging: Detailed logs of seating assignment decisions
- Theme Support: Light and dark mode interface
- Real-time Updates: Live seating status and progress tracking
- Frontend: Next.js with React and TypeScript
- Backend: Electron main process
- Database: Redis (with offline fallback)
- Styling: Tailwind CSS with Radix UI components
- Build System: Nextron (Next.js + Electron)
βββ main/ # Electron main process
β βββ background.ts # Main application entry
β βββ preload.js # Renderer-main bridge
β βββ helpers/ # Core business logic
β βββ algorithm.ts # Seating assignment algorithm
β βββ database.ts # Database operations
β βββ zaalIndeling.ts # Venue configuration
βββ renderer/ # Next.js frontend
β βββ components/ # Reusable UI components
β βββ pages/ # Application pages
β βββ types/ # TypeScript definitions
βββ resources/ # Static assets and configuration
- Node.js 16+
- Yarn package manager
- Redis database (local or cloud)
-
Clone the repository
git clone <repository-url> cd hall-seating-management
-
Install dependencies
yarn install
-
Configure environment variables
Copy the environment template:
cp .env.example .env.local
Update
.env.localwith your Redis credentials:REDIS_USERNAME=your-redis-username REDIS_PASSWORD=your-redis-password REDIS_HOST=your-redis-host.com REDIS_PORT=6379
-
Database Setup
Option A: Redis Cloud (Recommended)
- Sign up at Redis Cloud
- Create a new database
- Use the provided credentials in your
.env.local
Option B: Local Redis
# macOS brew install redis brew services start redis # Ubuntu/Debian sudo apt install redis-server sudo systemctl start redis-server # Docker docker run -d -p 6379:6379 redis:alpine
# Start development server
yarn dev
# Build for production
yarn build
# Package executable
yarn dist- Navigate to the Import page
- Upload Excel/CSV files with guest information
- Review and confirm the imported data
- The system automatically detects guest types (students, teachers, VIPs)
- Set VIP seating preferences (ideal rows)
- Configure balcony usage threshold
- Manage special guest lists (VIPs, performers)
- Adjust algorithm parameters
- Click "Generate Seating" to run the optimization algorithm
- Monitor progress through the real-time status updates
- Review the generated seating arrangement
- Edit individual seat assignments as needed
- Block seats for technical equipment
- Move guests to accommodate special requests
- Export final arrangements
CSV/Excel columns:
- Email address (required)
- First name / Last name
- Preference day (1st and 2nd choice)
- Seating preferences (people to sit with)
- Special status indicators
Edit main/helpers/zaalIndeling.ts to match your venue:
export const zaalIndeling = {
rijen: {
1: { maxStoelen: 20, isBalcony: false },
2: { maxStoelen: 22, isBalcony: false },
// Add more rows as needed
}
};Adjust seating preferences in the Settings page:
- VIP seating zones
- Balcony usage threshold
- Preference matching weights
- Group seating strategies
Database Connection Problems
- Verify Redis credentials and network connectivity
- Check if your IP is whitelisted (Redis Cloud)
- The app automatically switches to offline mode if connection fails
Import Problems
- Ensure CSV/Excel format matches expected columns
- Check for special characters that might cause parsing issues
- Verify email format (used for guest type detection)
Performance Issues
- Large guest lists (>1000) may cause slowdowns
- Monitor RAM usage and processor load during algorithm execution
- Consider increasing balcony threshold for better performance
Seating Conflicts
- Use the manual override features for special cases
- Check algorithm logs for detailed conflict resolution information
- Adjust preference weights if needed
If you encounter issues:
- Check the algorithm logs page for detailed error information
- Verify your environment configuration
- Try running in offline mode to isolate database issues
- Check the GitHub issues page for known problems
We welcome contributions! Please see our contributing guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Ensure TypeScript compliance
- Follow the existing code style
- Test both online and offline modes
- Verify seating algorithm changes don't break existing functionality
This project is licensed under the MIT License - see the LICENSE file for details.
This application:
- Uses environment variables for sensitive configuration
- Includes sample data only (no real personal information)
- Supports offline mode for enhanced privacy
- Follows GDPR compliance best practices
For production use, ensure:
- Secure Redis configuration
- Regular data backups
- Proper access controls
- Compliance with local privacy regulations
For technical support and questions:
- Open an issue on GitHub
- Check the documentation in the
docs/folder - Review the FAQ section in the application
Note: This application was originally developed for educational institutions but can be adapted for any large seating event including conferences, theaters, weddings, and corporate events.