# CodePress CMS **[🇳🇱 Nederlands](README.md) | [🇬🇧 English](#)** A lightweight, file-based content management system built with PHP. **Version:** 1.5.0 | **License:** AGPL v3 / Commercial ## ✨ Features - 📝 **Multi-format Content** - Supports Markdown, PHP and HTML files - 🧭 **Dynamic Navigation** - Automatic menu generation with dropdowns - 🌍 **Multi-language** - Dutch and English with automatic detection - 🔍 **Search Functionality** - Full-text search through all content - 🧭 **Breadcrumb Navigation** - Intuitive navigation paths with sidebar toggle - 🔗 **Auto-linking** - Automatic links between pages - 📱 **Responsive Design** - Works perfectly on all devices - ⚙️ **JSON Configuration** - Easy configuration via JSON - 🎨 **Themes** - Customizable themes with colors and backgrounds - 🔒 **Security** - Secure content management (100/100 security score) - 🛡️ **Admin Console** - Built-in admin panel with CodeMirror editor, media browser, theme manager, and plugin configuration ## 🚀 Quick Start ```bash php -S localhost:8080 -t public ``` Visit `http://localhost:8080` in your browser. Admin panel: `http://localhost:8080/admin.php` (login: `admin` / `admin`) ## 📁 Project Structure ``` codepress/ ├── cms/ # Core CMS engine │ ├── core/ │ │ ├── class/ │ │ │ ├── CodePressCMS.php # Main CMS class │ │ │ ├── Logger.php # Logging system │ │ │ ├── SimpleTemplate.php # Mustache-style template engine │ │ │ ├── Cache.php │ │ │ ├── AssetManager.php │ │ │ ├── SearchEngine.php │ │ │ ├── ContentSecurityPolicy.php │ │ │ └── ... │ │ ├── plugin/ │ │ │ ├── PluginManager.php # Plugin loader │ │ │ └── CMSAPI.php # Plugin API │ │ ├── config.php # Configuration loader │ │ └── index.php # Bootstrap (autoloader) │ ├── lang/ # Language files (nl.php, en.php) │ ├── templates/ # Mustache templates │ │ ├── layout.mustache │ │ ├── assets/ (header, navigation, footer) │ │ ├── markdown_content.mustache │ │ ├── php_content.mustache │ │ └── html_content.mustache │ └── router.php # PHP dev server router ├── admin/ # Admin panel │ ├── config/ │ │ ├── app.php # Admin configuration │ │ └── admin.json # Users & security │ ├── src/ │ │ └── AdminAuth.php # Authentication (sessions, bcrypt, CSRF) │ ├── templates/ │ │ ├── login.php │ │ ├── layout.php │ │ └── pages/ (dashboard, content, content-edit, content-new, │ │ content-dir-form, content-move-form, config, plugins, │ │ plugins-edit, plugins-new, plugin-config, theme, media, users) │ └── storage/logs/ ├── cli/test/ # CLI scripts & tests ├── plugins/ # CMS plugins (HTMLBlock, MQTTTracker) ├── public/ # Web root │ ├── assets/ │ │ ├── css/ (Bootstrap, styles, editor.css) │ │ ├── js/ (Bootstrap, app.js, editor-toolbar.js) │ │ └── codemirror/ (CodeMirror editor + modes) │ ├── index.php # Website entry point │ ├── admin.php # Admin entry point + router │ └── themes/ # Uploaded theme backgrounds ├── themes/ # Theme configurations │ ├── default/theme.json │ └── test/theme.json ├── content/ # Content files ├── guide/ # Manuals (nl/en) ├── docs/ # Documentation └── config.json # Site configuration ``` ## ⚙️ Configuration ### Basic Configuration (`config.json`) ```json { "site_title": "CodePress", "content_dir": "content", "templates_dir": "cms/templates", "default_page": "index", "active_theme": "default", "language": { "default": "nl", "available": ["nl", "en"] }, "seo": { "description": "CodePress CMS - Lightweight file-based content management system", "keywords": "cms, php, content management, file-based" }, "author": { "name": "E. Noorlander", "website": "https://noorlander.info" }, "features": { "auto_link_pages": true, "search_enabled": true, "breadcrumbs_enabled": true } } ``` ## 📝 Content Types ### Markdown (.md) - Auto-linking between pages - GitHub Flavored Markdown via `league/commonmark` - Automatic title extraction - Multi-language with `en.page.md` and `nl.page.md` ### PHP (.php) - Full PHP support - Dynamic content generation ### HTML (.html) - Static HTML pages - Bootstrap components ## 🛡️ Admin Console CodePress includes a built-in admin panel for managing your website. **Access:** `/admin.php` | **Default login:** `admin` / `admin` ### Modules - **Dashboard** - Overview with statistics and quick actions - **Content** - Browse, create, edit, rename, move, and delete files - **CodeMirror Editor** - Syntax highlighting with toolbar (bold, italic, heading, link, image, list, media) - **Media Browser** - Upload and insert images/video/audio with size prompt - **Configuration** - Edit `config.json` with JSON validation - **Themes** - Create, activate, edit, delete themes with background upload - **Plugins** - Overview, install, configure, and toggle - **Users** - Add, remove users and change passwords ### Security - Session-based authentication with bcrypt password hashing - CSRF protection on all forms - Brute-force protection (5 attempts, 15 min lockout) - Path traversal protection via `realpath()` + prefix-check - Session timeout (30 min) - Security headers: CSP, X-Frame-Options, X-Content-Type-Options > **Important:** Change the default password immediately after installation via Users. ## 🎨 Themes Themes are stored in `themes/name/theme.json`: ```json { "name": "default", "label": "Standard", "header_color": "#0a369d", "header_font_color": "#ffffff", "navigation_color": "#2754b4", "navigation_font_color": "#ffffff", "sidebar_background": "#f8f9fa", "sidebar_border": "#dee2e6", "background_image": "/themes/default_bg.jpg" } ``` ## 🌍 Multi-language Support - File naming convention: `nl.[page].md` and `en.[page].md` - Language prefix is automatically removed from display - URL: `/?page=test&lang=nl` or `/?page=test&lang=en` - Automatic language detection via browser or config ## 🔧 Requirements - **PHP 8.1+** - **Web server** (Apache, Nginx, or PHP built-in server) - **Composer** (for `league/commonmark`) ## 🛠️ Installation ```bash git clone https://git.noorlander.info/E.Noorlander/CodePress.git cd CodePress composer install php -S localhost:8080 -t public ``` ## 📖 Documentation - **[Guide (NL)](guide/nl.codepress.md)** - **[Guide (EN)](guide/en.codepress.md)** - **[TODO](TODO.md)** - Upcoming improvements - **[AGENTS.md](AGENTS.md)** - Developer instructions ## 📄 License CodePress CMS is available under a **dual-license model**: AGPL v3 (open-source) or Commercial. --- *Built by Edwin Noorlander*