Your Army of Displays
A powerful, modern digital signage platform for managing multiple displays using Raspberry Pi devices.
Features • Quick Start • Documentation • Demo • Contributing
- About
- Features
- Technology Stack
- Quick Start
- Installation
- Raspberry Pi Setup
- Usage
- Documentation
- Contributing
- Team
- License
PanelSena is a comprehensive cloud-based digital signage management system that enables you to control and monitor multiple displays from a single dashboard. Built with modern web technologies and designed for Raspberry Pi integration, it's perfect for businesses, schools, retail stores, restaurants, and any organization needing dynamic content display.
- 🚀 Easy Setup - Get your first display running in minutes
- 💰 Cost-Effective - Uses affordable Raspberry Pi devices
- ☁️ Cloud-Based - Access from anywhere, no on-premise servers
- 🔒 Secure - Device-based authentication and Firebase security
- 📊 Analytics - Real-time monitoring and performance metrics
- 🎨 Modern UI - Beautiful, responsive interface built with Next.js
- 🔄 Real-Time - Live updates and instant content changes
- Real-time display monitoring and status tracking
- Online/offline detection with heartbeat monitoring
- Display configuration (brightness, orientation, resolution)
- Group organization for multiple displays
- Uptime tracking and performance metrics
- Device linking with secure authentication
- Upload images, videos, and documents
- Firebase Storage integration with CDN
- Content categorization and search
- Upload progress tracking
- Thumbnail generation
- Multi-file uploads
- Schedule content to specific displays
- Recurring schedules (daily, weekly, monthly)
- Time-based content rotation
- Multiple displays and content per schedule
- Schedule status management (active, paused, completed)
- Calendar view for easy planning
- Real-time display monitoring and control
- Remote playback management (play, pause, stop, skip)
- Volume control and adjustment
- Live status updates with heartbeat monitoring
- Schedule execution tracking
- Command queue management
- Error reporting and diagnostics
- Raspberry Pi player integration
- Real-time activity feed
- Performance metrics and KPIs
- Display analytics and statistics
- Content engagement tracking
- Uptime monitoring
- System health dashboard
- Email/Password authentication
- Google Sign-In integration
- Protected routes with middleware
- User data isolation
- Device-based authentication
- Firebase security rules
- Secure credential management
- Modern, responsive UI with Tailwind CSS
- Dark/Light theme support
- Mobile-optimized interface
- Intuitive navigation
- Real-time updates
- Toast notifications
- Accessibility features
- Next.js 14 - React framework with App Router
- React 18 - UI library
- TypeScript - Type safety
- Tailwind CSS - Utility-first CSS
- Shadcn/ui - Component library
- Radix UI - Accessible components
- Lucide React - Icon library
- Firebase Authentication - User authentication
- Cloud Firestore - NoSQL database
- Firebase Realtime Database - Real-time sync
- Firebase Storage - File storage
- Firebase Hosting - Web hosting
- Python 3 - Player runtime
- VLC - Media playback
- Firebase Admin SDK - Backend integration
- python-vlc - VLC Python bindings
- Node.js 18+ and npm/pnpm
- Firebase account (Sign up)
- Raspberry Pi 3 or higher (for display player)
-
Clone the repository
git clone https://github.com/41vi4p/PanelSena.git cd PanelSena -
Install dependencies
npm install # or pnpm install -
Set up Firebase
Create a Firebase project at firebase.google.com
Enable these services:
- Authentication (Email/Password & Google)
- Cloud Firestore
- Realtime Database
- Storage
-
Configure environment variables
Create
.env.localin the root directory:NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id NEXT_PUBLIC_FIREBASE_DATABASE_URL=your_database_url
-
Run development server
npm run dev
-
Open your browser
Navigate to http://localhost:3000
-
Prepare your Raspberry Pi
- Raspberry Pi 3 or higher
- Raspbian OS installed
- Internet connection
- Display connected via HDMI
-
Run the installation script
cd raspberry-pi chmod +x install.sh ./install.sh -
Run the setup wizard
python3 setup_device.py
This will:
- Generate device credentials
- Create configuration file
- Save device ID and key
-
Link the device to your account
- Go to your PanelSena dashboard
- Click "Add Display"
- Enter the device ID and key from setup
- Your display is now linked!
-
Start the player
python3 player.py
See raspberry-pi/README.md for detailed instructions.
PanelSena/
├── app/ # Next.js app directory
│ ├── dashboard/ # Dashboard pages
│ ├── page.tsx # Login page
│ ├── layout.tsx # Root layout
│ └── globals.css # Global styles
├── components/ # React components
│ ├── ui/ # UI components (Radix)
│ ├── display-grid.tsx # Display management
│ ├── content-library.tsx # Content management
│ ├── protected-route.tsx # Auth guard
│ └── ...
├── hooks/ # Custom React hooks
│ ├── use-auth.ts # Authentication hook
│ ├── use-displays.ts # Display management hook
│ ├── use-content.ts # Content management hook
│ ├── use-activities.ts # Activity logging hook
│ ├── use-schedules.ts # Schedule management hook
│ └── use-analytics.ts # Analytics hook
├── lib/ # Utility libraries
│ ├── firebase.ts # Firebase initialization
│ ├── auth.ts # Authentication functions
│ ├── firestore.ts # Firestore operations
│ ├── storage.ts # Storage operations
│ ├── types.ts # TypeScript types
│ └── utils.ts # Helper functions
├── firestore.rules # Firestore security rules
├── storage.rules # Storage security rules
├── FIREBASE_SETUP.md # Firebase setup guide
└── README.md # This file
User profiles and account information
Digital display configurations and status
Uploaded content metadata (images, videos, documents)
Content scheduling information
User activity logs and system events
Performance metrics and usage data
# Development
npm run dev # Start development server
# Production
npm run build # Build for production
npm start # Start production server
# Code Quality
npm run lint # Run ESLint- All data is isolated per user using Firebase security rules
- Users can only access their own resources
- File uploads are validated for type and size (max 100MB)
- Authentication required for all operations
- HTTPS enforced in production
Security rules are provided in:
firestore.rules- Database securitystorage.rules- File storage security
Deploy them using:
firebase deploy --only firestore:rules
firebase deploy --only storage:rulesAll display data, content, and activities update in real-time using Firestore listeners.
Files are uploaded to Firebase Storage with progress tracking. Metadata is stored in Firestore.
Firebase Authentication with Email/Password and Google Sign-In. Protected routes ensure only authenticated users can access the dashboard.
All user actions are logged to the activities collection for audit trails.
System automatically tracks metrics like display uptime, content views, and user engagement.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
-
Login to Dashboard
- Sign in with your account
-
Add a Display
- Click "Add Display" button
- Enter device credentials from Raspberry Pi setup
- Display will appear in your dashboard
-
Upload Content
- Go to Content Library
- Click "Upload Content"
- Select images, videos, or documents
- Add to your library
-
Create a Schedule
- Navigate to Schedules
- Click "Create Schedule"
- Select displays and content
- Set time and recurrence
- Save and activate
-
Monitor in Real-Time
- View live status on Dashboard
- Control playback remotely
- Check analytics and metrics
- Firebase Setup Guide - Complete Firebase configuration
- Device Authentication - Device linking system
- Live Control Setup - Real-time playback control
- Raspberry Pi Guide - Pi setup and configuration
- Device Linking Guide - Step-by-step linking process
- Configuration Status - System configuration
- 🏢 Corporate - Office announcements, KPIs, company news
- 🛍️ Retail - Product showcases, promotions, pricing
- 🎓 Education - Schedules, events, educational content
- 🏥 Healthcare - Wait times, directions, health information
- 🍽️ Restaurants - Menus, specials, promotional offers
- 🏨 Hospitality - Guest information, facilities, local attractions
We welcome contributions! Here's how you can help:
- 🐛 Report bugs - Open an issue with details
- 💡 Suggest features - Share your ideas
- 📖 Improve docs - Help others understand
- 🔧 Submit PRs - Fix bugs or add features
- ⭐ Star the repo - Show your support
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Use ESLint and Prettier
- Write meaningful commit messages
- Add comments for complex logic
- Update documentation
| David Porathur | Soham Marathe | Arpith Poojary | Anuj Naik |
|---|---|---|---|
| Developer | Developer | Developer | Developer |
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2025 PanelSena Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
- Built with Next.js
- UI Components from shadcn/ui
- Icons from Lucide
- Backend powered by Firebase
- Media playback via VLC
- 📧 Email: support@panelsena.com
- 📖 Documentation: docs
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
Built with ❤️ by the PanelSena Team
⭐ Star us on GitHub — it helps!
Comprehensive documentation is available in the docs/ folder:
- Quick Start Guide - 5-minute Raspberry Pi setup
- Firebase Setup - Firebase configuration guide
- Live Control System - Real-time playback control guide
- Device Authentication - Device-based auth system
- Implementation Summary - Technical details
- Raspberry Pi Setup - Complete setup guide
- Quick Start - Rapid deployment
- Documentation Index - Complete documentation overview
See FIREBASE_SETUP.md for common issues and solutions.
For specific issues:
- Live Control: docs/LIVE_CONTROL_SETUP.md#troubleshooting
- Device Auth: docs/DEVICE_AUTHENTICATION.md#troubleshooting
- Raspberry Pi: raspberry-pi/QUICK_START.md#troubleshooting
For issues or questions, please open an issue on GitHub.
- Live playback control and monitoring
- Raspberry Pi player integration
- Mobile app for display control
- Advanced analytics dashboard
- Content approval workflow
- Multi-user collaboration
- Display health monitoring
- Automated content scheduling
- Integration with external content sources
- Report generation