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.
What changed:
Replaced the cache/search/scoring flow with a simpler weighted search.
Search cache now stores only plain page fields: title, description, raw
content, tags, category.
Removed the persisted normalized search payloads and legacy helper
paths.
Search renders through normal listing templates for theme compatibility.
Added fail-open behavior: unexpected search errors log and return no
results instead of blanking the page.
Kept excerpts and highlighting, but made them plain-text based and
safer.
The important change: search still intercepts the route early, but
before themes render it now feeds results through the normal
home/listing state. That avoids themes going blank when they do not know
how to render a custom search state.
I also made search safer:
Indexes raw page text instead of fully rendered content.
Uses raw content for excerpts.
Guards the search call so exceptions do not white-screen the page.
Updated Dark Neon so it still detects search pages correctly after this
compatibility change.
What changed:
Removed the enlarged nested search cache fields I had added, which could
push larger sites into memory/time failures.
Added a self-heal so existing oversized search caches regenerate into
the smaller format.
Stopped fuzzy matching against full body content; it now only fuzzes
title/tags/category/description.
Hardened search-term splitting and malformed input handling.