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)
-
Clone the repository
git clone https://github.com/Ryderjj89/esv-bible.git cd esv-bible -
Build and run with Docker
docker build -t esv-bible . docker run -p 3000:3000 esv-bible -
Access the application
- Open http://localhost:3000 in your browser
Docker Compose Setup
-
Run with docker-compose
docker-compose up -d -
Access the application
- Open http://localhost:3000 in your browser
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
-
Install dependencies
# Backend cd backend npm install # Frontend cd ../frontend npm install -
Start development servers
# Backend (from backend directory) npm run dev # Frontend (from frontend directory) npm start -
Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
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
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- 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.