1. Executive Summary
This document defines the requirements, architecture, and implementation strategy for a reliable digital signage platform designed around low-cost Raspberry Pi player devices.
The platform consists of two independent systems:
Content Management System (CMS)
A web-based administration platform used to upload, organize, schedule, preview, publish, and monitor digital signage content.
Player Runtime
A lightweight application running on Raspberry Pi devices that downloads published content, stores it locally, and continues playback without network connectivity.
Network connectivity is required only for synchronization and monitoring. Playback must continue independently using locally cached content.
2. Design Goals
| Goal | Description |
|---|---|
| Reliability | Screens must continue operating through network failures, server outages, and temporary errors. |
| Offline-first | Published content is stored locally on the player. |
| Simple Operations | Administrators should manage devices without technical knowledge. |
| Scalability | The architecture should support one device or hundreds. |
| Hardware Flexibility | The same content package should support multiple player platforms. |
3. System Architecture
The system uses a separated CMS and Player architecture.
Recommended Architecture Principle
The player should never depend on a live CMS webpage. It should download a published package and render locally.
4. Deployment Models
Option 1 - Cloud CMS
Administrator
|
Internet
|
Cloud CMS
|
Raspberry Pi Player
Best for multiple locations and remote management.
Option 2 - Local CMS
Laptop | Private WiFi Router | CMS Server | Raspberry Pi Player
Useful when devices cannot access external networks.
Option 3 - Offline Export
CMS ↓ Export Package ↓ USB / Local Transfer ↓ Player
Suitable for isolated installations without network access.
Support all three models through the same package format. The player should not care whether content came from cloud, local network, or USB transfer.
5. Content Management System (CMS)
The CMS is the central administration platform for managing digital signage content, devices, schedules, and publications. It should be designed as a web application accessible from desktop computers, laptops, and tablets.
5.1 CMS Design Principles
| Principle | Description |
|---|---|
| Simple Administration | Users should manage screens, content, and schedules without requiring technical knowledge. |
| Publish Model | Changes should not immediately affect displays. Content should follow a Create → Preview → Approve → Publish workflow. |
| Version Control | Every published release should have a unique immutable version. |
| Device Independence | The CMS should generate packages that any compatible player can consume. |
5.2 Recommended CMS Technology Stack
Recommended Implementation
- Backend: Laravel (PHP 8.3+)
- Frontend: Blade Templates + HTMX + Alpine.js
- Database: PostgreSQL for VPS deployments or MariaDB/MySQL for shared hosting
- Storage: Local filesystem with future S3-compatible support
- Queue: Redis-based background workers when scaling
Laravel is recommended because it provides a strong balance between performance, hosting availability, security, and long-term maintainability.
The CMS should be deployable on normal PHP hosting accounts for small installations. Larger deployments can migrate to a VPS without changing the application architecture.
5.3 CMS Modules
| Module | Purpose |
|---|---|
| Authentication | Users, roles, permissions, login security. |
| Media Library | Upload, organize, validate, and manage digital assets. |
| Playlist Manager | Create ordered sequences of content. |
| Layout Designer | Create screen zones and content placement. |
| Scheduler | Control when content appears. |
| Device Manager | Register and monitor Raspberry Pi players. |
| Publisher | Generate and distribute immutable content packages. |
| Monitoring | View device health, logs, and synchronization status. |
6. Media Library
The Media Library stores all content assets before they are assigned to playlists or layouts.
6.1 Supported Content Types
| Type | Recommended Format | Notes |
|---|---|---|
| Image | JPG, PNG, WebP | Static graphics and announcements. |
| Video | MP4 H.264 AAC | Primary video format for Pi compatibility. |
| Text Slide | HTML/CSS | Simple announcements and messages. |
| Web Content | URL | Should only be used for non-critical information. |
| QR Code | Generated SVG/PNG | Links to forms, websites, and documents. |
6.2 Media Upload Pipeline
6.3 Asset Validation
The CMS should validate uploaded files before publication.
- Allowed file extensions
- Maximum file size
- Image dimensions
- Video codec compatibility
- Audio compatibility
- Checksum generation
The player should never receive unknown media formats. Conversion and validation should happen before publishing.
7. Publishing Workflow
Digital signage should use a controlled publishing workflow. Directly modifying live screens creates reliability problems.
7.1 Publication States
| State | Meaning |
|---|---|
| Draft | Content is being prepared. |
| Review | Waiting for approval. |
| Approved | Ready for publishing. |
| Published | Available to players. |
| Expired | No longer active. |
| Archived | Stored for historical reference. |
7.2 Immutable Publications
A published package should never be modified. Any change creates a new version.
Package v100
manifest.json
media/
layouts/
Package v101
manifest.json
media/
layouts/
The player can safely switch between versions without risking corrupted content.
8. Content Package Architecture
The publishing system should generate complete, immutable content packages. Players should never download individual files without knowing exactly which version they belong to.
A player only activates a package after every required file has been downloaded, verified, and marked valid.
8.1 Package Structure
package-v105/
manifest.json
checksum.json
media/
welcome.jpg
company-video.mp4
qr-code.png
layouts/
lobby-layout.json
thumbnails/
welcome-thumb.jpg
8.2 Package Lifecycle
8.3 Rollback Protection
The active package should never be overwritten directly.
storage/
active/
package-v105/
downloads/
package-v106/
If package-v106 fails validation, the player continues using package-v105.
8.4 Package Manifest Example
{
"version": 105,
"hash":
"7fc8b2f1d8a9",
"deviceGroup":
"main-lobby",
"timezone":
"America/New_York",
"defaultPlaylist":
"lobby-default",
"files":
[
{
"path":
"media/welcome.jpg",
"size":
245120,
"hash":
"ab3345"
}
]
}
9. Device Synchronization
The player should use a pull-based synchronization model. The device periodically contacts the server and checks for updates.
9.1 Pull Architecture
9.2 Synchronization Process
START
|
Connect to API
|
Authenticate Device
|
Send heartbeat
|
Check latest package version
|
Package newer?
|
+---- No ----> Continue Playback
|
Yes
v
Download Package
|
Verify Hash
|
Activate
|
Resume Playback
9.3 Why Pull Instead of Push?
| Push Model | Pull Model |
|---|---|
| Requires inbound connections. | Works behind NAT/firewalls. |
| Harder with remote locations. | Works with normal Internet access. |
| More server complexity. | Simpler device management. |
9.4 Delta Downloads
The synchronization system should avoid downloading files that already exist locally.
Current Package
image-a.jpg
video-a.mp4
New Package
image-a.jpg
video-a.mp4
image-b.jpg
Download:
image-b.jpg only
10. Player Runtime
The Player Runtime is responsible for displaying content, maintaining local storage, synchronizing packages, and recovering automatically from failures.
10.1 Player Components
| Component | Responsibility |
|---|---|
| Renderer | Displays images, videos, layouts, and widgets. |
| Sync Service | Downloads packages and communicates with CMS. |
| Local Database | Stores configuration, playback state, and logs. |
| Watchdog | Restarts failed processes automatically. |
| System Service | Starts software after boot. |
10.2 Recommended Raspberry Pi Architecture
10.3 Recommended Software Stack
- Operating System: Raspberry Pi OS Lite or lightweight desktop installation
- Renderer: Chromium kiosk mode
- Player Interface: HTML/CSS/JavaScript
- Synchronization: Python service
- Local Storage: SQLite
- Process Management: systemd
11. Player State Machine
The player should use explicit states to simplify debugging and recovery.
11.1 State Definitions
| State | Description |
|---|---|
| Booting | Operating system startup. |
| Initializing | Load configuration and local database. |
| Syncing | Checking for updated packages. |
| Verifying | Checking package integrity. |
| Ready | Valid content available. |
| Playing | Normal display operation. |
| Recovering | Restarting failed components. |
12. Raspberry Pi Player Hardware Profile
The initial target hardware is the Raspberry Pi Zero 2 W. The architecture should remain lightweight while allowing future migration to more powerful devices.
12.1 Recommended Hardware
| Component | Recommendation |
|---|---|
| Board | Raspberry Pi Zero 2 W |
| Memory | 512 MB RAM |
| Storage | 16 GB or 32 GB high-endurance microSD card |
| Power | Stable 5V power supply, preferably 2.5A |
| Display Connection | Micro-HDMI adapter/cable |
| Network | 2.4 GHz Wi-Fi |
| Cooling | Ventilated case, optional heatsink |
12.2 Supported Media Limits
| Media | Recommendation |
|---|---|
| Images | JPG, PNG, WebP up to 1920x1080 |
| Video | MP4 container with H.264 video |
| Audio | AAC or MP3 |
| Resolution | Maximum recommended 1080p |
| Frame Rate | 30 FPS maximum |
| 4K Video | Not recommended |
| HEVC/H.265 | Avoid for compatibility |
The Pi Zero 2 W is suitable for basic 1080p signage, but should not be expected to run multiple videos, complex animations, or heavy live web pages.
13. Offline Playback Requirements
Offline operation is a primary design requirement. Loss of network connectivity should not affect the display.
13.1 Offline Behavior
- All required files are stored locally.
- Schedules execute using local time.
- Previously published content remains available.
- Synchronization retries automatically.
- Default fallback content is always available.
13.2 Failure Scenarios
| Problem | Expected Behavior |
|---|---|
| Internet unavailable | Continue displaying cached content. |
| CMS unavailable | Continue playback and retry later. |
| Download interrupted | Discard incomplete package. |
| Power failure | Resume after reboot. |
| Storage nearly full | Report warning to CMS. |
13.3 Update Safety Process
14. Database Architecture
The CMS should use a relational database. The player should use a lightweight local SQLite database.
14.1 CMS Database Entities
| Entity | Purpose |
|---|---|
| User | Authentication and permissions. |
| Device | Registered signage players. |
| Device Group | Collection of related screens. |
| Media | Uploaded assets. |
| Playlist | Ordered content sequence. |
| Layout | Screen design definition. |
| Schedule | Time-based playback rules. |
| Publication | Released content package. |
| Device Event | Logs and status information. |
14.2 Core Database Relationship
14.3 Player SQLite Database
device_config ---------------- device_id server_url auth_token timezone packages ---------------- version hash status activated_at playback_state ---------------- playlist item position events ---------------- timestamp level message
15. Device Management
The CMS should provide complete visibility into every registered player.
15.1 Device Registration
New devices should be registered using a temporary pairing process.
15.2 Device Information
| Information | Example |
|---|---|
| Device Name | Lobby Screen 01 |
| Location | Building A Reception |
| Software Version | Player 1.0.5 |
| Current Package | package-v105 |
| Last Heartbeat | 2026-08-02 11:00 |
| Storage Usage | 8.2 GB / 32 GB |
| Temperature | 48°C |
16. Device API Architecture
The Device API provides secure communication between the CMS and deployed players. The player initiates all communication using outbound HTTPS requests.
Players pull information from the server. The server does not require direct access to devices.
16.1 API Responsibilities
| Function | Description |
|---|---|
| Authentication | Verify device identity. |
| Heartbeat | Receive health information. |
| Manifest Check | Determine if a newer package exists. |
| Package Download | Provide published content files. |
| Event Logging | Receive player errors and diagnostics. |
| Remote Commands | Send optional administrative actions. |
16.2 Example API Endpoints
POST
/api/v1/device/register
POST
/api/v1/device/heartbeat
GET
/api/v1/device/manifest/latest
GET
/api/v1/package/{version}/download
POST
/api/v1/device/events
GET
/api/v1/device/commands
POST
/api/v1/device/commands/{id}/complete
16.3 Heartbeat Example
{
"device_id":
"pi-zero-001",
"software_version":
"1.0.5",
"package":
"105",
"playlist":
"lobby-default",
"temperature":
47,
"storage_free":
"18GB",
"uptime":
"14 days"
}
16.4 Authentication
Each device receives a unique authentication token during pairing.
Device ID + Secret Token + HTTPS = Authenticated Communication
- Tokens should be unique per device.
- Tokens should be revocable.
- Pairing codes should expire quickly.
- Devices should never share credentials.
17. Layout Engine
The layout system controls how content is positioned on the display.
17.1 Layout Types
| Layout | Description |
|---|---|
| Fullscreen | One content item occupies the complete display. |
| Two Zone | Main content plus secondary information area. |
| Three Zone | Main content with multiple information panels. |
| Custom | Administrator-defined screen regions. |
17.2 Zone Model
Layout
|
+-- Zone A
| position
| size
| content source
|
+-- Zone B
position
size
content source
17.3 Zone Properties
- X and Y position
- Width and height
- Background color
- Opacity
- Layer order
- Content assignment
- Transition settings
Avoid complex layouts with multiple simultaneous videos, heavy animations, or live websites.
18. Playlist Engine
A playlist defines the order and playback behavior of content.
18.1 Playlist Structure
Playlist
Name
Items
Item 1
Media
Duration
Transition
Item 2
Media
Duration
Transition
Loop Mode
18.2 Playlist Options
| Option | Description |
|---|---|
| Sequential Playback | Play items in order. |
| Random Playback | Shuffle items. |
| Loop | Restart after completion. |
| Priority | Determine scheduling conflicts. |
| Fallback Content | Display when no schedule is active. |
18.3 Example Playlist
Lobby Information 1. Welcome Screen 10 seconds 2. Company Video 45 seconds 3. Safety Announcement 20 seconds 4. QR Information 15 seconds
19. Scheduling Engine
Scheduling determines which content should be displayed at any given time.
19.1 Schedule Properties
- Start date
- End date
- Start time
- End time
- Days of week
- Timezone
- Device group
- Priority
19.2 Schedule Conflict Resolution
The scheduler should always select the highest priority active schedule.
| Priority | Purpose |
|---|---|
| 1 | Emergency Alert |
| 2 | Important Announcement |
| 3 | Campaign Content |
| 4 | Normal Playlist |
| 5 | Default Content |
19.3 Example Schedule
Weekdays 08:00 - 12:00 Morning Information 12:00 - 14:00 Lunch Menu 14:00 - 17:00 Afternoon Promotion December 1-25 Holiday Campaign
20. Security Architecture
Security is required for both cloud and local deployments. Digital signage devices should be treated as managed network appliances.
20.1 Security Principles
| Principle | Implementation |
|---|---|
| Encrypted Communication | Use HTTPS for all device and CMS communication. |
| Unique Device Identity | Every player receives its own authentication credentials. |
| Least Privilege | Users and devices receive only required permissions. |
| Input Validation | All uploads and API requests are validated. |
| Secure Updates | Packages are verified before activation. |
20.2 User Roles
| Role | Permissions |
|---|---|
| Administrator | Full system access. |
| Publisher | Approve and publish content. |
| Content Editor | Create media and playlists. |
| Device Operator | Monitor devices and perform maintenance. |
| Viewer | Read-only access. |
20.3 File Upload Security
- Validate file extension.
- Validate MIME type.
- Reject executable files.
- Limit upload size.
- Generate safe filenames.
- Store files outside executable directories.
- Scan files where required.
20.4 HTML and Web Content Security
External websites and custom HTML content can introduce security and reliability problems.
The CMS should provide:
- Approved domain allowlists.
- Sandboxed browser execution.
- Disabled external navigation.
- Content sanitization.
21. Performance Requirements
21.1 Player Performance
| Requirement | Target |
|---|---|
| Startup Time | Display content within 60 seconds. |
| Video Playback | Smooth 1080p H.264 playback. |
| Network Failure | No interruption to playback. |
| Synchronization | Normally complete within five minutes. |
| Recovery | Automatically restart failed services. |
21.2 CMS Performance
- Normal pages should load within three seconds.
- Media processing should run asynchronously.
- Large uploads should not block the interface.
- Database queries should be indexed.
22. Reliability Requirements
Digital signage systems often operate continuously for months or years. Reliability is therefore a primary design objective.
| Scenario | Expected Result |
|---|---|
| Application Crash | Watchdog restarts player. |
| Power Failure | System boots and resumes operation. |
| Network Loss | Cached content continues playing. |
| Failed Update | Previous package remains active. |
| Low Storage | Warning generated. |
22.1 Watchdog Design
23. Deployment Architecture
23.1 Small Deployment
Shared Hosting
|
Laravel CMS
|
MariaDB
|
Raspberry Pi Players
23.2 Production Deployment
NGINX | Laravel Application | PostgreSQL | Redis Queue | Object Storage | Device API
23.3 Player Deployment
Raspberry Pi OS
|
+-- Chromium Kiosk
|
+-- Python Sync Service
|
+-- SQLite
|
+-- systemd
24. Testing Strategy
24.1 CMS Testing
- Authentication tests.
- Permission tests.
- Upload validation tests.
- Publishing workflow tests.
- Scheduling tests.
- API integration tests.
24.2 Player Testing
- Power loss recovery.
- Network disconnect testing.
- Failed download testing.
- Storage full testing.
- Video playback testing.
- Long-running stability testing.
24.3 Field Testing
Before production deployment, test devices should operate continuously for several weeks under realistic conditions.
25. Development Roadmap
Phase 1 - MVP
| Feature | Priority |
|---|---|
| User Login | Must |
| Image Upload | Must |
| Video Upload | Must |
| Playlist Management | Must |
| Device Pairing | Must |
| Offline Playback | Must |
| Publishing System | Must |
Phase 2 - Advanced Management
- Scheduling.
- Layouts.
- Text widgets.
- Clock/date.
- QR codes.
- Device groups.
- Rollback.
Phase 3 - Enterprise Features
- Emergency alerts.
- Weather widgets.
- RSS feeds.
- Screenshots.
- Remote reboot.
- Approval workflows.
- Multiple organizations.
26. Final Architecture Recommendation
The recommended implementation combines a lightweight, reliable player with a flexible web-based CMS.
Recommended Final Stack
- CMS: Laravel + PHP 8.3
- Frontend: Blade + HTMX + Alpine.js
- Database: PostgreSQL or MariaDB
- Storage: Local filesystem with S3-compatible option
- Player: Chromium kiosk application
- Sync Service: Python
- Local Database: SQLite
- Process Control: systemd
- Communication: HTTPS REST API
This architecture provides a practical path from a small single-screen installation to a scalable digital signage platform supporting hundreds of managed devices.
Appendix A - Example Project Structure
A recommended implementation separates the CMS, API, and player components.
CMS Project
digital-signage-cms/
├── app/
│ ├── Models/
│ ├── Controllers/
│ ├── Services/
│ └── Jobs/
├── database/
│ ├── migrations/
│ └── seeders/
├── storage/
│ ├── media/
│ ├── packages/
│ └── thumbnails/
├── routes/
│ ├── web.php
│ └── api.php
└── resources/
├── views/
└── js/
Player Project
digital-signage-player/
├── player/
│ ├── index.html
│ ├── css/
│ └── js/
├── sync/
│ ├── sync.py
│ └── package_manager.py
├── database/
│ └── player.sqlite
├── storage/
│ ├── active/
│ └── downloads/
├── logs/
└── systemd/
├── player.service
└── sync.service
Appendix B - API Examples
Device Heartbeat
POST /api/v1/device/heartbeat
{
"device_id":
"lobby-screen-01",
"version":
"1.0.5",
"package":
"105",
"status":
"playing",
"temperature":
46,
"storage":
{
"total":"32GB",
"free":"18GB"
},
"timestamp":
"2026-08-02T15:00:00Z"
}
Manifest Response
GET /api/v1/device/manifest/latest
{
"package":
"106",
"hash":
"a83bc91",
"download":
"/packages/106.zip",
"size":
52428800
}
Device Event
POST /api/v1/device/events
{
"type":
"VIDEO_ERROR",
"severity":
"warning",
"message":
"Unable to decode media file",
"timestamp":
"2026-08-02T15:10:00Z"
}
Appendix C - Operational Recommendations
| Area | Recommendation |
|---|---|
| Storage | Use high-endurance microSD cards. |
| Power | Use stable power supplies. |
| Updates | Test player updates before deployment. |
| Monitoring | Review device health regularly. |
| Backups | Back up CMS database and media storage. |
| Security | Rotate credentials and keep software updated. |
Appendix D - Glossary
| Term | Meaning |
|---|---|
| CMS | Content Management System. |
| Player | Device software responsible for displaying content. |
| Manifest | File describing package contents and configuration. |
| Package | Immutable collection of media, layouts, and schedules. |
| Heartbeat | Periodic device status message. |
| Playlist | Ordered collection of display items. |
| Zone | A defined region of a screen layout. |
| Fallback Content | Default content shown when no schedule is active. |