![]() - Document church-core as core dependency and architectural foundation - Add details about shared library benefits (consistency, reliability) - Update features list to highlight modular components and caching - Add architecture section explaining church-core integration - Document key modules and their responsibilities - Emphasize elimination of code duplication through shared library |
||
---|---|---|
.github | ||
icons | ||
src | ||
.env.example | ||
.gitignore | ||
beacon.desktop | ||
Cargo.lock | ||
Cargo.toml | ||
digital-sign.desktop | ||
IMPROVEMENT_PLAN.md | ||
install.sh | ||
LICENSE | ||
QUICK_WINS_SUMMARY.md | ||
README.md |
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:
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:
# Copy the example file
cp .env.example .env
# Edit with your settings
nano .env
Example .env
file:
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 URLBEACON_WINDOW_WIDTH
- Window width in pixelsBEACON_WINDOW_HEIGHT
- Window height in pixels
3. Config File
Create a config.toml
file in the application directory:
api_url = "https://your-api-url.com"
window_width = 1920
window_height = 1080
slide_interval_seconds = 10
refresh_interval_minutes = 5
Configuration Precedence:
- Environment variables (highest priority)
- .env file
- config.toml file (lowest priority)
Building
cargo build --release
Running
./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 managementsrc/ui.rs
- Modular UI components for event displaysrc/cache.rs
- Intelligent image caching systemsrc/config.rs
- Configuration management with validationsrc/api.rs
- Simplified API integration using church-core
License
MIT License