Files
the-bible/README.md

4.8 KiB

ESV Bible in Markdown

A Docker-based ESV Bible application with markdown content, featuring a React frontend and Node.js backend.

Features

  • Complete ESV Bible in markdown format
  • Clean URLs like /book/Genesis/chapter/1
  • Mobile responsive design with adaptive navigation
  • Dark mode support with persistent preferences
  • Font size controls (Small, Medium, Large)
  • Chapter navigation with Previous/Next buttons
  • Times New Roman typography for traditional Bible reading
  • Professional favicon with book icon
  • Optional OpenID Connect authentication for user features
  • User preferences sync (when authenticated)
  • Favorites system for bookmarking verses (when authenticated)

Quick Start

Basic Setup (No Authentication)

  1. Clone the repository

    git clone https://github.com/Ryderjj89/esv-bible.git
    cd esv-bible
    
  2. Build and run with Docker

    docker build -t esv-bible .
    docker run -p 3000:3000 esv-bible
    
  3. Access the application

Docker Compose Setup

  1. Run with docker-compose

    docker-compose up -d
    
  2. Access the application

Authentication Setup (Optional)

To enable user authentication and features like favorites and synced preferences, configure OpenID Connect:

Environment Variables

Create a .env file in the root directory with the following variables:

# OpenID Connect Configuration (Required for authentication)
OIDC_ISSUER=https://your-oidc-provider.com
OIDC_CLIENT_ID=your-client-id
OIDC_CLIENT_SECRET=your-client-secret
OIDC_AUTH_URL=https://your-oidc-provider.com/auth
OIDC_TOKEN_URL=https://your-oidc-provider.com/token
OIDC_USERINFO_URL=https://your-oidc-provider.com/userinfo

# Optional Configuration
OIDC_CALLBACK_URL=/auth/callback
SESSION_SECRET=your-session-secret-change-in-production
FRONTEND_URL=http://localhost:3000
NODE_ENV=production

Features When Authenticated

User Preferences

  • Font size synced across devices
  • Dark mode preference synced across devices
  • Persistent settings stored in database

Favorites System

  • Bookmark verses for easy reference
  • Add notes to favorite verses
  • Organize favorites by book and chapter
  • Quick access to saved verses

API Endpoints (Authenticated)

GET    /auth/user           - Get current user info
POST   /auth/logout         - Logout user
GET    /api/preferences     - Get user preferences
PUT    /api/preferences     - Update user preferences
GET    /api/favorites       - Get user favorites
POST   /api/favorites       - Add favorite verse
DELETE /api/favorites/:id   - Remove favorite
GET    /api/favorites/check - Check if verse is favorited

Development

Prerequisites

  • Node.js 16+
  • Docker (optional)

Local Development

  1. Install dependencies

    # Backend
    cd backend
    npm install
    
    # Frontend
    cd ../frontend
    npm install
    
  2. Start development servers

    # Backend (from backend directory)
    npm run dev
    
    # Frontend (from frontend directory)
    npm start
    
  3. Access the application

Database

The application uses SQLite for user data when authentication is enabled:

  • Location: backend/data/bible.db
  • Tables: users, user_preferences, favorites
  • Automatic setup: Database and tables created on first run

Docker Configuration

Dockerfile

  • Multi-stage build for optimized production image
  • Node.js backend with React frontend
  • Persistent volume for database storage

docker-compose.yml

  • Single service configuration
  • Volume mounting for database persistence
  • Environment variable support

URL Structure

  • Home: / - Book selection
  • Book chapters: /book/Genesis - Chapter selection for Genesis
  • Chapter reading: /book/Genesis/chapter/1 - Genesis Chapter 1
  • Clean URLs: Professional book names without technical prefixes

Browser Support

  • Modern browsers with ES6+ support
  • Mobile responsive design
  • Touch-friendly navigation
  • Keyboard accessible controls

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

License

MIT License - see LICENSE file for details

Support

For issues and questions:

  • Create an issue on GitHub
  • Check existing documentation
  • Review environment variable configuration

Note: Authentication is completely optional. The application works fully without any authentication setup, providing a clean Bible reading experience. Authentication only adds user-specific features like favorites and synced preferences.