LuminaLP/README.md
Benjamin Slingo c76e61ea59 Initial commit: Core LuminaLP architecture with plugin system
Features implemented:
- Clean trait-based plugin architecture (no global registries)
- SQLite database with centralized SQL operations
- Songs plugin: CCLI support, lyrics search and display
- Bible plugin: Multi-translation verse lookup and rendering
- Media plugin: Auto-detection for images/video/audio files
- Presentations plugin: LibreOffice integration with HTML/XHTML combo parsing
- Service management: Add items, navigation, current slide tracking
- Comprehensive integration tests with real database operations

Architecture follows KISS/DRY principles:
- All SQL operations centralized in core/database.rs
- Plugins focus on business logic only
- No complex state management or global registries
- Clean separation of concerns throughout

Ready for church presentation use with PowerPoint theme preservation.
2025-09-01 22:53:26 -04:00

145 lines
4.1 KiB
Markdown

# LuminaLP
A modern, reliable church presentation software built in Rust that just works.
## Overview
LuminaLP is designed to be a superior replacement for OpenLP, focusing on:
- **Reliability**: No complex global registries or fragile state management
- **Performance**: Fast, efficient Rust backend with minimal overhead
- **Simplicity**: Clean KISS/DRY architecture that's easy to debug and maintain
- **Church-focused**: Built specifically for church service needs
## Features
- **Songs Management**: Add, search, and display song lyrics with CCLI support
- **Bible Integration**: Verse lookup and display with multiple translations
- **Media Support**: Images, videos, and audio with automatic type detection
- **Presentations**: PowerPoint/LibreOffice integration with theme preservation
- **Service Planning**: Build and navigate through service items
- **Plugin Architecture**: Clean trait-based system without global state
## Architecture
### Core Components
- **lumina-core**: Database, app state, and plugin traits
- **lumina-songs**: Song lyrics and CCLI management
- **lumina-bible**: Bible verse search and display
- **lumina-media**: Image/video/audio handling
- **lumina-presentations**: PowerPoint/ODP rendering via LibreOffice
### Database
- SQLite backend with centralized SQL operations
- All schemas defined in `core/src/database.rs`
- Plugins use database helpers, no raw SQL in plugins
## Requirements
- **Rust**: 1.70+ with Cargo
- **LibreOffice**: For presentation rendering (headless mode)
- **SQLite**: Embedded database (no external setup required)
## Installation
```bash
# Clone the repository
git clone ssh://rockvilleav@git.rockvilletollandsda.church:10443/RTSDA/LuminaLP.git
cd LuminaLP
# Build the project
cargo build --release
# Run tests
cargo test
```
## Development
### Project Structure
```
├── core/ # Core app logic and traits
│ ├── src/
│ │ ├── lib.rs # App struct and plugin traits
│ │ └── database.rs # All SQL operations live here
├── plugins/
│ ├── songs/ # Song lyrics plugin
│ ├── bible/ # Bible verses plugin
│ ├── media/ # Media files plugin
│ └── presentations/ # PowerPoint/ODP plugin
├── tests/
│ └── integration_tests.rs # Real integration tests
└── src/
└── main.rs # CLI entry point
```
### Design Principles
1. **KISS (Keep It Simple, Stupid)**
- No complex global registries
- Simple trait-based plugin system
- Centralized database operations
2. **DRY (Don't Repeat Yourself)**
- Shared database helpers
- Common plugin patterns
- Reusable components
3. **Separation of Concerns**
- All SQL in `database.rs`
- Plugins focus on business logic
- Clear boundaries between components
### Adding New Plugins
1. Create plugin crate in `plugins/` directory
2. Implement the `ContentPlugin` trait
3. Use database helpers for data operations
4. Add integration tests
5. Register plugin in main app
### Testing
```bash
# Run all tests
cargo test
# Run specific plugin tests
cargo test --package lumina-songs
# Run integration tests only
cargo test --test integration_tests
```
## Presentation Integration
LuminaLP uses a sophisticated combo approach for PowerPoint rendering:
1. **HTML Export**: LibreOffice exports slide text content and structure
2. **XHTML Export**: LibreOffice exports complete CSS styling and themes
3. **Smart Combining**: Parser merges text content with beautiful styling
This preserves the exact look and feel of original presentations including:
- Colors, fonts, and spacing
- Theme elements and backgrounds
- Animation CSS (where supported)
- Layout positioning
### LibreOffice Setup
Ensure LibreOffice is installed and accessible via command line:
```bash
# Test LibreOffice headless mode
libreoffice --headless --version
```
## License
MIT License
## Contributing
1. Follow Rust best practices and `cargo fmt`
2. Add tests for new functionality
3. Keep SQL operations in `database.rs`
4. Maintain KISS/DRY principles
5. No global state or complex registries