Church Presentation Software
Go to file
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
core Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
plugins Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
src Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
tests Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
.gitignore Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
Cargo.lock Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
Cargo.toml Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00
README.md Initial commit: Core LuminaLP architecture with plugin system 2025-09-01 22:53:26 -04:00

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

# 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

# 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:

# 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