# Beacon A modern digital signage application for displaying church events, built with Rust, Iced, and the shared church-core library. ## Features - Real-time event display with automatic updates - Smooth image loading and transitions with intelligent caching - Modern, clean interface design with modular components - Automatic event filtering based on date/time - Support for high-resolution displays - Efficient memory management for images - Built on shared church-core library for consistency and reliability - Graceful error handling with comprehensive logging ## Requirements - Rust 1.70 or higher - Access to the `church-core` crate (located at `../church-core`) - A running church API instance with events endpoint ## Configuration You can configure Beacon in three ways (in order of precedence): ### 1. Environment Variables Configure Beacon using environment variables: ```bash export BEACON_API_URL="https://your-api-url.com" export BEACON_WINDOW_WIDTH="1920" export BEACON_WINDOW_HEIGHT="1080" ./beacon ``` ### 2. .env File Create a `.env` file in the application directory: ```bash # Copy the example file cp .env.example .env # Edit with your settings nano .env ``` Example `.env` file: ```env BEACON_API_URL=https://your-api-endpoint.com BEACON_WINDOW_WIDTH=1920 BEACON_WINDOW_HEIGHT=1080 RUST_LOG=beacon=info ``` Available environment variables: - `BEACON_API_URL` - API endpoint URL - `BEACON_WINDOW_WIDTH` - Window width in pixels - `BEACON_WINDOW_HEIGHT` - Window height in pixels ### 3. Config File Create a `config.toml` file in the application directory: ```toml api_url = "https://your-api-url.com" window_width = 1920 window_height = 1080 slide_interval_seconds = 10 refresh_interval_minutes = 5 ``` **Configuration Precedence:** 1. Environment variables (highest priority) 2. .env file 3. config.toml file (lowest priority) ## Building ```bash cargo build --release ``` ## Running ```bash ./target/release/beacon ``` ## Development The application is built using: - **church-core** - Shared library for API integration, event models, and utilities - **Iced** - Modern UI framework for Rust - **Tokio** - Async runtime - **Reqwest** - HTTP client for image loading - Modular architecture with dedicated UI components and caching system ### Architecture Beacon leverages the shared `church-core` library to: - Use standardized Event models with built-in helper methods - Share API client functionality across church projects - Eliminate code duplication and ensure consistency - Benefit from shared testing and improvements ### Key Modules - `src/main.rs` - Application entry point and state management - `src/ui.rs` - Modular UI components for event display - `src/cache.rs` - Intelligent image caching system - `src/config.rs` - Configuration management with validation - `src/api.rs` - Simplified API integration using church-core ## License MIT License