Content Automation Ranking Launchpad — complete changelog from initial build to present.
.carltheme package to install a complete site theme. CARL reads the package and shows a confirmation screen before making any changes. Your current templates and include files are backed up automatically before anything is overwritten..carltheme file contains everything a theme needs: page layouts, CSS, navigation, footer, hub renderer, and sidebar widget. Install once — everything lands in the right place automatically..carltheme package. Includes blog, full-width, and category page layouts. Mobile-responsive with a slide-in navigation menu. No external CSS frameworks or dependencies. PageSpeed scores: Performance 92–99, Accessibility 90, Best Practices 100, SEO 92 — with zero Cumulative Layout Shift on all page types.addressRegion in the Organization JSON-LD schema.sameAs schema array and powers the Subscribe button on video pages.header_scripts.txt are now generated entirely from Settings. All fields — name, description, logo, address, founder, sameAs links — read from the database at runtime. Hardcoded values have been removed. Empty fields are excluded from the output automatically./support (404). Corrected to /support.php.{{BODY}}. When a template contains {{SNIPPET}}, the snippet renders at that position and the body renders separately at {{BODY}}. When {{SNIPPET}} is absent, the generator falls back to the original behaviour of appending the snippet after the body — fully backward compatible with all existing templates.{{SNIPPET}} support, causing the token to render as literal text in preview mode. The preview now applies identical logic to the generator so preview output matches the generated page exactly.//calculators//), the WHERE directory=? query in hub_render.txt would never match the clean URL-derived value, returning zero rows with no error. The query now uses TRIM(BOTH '/' FROM directory) so it matches correctly regardless of how the value was stored.page-edit.php stripped illegal characters but did not trim leading or trailing slash characters before saving. A directory typed or selected with surrounding slashes would be persisted as-is. A trim() pass on the sanitised value now prevents this from occurring.REQUEST_URI is now explicitly trimmed of slashes before being passed to the query, ensuring the comparison is clean on both sides regardless of any future edge cases in URL construction.//calculators//), the WHERE directory=? query in hub_render.txt would never match the clean URL-derived value, returning zero rows with no error. The query now uses TRIM(BOTH '/' FROM directory) so it matches correctly regardless of how the value was stored.page-edit.php stripped illegal characters but did not trim leading or trailing slash characters before saving. A directory typed or selected with surrounding slashes would be persisted as-is. A trim() pass on the sanitised value now prevents this from occurring.REQUEST_URI is now explicitly trimmed of slashes before being passed to the query, ensuring the comparison is clean on both sides regardless of any future edge cases in URL construction.mysqldump or shell access. Compatible with all shared hosting environments. Outputs DROP + CREATE + chunked INSERT statements per table.