# CodePress CMS

**[🇳🇱 Nederlands](#) | [🇬🇧 English](README.en.md)**

Een lichtgewicht, file-based content management systeem gebouwd met PHP.

**Versie:** 1.5.0 | **Licentie:** AGPL v3 / Commercial

## ✨ Features

- 📝 **Multi-format Content** - Ondersteunt Markdown, PHP en HTML bestanden
- 🧭 **Dynamic Navigation** - Automatische menu generatie met dropdowns
- 🔍 **Search Functionality** - Volledige tekst zoek door alle content
- 🧭 **Breadcrumb Navigation** - Intuïtieve navigatiepaden
- 🔗 **Auto-linking** - Automatische links tussen pagina's
- 📱 **Responsive Design** - Werkt perfect op alle apparaten
- ⚙️ **JSON Configuratie** - Eenvoudige configuratie via JSON
- 🎨 **Bootstrap 5** - Moderne UI framework
- 🔒 **Security** - Beveiligde content management
- 🛡️ **Admin Console** - Ingebouwd admin paneel voor content, config, plugins en gebruikersbeheer

## 🚀 Quick Start

1. **Upload** bestanden naar webserver
2. **Stel permissies** in voor webserver
3. **Configureer** (optioneel) via `config.json`
4. **Bezoek** website via browser

## 📁 Project Structuur

```
codepress/
├── engine/
│   ├── core/
│   │   ├── config.php          # Configuratie loader
│   │   └── index.php          # CMS engine
│   └── templates/               # Template bestanden
│       ├── layout.mustache
│       ├── assets/
│       │   ├── header.mustache
│       │   ├── navigation.mustache
│       │   └── footer.mustache
│       ├── markdown_content.mustache
│       ├── php_content.mustache
│       └── html_content.mustache
├── content/                   # Content bestanden
│   ├── map1/
│   │   ├── pagina1.md
│   │   └── pagina2.php
│   └── homepage.md
├── admin-console/              # Admin paneel
│   ├── config/
│   │   ├── app.php            # Admin configuratie
│   │   └── admin.json         # Gebruikers & security
│   ├── src/
│   │   └── AdminAuth.php      # Authenticatie service
│   └── templates/              # Admin templates
├── public/                     # Web root
│   ├── assets/
│   │   ├── css/
│   │   ├── js/
│   │   └── favicon.svg
│   ├── index.php              # Website entry point
│   └── admin.php              # Admin entry point
├── config.json                 # Configuratie
└── README.md
```

## ⚙️ Configuratie

### Basis Configuratie (`config.json`)

```json
{
    "site_title": "CodePress",
    "content_dir": "content",
    "templates_dir": "engine/templates",
    "default_page": "auto",
    "homepage": "homepage",
    "author": {
        "name": "Edwin Noorlander",
        "website": "https://noorlander.info",
        "git": "https://git.noorlander.info/E.Noorlander/CodePress.git"
    },
    "seo": {
        "description": "CodePress CMS - Lightweight file-based content management system",
        "keywords": "cms, php, content management, file-based"
    }
}
```

### Configuratie Opties

- **`site_title`** - Naam van de website
- **`content_dir`** - Map met content bestanden
- **`templates_dir`** - Map met template bestanden
- **`default_page`** - Standaard pagina (`"auto"` voor automatische detectie)
- **`homepage`** - Homepage (`"auto"` voor automatische detectie)
- **`author`** - Auteur informatie met links
- **`seo`** - SEO instellingen

## 📝 Content Types

### Markdown (.md)
- Auto-linking tussen pagina's
- GitHub Flavored Markdown ondersteuning
- Syntax highlighting voor code blocks
- Automatische titel extractie

### PHP (.php)
- Volledige PHP ondersteuning
- Dynamische content generatie
- Database integratie mogelijk
- Session management beschikbaar

### HTML (.html)
- Statische HTML pagina's
- Bootstrap componenten
- Custom CSS en JavaScript
- Volledige HTML5 validatie

## 🎨 Design Features

### Navigation
- **Tab-style navigatie** met Bootstrap
- **Dropdown menus** voor mappen en sub-mappen
- **Home knop** met icoon
- **Active state** indicatie
- **Responsive** hamburger menu

### Layout
- **Flexbox layout** voor moderne structuur
- **Fixed header** met logo en zoekfunctie
- **Breadcrumb navigatie** tussen header en content
- **Fixed footer** met metadata
- **Scrollable content** gebied

### Responsive
- **Mobile-first** aanpak
- **Touch-friendly** interactie
- **Adaptieve** breedtes
- **Consistente** ervaring

## 🔧 Vereisten

- **PHP 8.4+** of hoger
- **Webserver** (Apache, Nginx, etc.)
- **Schrijfrechten** voor PHP bestanden
- **Mod_rewrite** (optioneel voor pretty URLs)

## 🛠️ Installatie

### Via Composer
```bash
composer create-project codepress
cd codepress
```

### Handmatig
1. **Download** de bestanden
2. **Upload** naar webserver
3. **Stel permissies** in
4. **Configureer** `config.json`

### Webserver Configuratie

#### Apache
```apache
<Directory "/var/www/codepress">
    AllowOverride All
    Require all granted
</Directory>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
```

#### Nginx
```nginx
server {
    root /var/www/codepress/public;
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}
```

## 🏗️ PHP Classes

### SimpleTemplate Class

Lightweight template rendering engine die Mustache-style syntax ondersteunt zonder externe dependencies.

**Methods:**
- `render($template, $data)` - Rendert template met data
- `replacePartial($matches)` - Vervangt `{{>partial}}` placeholders

**Features:**
- `{{>partial}}` - Partial includes
- `{{#variable}}...{{/variable}}` - Conditionele blocks
- `{{^variable}}...{{/variable}}` - Negatieve conditionele blocks
- `{{{variable}}}` - Unescaped HTML content
- `{{variable}}` - Escaped content

### CodePressCMS Class

Hoofd CMS class die alle content management functionaliteit beheert.

**Public Methods:**
- `__construct($config)` - Initialiseer CMS met configuratie
- `getPage()` - Haalt huidige pagina content op
- `getMenu()` - Genereert navigatiestructuur
- `render()` - Rendert volledige pagina met templates

**Private Methods:**
- `buildMenu()` - Bouwt menu structuur van content directory
- `scanDirectory($dir, $prefix)` - Scant directory voor content
- `performSearch($query)` - Voert zoekopdracht uit
- `parseMarkdown($content)` - Converteert Markdown naar HTML
- `parsePHP($filePath)` - Verwerkt PHP bestanden
- `parseHTML($content)` - Verwerkt HTML bestanden
- `getBreadcrumb()` - Genereert breadcrumb navigatie
- `renderMenu($items, $level)` - Rendert menu HTML
- `getContentType($page)` - Bepaalt content type
- `autoLinkPageTitles($content)` - Auto-link pagina titels

**Features:**
- Multi-format content support (MD, PHP, HTML)
- Dynamische navigatie met dropdowns
- Zoekfunctionaliteit met snippets
- Breadcrumb navigatie
- Auto-linking tussen pagina's
- File metadata tracking
- Responsive template rendering

## 🛡️ Admin Console

CodePress bevat een ingebouwd admin paneel voor het beheren van je website.

**Toegang:** `/admin.php` | **Standaard login:** `admin` / `admin`

### Modules
- **Dashboard** - Overzicht met statistieken en snelle acties
- **Content** - Bestanden browsen, aanmaken, bewerken en verwijderen
- **Configuratie** - `config.json` bewerken met JSON-validatie
- **Plugins** - Overzicht van geinstalleerde plugins
- **Gebruikers** - Gebruikers toevoegen, verwijderen en wachtwoorden wijzigen

### Beveiliging
- Session-based authenticatie met bcrypt password hashing
- CSRF-bescherming op alle formulieren
- Brute-force bescherming (5 pogingen, 15 min lockout)
- Path traversal bescherming
- Session timeout (30 min)

> **Belangrijk:** Wijzig het standaard wachtwoord direct na installatie via Gebruikers.

## 📖 Documentatie

- **[Handleiding (NL)](guide/nl.md)** - Gedetailleerde handleiding
- **[Handleiding (EN)](guide/en.md)** - English documentation
- **[AGENTS.md](AGENTS.md)** - Ontwikkelaar instructies

## 🤝 Bijdragen

Bijdragen zijn welkom! Zie [AGENTS.md](AGENTS.md) voor ontwikkelrichtlijnen.

## 📄 Licentie

CodePress CMS is beschikbaar onder een **dual-license model**:

### 🆓 AGPL v3 (Open-Source)
- **Gratis** voor niet-commercieel gebruik
- **Vereist** het delen van wijzigingen
- **Copyleft** bescherming
- Zie [LICENSE](LICENSE) voor details

### 💼 Commercial License
Voor bedrijfsmatig gebruik zonder AGPL verplichtingen:

- **Individual:** €99 (1 developer)
- **Business:** €499 (10 developers)
- **Enterprise:** €2499 (unlimited)
- **SaaS:** €999/jaar

📧 **Contact:** commercial@noorlander.info  
📖 **Meer info:** [LICENSE-INFO.md](LICENSE-INFO.md)

## 🔗 Links

- **Website**: https://noorlander.info
- **Repository**: https://git.noorlander.info/E.Noorlander/CodePress.git
- **Issues**: https://git.noorlander.info/E.Noorlander/CodePress/issues

---

*Gebouwd met ❤️ door Edwin Noorlander*