- Move content outside public web root for security - Consolidate all code and assets in engine/ directory - Download Bootstrap locally for offline functionality - Update public/ to contain only entry point files - Add router.php for PHP development server security - Update README.md with new structure and setup instructions - Block direct access to content files via URL - Maintain clean separation between content and code
4.6 KiB
4.6 KiB
CodePress CMS
A lightweight, file-based Content Management System built with PHP and Bootstrap.
Overview
CodePress is a modern, secure CMS that manages content through files instead of a database. It's designed for simplicity, flexibility, and ease of use while maintaining powerful features for content management.
Features
🎯 Core Features
- File-based content - No database required
- Multi-format support - Markdown, PHP, HTML files
- Dynamic navigation - Auto-generated from directory structure
- Search functionality - Full-text search with snippets
- Breadcrumb navigation - Clear page hierarchy
- Responsive design - Works on all devices
🔧 Advanced Features
- Collapsible folders - Accordion-style navigation
- WCAG compliant - Accessible design with proper contrast
- File metadata - Creation and modification dates in footer
- Progressive styling - Visual hierarchy with nested levels
- Security - Protected PHP files and sensitive directories
Quick Start
- Requirements: PHP 8.4+
- Installation:
git clone https://git.noorlander.info/E.Noorlander/CodePress.git cd CodePress - Start server:
# For Apache: Set DocumentRoot to public/ # For Development: php -S localhost:8080 -t public router.php - Visit:
http://localhost:8080
Project Structure
codepress/
├── public/ # Web-accessible directory (DocumentRoot)
│ ├── index.php # Main entry point
│ ├── .htaccess # Apache security and routing
│ └── router.php # PHP development server router
├── content/ # Content files (MD/PHP/HTML) - outside web root
├── engine/ # CMS engine and assets
│ ├── core/ # PHP application logic
│ │ ├── index.php # CMS class and logic
│ │ └── config.php # Site configuration
│ ├── templates/ # HTML templates
│ └── assets/ # Static assets (CSS, JS, fonts)
│ ├── css/ # Bootstrap and custom CSS
│ ├── js/ # JavaScript files
│ └── fonts/ # Font files
├── .htaccess # Root security
└── README.md # This documentation
Security
CodePress includes built-in security features:
- Content isolation - Content files stored outside web root
- .htaccess protection for sensitive files and directories
- Direct access blocking - Content files not accessible via URL
- Security headers for XSS protection
- PHP file blocking in content directory
- Offline capable - All assets (Bootstrap) stored locally
- Directory access control
Content Management
Supported File Types
Markdown (.md)
# Page Title
Content with **bold** and *italic* text.
[Link to page](?page=other/page)
PHP (.php)
<?php
$title = "Dynamic Page";
$date = date('Y-m-d');
?>
<h1><?php echo $title; ?></h1>
<p>Date: <?php echo $date; ?></p>
HTML (.html)
<h1>Static HTML Page</h1>
<div class="alert alert-info">
Custom HTML content
</div>
Directory Structure
content/
├── home.md # Homepage
├── about/
│ └── company.md # About page
├── blog/
│ ├── tech/
│ │ └── post.md # Blog post
│ └── index.md # Blog overview
└── projects/
└── web-design.md # Project page
Configuration
Edit config.php to customize:
return [
'site_title' => 'Your Site Name',
'site_description' => 'Your site description',
'content_dir' => __DIR__ . '/../../content',
'templates_dir' => __DIR__ . '/../templates',
'default_page' => 'home',
'markdown_enabled' => true,
'php_enabled' => true,
];
Branches
- main: Clean CodePress CMS with documentation
- e.noorlander: Personal blog content and customizations
- development: Active development branch
Development
Adding Features
- Create feature branch from
development - Implement changes
- Test thoroughly
- Submit merge request
Contributing
- Follow PSR-12 coding standards
- Test security implications
- Update documentation
- Maintain backward compatibility
License
This project is developed for specific use cases. Contact the maintainer for licensing information.
Support
- Documentation: See
content/home.md - Issues: Report on GitLab
- Community: Join discussions
Built with ❤️ and PHP