# Pulse Signage Pulse Signage is a self-hosted digital signage platform built for teams that want clear, flexible control over what appears on every screen. It gives you one place to manage playlists, slides, templates, screen assignments, announcements, data-driven content, and live player control without handing that workflow to a third-party service. ## Why It Stands Out - Keep signage under your own control. - Build polished screen experiences with reusable templates and playlists. - Push announcements, schedules, RSS feeds, API content, and other dynamic content to screens. - See what is live, what is queued, and what needs attention from a single admin dashboard. - Use the same system for everyday signage, timed messages, and more structured information displays. ## What It Handles - Screens and playlist assignments. - Slides, templates, and canvas sizes. - Announcements and screen-specific targeting. - RSS feeds, API sources, and schedule-based content. - Roles and permissions for admin access. - Background tasks and scheduled refresh jobs. - Player onboarding and live playback control. ## Simple Deployment Pulse Signage ships with a Docker Compose stack for the published image: - Published-image stack: `docker compose -f docker-compose.yml up -d` Use this stack when you want to run the tagged image instead of building from source. ## Environment File The compose files read from a root `.env` file. Start by copying `.env.example` to `.env`, then adjust the values for your setup. The variables are split by who uses them: Shared across the stack: - `PULSE_SIGNAGE_IMAGE` - `PULSE_SIGNAGE_SHARED_SECRET` Web container: - `SESSION_MAX_AGE_DAYS` - `DEFAULT_ADMIN_USERNAME` - `DEFAULT_ADMIN_NAME` - `DEFAULT_ADMIN_PASSWORD` - `PASSWORD_HASH_ITERATIONS` Player container: - `PLAYER_PUBLIC_BASE_URL` - `PLAYER_INTERNAL_BASE_URL` MySQL container: - `DB_HOST` - `DB_PORT` - `DB_NAME` - `DB_USER` - `DB_PASSWORD` - `MYSQL_ROOT_PASSWORD` `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, and `DB_PASSWORD` are shared in practice because both app containers talk to the same database service. `PLAYER_INTERNAL_BASE_URL` is used by the web side for server-to-player calls, while `PLAYER_PUBLIC_BASE_URL` is used for browser-facing player links. ## First-Time Use The first startup seeds a default admin account if the database is empty. - Username: `admin` - Password: `admin` ## In Practice Pulse Signage is designed to feel focused and reliable rather than heavy or noisy. It works well when you want a clean internal signage system for offices, venues, dashboards, or any environment where screens need to stay up to date without a lot of manual effort. The player and admin pieces stay linked, so changes made in the dashboard can flow out to screens quickly and consistently.