Ty Clifford 94aea8501f - Fixed the subdirectory loading issue.
Changed:
[app/View.php](/Users/tyemeclifford/Documents/GH/blog/app/View.php): 
generated URLs now honor a base path like /blog.
[app/Config.php](/Users/tyemeclifford/Documents/GH/blog/app/Config.php): 
added base_path support and derives it from base_url or SCRIPT_NAME.
[app/App.php](/Users/tyemeclifford/Documents/GH/blog/app/App.php): route 
parsing strips the base path, and PHP can safely serve theme/upload 
assets for virtual subdirectory previews.
[.htaccess](/Users/tyemeclifford/Documents/GH/blog/.htaccess): removed 
hardcoded RewriteBase /.
[themes/neon/layout.php](/Users/tyemeclifford/Documents/GH/blog/themes/neon/layout.php): 
root-relative social links like /feed.xml now become /blog/feed.xml.
[README.md](/Users/tyemeclifford/Documents/GH/blog/README.md): 
documented subdirectory setup.
2026-07-04 19:54:54 -04:00
2026-07-04 19:41:44 -04:00
2026-07-04 19:41:44 -04:00
2026-07-04 19:41:44 -04:00
2026-07-04 19:41:44 -04:00
2026-07-04 19:41:44 -04:00
2026-07-04 19:41:44 -04:00

Neon Notes CMS

Neon Notes 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_rewrite for .htaccess pretty 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

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.

S
Description
Ty's Content Management System.
https://tyclifford.com/blog
Readme 2.9 MiB
Languages
PHP 53.9%
Objective-C 34%
CSS 6.1%
JavaScript 5.7%
Shell 0.3%