Ty Clifford's Content Management System
Ty Clifford's Content Management System is a small PHP blog CMS with a Bludit-style content layout:
bl-content/pages/<slug>/index.txt
Posts and static pages are Markdown .txt files with front matter. Comments are stored in SQLite, site configuration and generated indexes are JSON, and visit stats are CSV for easy Excel import.
Requirements
- PHP 8.1 or newer
- PDO SQLite enabled
- Apache with
mod_rewritefor.htaccesspretty URLs, or the PHP built-in server for local testing
Local Server
php -S 127.0.0.1:8080 router.php
CLI
php cli/blog.php help
php cli/blog.php list --all
php cli/blog.php create "New Post" --status=published --category=Notes --tags=php,markdown
php cli/blog.php update hello-neon --title="Hello Neon"
php cli/blog.php delete old-slug
php cli/blog.php rebuild
Comments
Comments are moderated by default and protected by captcha plus a honeypot field.
php cli/blog.php comments:list --status=pending
php cli/blog.php comments:approve 1
php cli/blog.php comments:spam 2
php cli/blog.php comments:delete 3
Import Bludit
Import from a local directory on the server. The source can be the old Bludit root or the old bl-content folder.
php cli/import-bludit.php /var/www/old-bludit --dry-run
php cli/import-bludit.php /var/www/old-bludit
php cli/import-bludit.php /var/www/old-bludit/bl-content
php cli/import-bludit.php --source=/var/www/old-bludit --overwrite
The importer preserves original publish dates, modified dates, post/static-page type, draft/published state, categories, tags, authors, cover image metadata, allow-comments flags, page order, page-local files, and bl-content/uploads.
It also scans local comment export files under the old bl-content/databases and bl-content/workspaces directories. To point it at a specific local comment export:
php cli/import-bludit.php /var/www/old-bludit --comments=/var/www/old-bludit/comments.json
Stats
Visits are appended to storage/stats/visits.csv with a header row suitable for spreadsheet import.
php cli/blog.php stats:summary
Apache
The included .htaccess enables pretty URLs and blocks direct access to app code, configuration, SQLite, CSV, JSON databases, and Markdown content files.
For a subdirectory install such as https://example.com/blog, either place the app in that folder and let the CMS auto-detect the path, or set:
{
"base_url": "https://example.com/blog",
"base_path": "/blog"
}
base_path controls generated links, assets, forms, RSS, and sitemap paths.