This is a high-performance, privacy-first CMS designed to host large archives of text and markdown files. It requires no database (no MySQL/PostgreSQL), works completely offline via Service Workers/Local Indexing, and relies on pure vanilla PHP and JavaScript.
🚀 Why this rocks
- Zero Dependencies: No Composer, no npm, no build steps. Just copy and paste.
- Offline Search: Includes a custom-built, Web Worker-based search engine that runs entirely in the user's browser (IndexedDB). Instant results, zero server load.
- Privacy First: No third-party trackers, fonts, or CDNs. 100% self-hosted.
- Markdown Native: Just drop
.mdor.txtfiles in a folder, and they appear instantly. - SEO Optimized: Automatic sitemap generation, canonical URLs, and meta tags.
🛠️ Server Setup (The 5-Minute Install)
2. Install The Engine (Apache + PHP)
We use a lightweight Apache setup.
sudo apt install apache2 php libapache2-mod-php -y
sudo systemctl enable --now apache2
3. Configure Apache
We need to enable URL rewriting so the URLs look clean (e.g., yoursite.com/category/article).
- Open the config:
sudo nano /etc/apache2/apache2.conf
2. Find `<Directory /var/www/>` and change `AllowOverride None` to:
```apache
<Directory /var/www/>
AllowOverride All
</Directory>
- Enable modules and restart:
sudo a2enmod rewrite headers expires sudo systemctl reload apache2
### 4. Deploy Files
Copy the repository files to your server. Your folder structure should look like this:
```text
/var/www/html/
├── code/
│ ├── config.php
│ ├── index.js
│ ├── localsearch.js
│ ├── loadsearch.php
│ ├── findonpage.js
│ ├── sitemap.php
│ └── Parsedown.php (and ParsedownExtra.php)
├── texts/ <-- Put your .md content here
│ ├── Books/
│ └── Articles/
├── .htaccess
├── index.php
└── robots.txt
Fix Permissions: Apache needs to read your files.
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
5. Go Live (HTTPS)
Secure your site with a free SSL certificate.
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
sudo systemctl restart apache2