🖥️ PanelSena
Your Army of Displays
Cloud-Based Digital Signage Management Platform
A powerful, modern digital signage platform for managing multiple displays using Raspberry Pi devices.
Features • Quick Start • Documentation • Demo • Contributing
📋 Table of Contents
- About
- Features
- Technology Stack
- Quick Start
- Installation
- Raspberry Pi Setup
- Usage
- Documentation
- Contributing
- Team
- License
🎯 About
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.
Why PanelSena?
- 🚀 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 AWS IAM 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
✨ Features
✨ Features
🖥️ Display Management
- 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
📁 Content Management
- Upload images, videos, and documents
- AWS S3 integration with CDN
- Content categorization and search
- Upload progress tracking
- Thumbnail generation
- Multi-file uploads
📅 Smart Scheduling
- 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
🎮 Live Playback Control
- 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
📊 Analytics & Monitoring
- Real-time activity feed
- Performance metrics and KPIs
- Display analytics and statistics
- Content engagement tracking
- Uptime monitoring
- System health dashboard
🔐 Authentication & Security
- Email/Password authentication
- Google Sign-In integration
- Protected routes with middleware
- User data isolation
- Device-based authentication
- AWS IAM security policies
- Secure credential management
🎨 User Experience
- Modern, responsive UI with Tailwind CSS
- Dark/Light theme support
- Mobile-optimized interface
- Intuitive navigation
- Real-time updates
- Toast notifications
- Accessibility features
🛠️ Technology Stack
Frontend
- 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
Backend & Infrastructure
- AWS DynamoDB - NoSQL database for device management
- AWS S3 - File storage with CDN
- AWS IAM - Identity and access management
- AWS SDK - AWS service integration
Raspberry Pi Player
- Python 3 - Player runtime
- VLC - Media playback
- AWS SDK for Python (boto3) - AWS DynamoDB integration
- python-vlc - VLC Python bindings
Development Tools
🚀 Quick Start
Prerequisites
- Node.js 18+ and npm/pnpm
- AWS Account (Sign up)
- Raspberry Pi 3 or higher (for display player)
Installation
-
Clone the repository
git clone https://github.com/41vi4p/PanelSena.git cd PanelSena -
Install dependencies
npm install # or pnpm install -
Set up AWS Services
Create AWS resources:
- DynamoDB table named
panelsena-devices - S3 bucket for file storage
- IAM user with appropriate permissions
- DynamoDB table named
-
Configure environment variables
Create
.env.localin the root directory:AWS_ACCESS_KEY_ID=your_access_key_id AWS_SECRET_ACCESS_KEY=your_secret_access_key AWS_REGION=us-east-1 DYNAMODB_TABLE_NAME=panelsena-devices S3_BUCKET_NAME=your-bucket-name
-
Run development server
npm run dev
-
Open your browser
Navigate to http://localhost:3000
🥧 Raspberry Pi Setup
Quick Setup
-
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
Manual Setup
See raspberry-pi/README.md for detailed instructions.
Project Structure
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
│ ├── dynamodb.ts # AWS DynamoDB client
│ ├── dynamodb-realtime.ts # DynamoDB operations
│ ├── auth.ts # Authentication functions
│ ├── storage.ts # AWS S3 operations
│ ├── types.ts # TypeScript types
│ └── utils.ts # Helper functions
├── raspberry-pi/ # Raspberry Pi player code
│ ├── player.py # Main player script
│ ├── dynamodb_client.py # AWS DynamoDB client
│ ├── setup_device.py # Device setup wizard
│ └── ...
├── prisma/ # Database schema (if used)
├── docs/ # Documentation
└── README.md # This file
DynamoDB Tables
panelsena-devices
Device management and real-time status tracking
- Primary Key:
device_id(String) - Sort Key:
data_type(String) - TTL:
ttlattribute for automatic cleanup
Data Types:
device_info: Device registration and configurationstatus: Real-time device status and heartbeatcommand: Remote control commandsresponse: Command execution responses
Available Scripts
# 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 ESLintSecurity
- All data is isolated per user using AWS IAM policies
- Users can only access their own resources through proper authentication
- File uploads are validated for type and size (max 100MB)
- Authentication required for all operations
- HTTPS enforced in production
- AWS credentials are encrypted and securely managed
AWS IAM Configuration
Create an IAM policy for PanelSena with the following permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:region:account:table/panelsena-devices"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}Apply least privilege principles and rotate access keys regularly.
Key Features Implementation
Real-time Updates
Display data, content, and activities update using DynamoDB polling with 2-5 second intervals for near real-time synchronization.
File Upload
Files are uploaded to AWS S3 with progress tracking. Metadata is stored in DynamoDB.
Authentication
Firebase Authentication with Email/Password and Google Sign-In. Protected routes ensure only authenticated users can access the dashboard.
Activity Logging
All user actions are logged to the activities collection for audit trails.
Analytics Tracking
System automatically tracks metrics like display uptime, content views, and user engagement.
Contributing
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
📖 Usage
Adding Your First Display
-
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
📚 Documentation
- AWS Setup Guide - Complete AWS services configuration
- DynamoDB Setup Guide - Database setup and 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
🎯 Use Cases
- 🏢 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
🤝 Contributing
We welcome contributions! Here's how you can help:
Ways to Contribute
- 🐛 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
Development Workflow
- 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
Code Style
- Follow TypeScript best practices
- Use ESLint and Prettier
- Write meaningful commit messages
- Add comments for complex logic
- Update documentation
👥 Team
Development Team
| David Porathur | Soham Marathe | Arpith Poojary | Anuj Naik |
|---|---|---|---|
| Developer | Developer | Developer | Developer |
📄 License
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.
🙏 Acknowledgments
- Built with Next.js
- UI Components from shadcn/ui
- Icons from Lucide
- Backend powered by AWS
- Media playback via VLC
📞 Support
- 📧 Email: support@panelsena.com
- 📖 Documentation: docs
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
Built with ❤️ by the PanelSena Team
⭐ Star us on GitHub — it helps!
Documentation
Comprehensive documentation is available in the docs/ folder:
Getting Started
- Quick Start Guide - 5-minute Raspberry Pi setup
- AWS Setup Guide - AWS configuration guide
Features & Implementation
- Live Control System - Real-time playback control guide
- Device Authentication - Device-based auth system
- Implementation Summary - Technical details
Raspberry Pi
- Raspberry Pi Setup - Complete setup guide
- Quick Start - Rapid deployment
Browse All
- Documentation Index - Complete documentation overview
Troubleshooting
See docs/AWS_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
Support
For issues or questions, please open an issue on GitHub.
Roadmap
- 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