Releases: WebTigers/TigerCore
Release list
v0.19.0-beta
Marketing pages + Solutions mega-menu. Audience-segmented, static, shipped in every download.
- New home (
/) — a lean landing that positions Tiger broadly and points at three audience paths + the feature grid (placeholder for a fuller redesign). /vibe— the former home, repositioned as the SaaS-startup / vibe-coding pitch./agency— new: one client or a hundred, white-label per tenant, run from one back office.- Solutions mega-menu — static 2×2 card panel in the header's first dropdown →
/cms,/agency,/vibe, + a placeholder.
Pretty routes /vibe + /agency are static aliases into the core IndexController.
v0.18.0-beta
TigerSEO — Article + BreadcrumbList JSON-LD (per-content rich results).
Completes the structured-data track:
- BreadcrumbList — every CMS page emits a trail (Home → each path segment; leaf labelled with the page title, intermediate segments humanized).
- BlogPosting — every blog article emits headline / description / feature image (real URL + dimensions) /
datePublished/dateModified/ author /publisher→Organization /isPartOf→WebSite, plus its own breadcrumb.
Both emit as additional @graph blocks cross-referencing the site-identity graph by @id, on the same head placeholder. Fail-soft; home/single-segment pages emit no breadcrumb.
v0.17.0-beta
Site Identity — an admin screen for the site's brand.
A new first-party identity module adds a Site Identity screen (under Settings):
- Name + tagline — now editable in the UI (was
.ini-only). - Logo + favicon — chosen from the Media Library or uploaded (
TigerMediaPicker). - Social profile URLs — X / Facebook / Instagram / LinkedIn / YouTube / GitHub.
All values write to the config tier (live-override, no deploy) and light up what already consumes them: the favicon (rel="icon" + apple-touch-icon, a single high-res square the browser scales), the logo (Organization.logo), and the socials (Organization.sameAs) in the JSON-LD.
Own ACL resource (grantable per-org for multi-tenant); GLOBAL config scope for now, isolated in one _scope() method for the future multi-site module. No schema change.
v0.16.0-beta
TigerSEO — JSON-LD structured data (rich results / sitelinks layer).
A single <script type="application/ld+json"> @graph describing the site as an entity:
- Organization — brand name, logo (resolved through the media row → real absolute URL + dimensions), social
sameAs. - WebSite —
publisher→ Organization; optional SearchAction (sitelinks searchbox) whentiger.seo.schema.search_urlis set. - SiteNavigationElement — the primary menu, so Google can map site structure into nav sitelinks.
Config-driven (tiger.site.*, tiger.seo.social.*, tiger.seo.schema.*), org-scoped, fail-soft, and </> hex-escaped so no value can break out of the <script>. Emitted via the tigerJsonLd head placeholder the public layout renders — gone when the module is uninstalled.
Full notes: CHANGELOG.md.
v0.15.0-beta
TigerSEO — public-URL mapping + Open Graph.
Sitemap + robots (public-URL registry)
Tiger_Sitemap— a core registry any module contributes its public (guest) URLs to (likeTiger_Dashboard)./sitemap.xml+/robots.txtserved as routes (never docroot files — cPanel real-file-first.htaccesswould shadow them). Org-scoped, guest-readable, fail-soft.- Providers ship for CMS pages (
/slug) and blog articles (/blog/slug); TigerDocs maps its public docs tree from its own repo.
Phase 2 — Open Graph + Twitter
og:title/description/type/url/site_name,article:*times,twitter:card;og:imageresolved through the media row to a true absolute URL + dimensions, hero-as-og:image for articles.
Full notes: CHANGELOG.md.
v0.14.0-beta — TigerSEO Phase 1 + org_id tenant stamping
Added
- TigerSEO — Phase 1 (the head registry). A bundled
seomodule renders the SEO data Tiger already collects — title / meta description / robots / canonical — via TigerZF'sheadTitle/headMeta/headLink, which the public layout now adopts.Seo_Service_Headmaps a page'smeta.seoto the head;Seo_Plugin_Headcovers CMS pages, a guarded call covers blog articles. Uninstall it and the head still renders, with less. - Migrations can run PHP (
fn($db)steps) for data transforms SQL can't express.
Changed
org_idstamped on every tenant write (base-model, likecreated_by); public reads scope to the site org (Tiger_Model_Org::siteOrgId()). CMS pages + blog articles are now org-owned instead of''. Migration0033backfills existing content. The exact seam a future multi-site module overrides per host.- Unified page SEO metadata onto
page.meta.seo(migration0032).
v0.13.1-beta — fix dashboard Customize button
Fixed
- Dashboard "Customize" button did nothing. The dashboard's inline script runs before Bootstrap's JS loads (layout footer), so
new bootstrap.Modal()ran against an undefinedwindow.bootstrapand the click handler never attached. The modal is now created lazily on first click. No behavior change beyond the fix.
v0.13.0-beta — dashboard Customize + registry refresh
Added
- Customize the dashboard — hide/show widgets per user (WP "Screen Options" style). A Customize button (top-right, replacing the breadcrumb) opens a modal to switch widgets on/off. A hidden widget is not rendered (its body does no work) — it stays as a lightweight shell out of the Muuri grid; switching it back on fetches the body via
/apiand drops the card in live, no reload. Persists per-user in the lazy option tier. The dashboard breadcrumb was removed. - "Refresh directory" button in the Module Manager. The registry index is cached ~3h, so a newly published listing could take that long to appear. A refresh control re-fetches the catalog (and sponsored overlay) on demand.
v0.12.1-beta — drop deprecated curl_close()
Fixed
Tiger_Module_Github: dropped the deprecatedcurl_close(). On PHP 8+ theCurlHandleis GC-freed when the handle leaves scope, so the call was already a no-op — and PHP 8.5 emitsE_DEPRECATEDfor it (which the update checker's GitHub fetches were tripping). No behavior change on 8.1–8.5.
v0.12.0-beta — Updates screen shows what's new
Added
- Update screen — "What's new" per update. The Updates screen now shows each offered version's changelog section beside the version bump.
Tiger_Update_Checker::notes()fetches the target'sCHANGELOG.mdfrom its repo at the new release ref (not the installed copy) and slices out the## [<version>]section; the view renders it in a collapsible "What's new in x.y.z". Tries the tag first, then the default branch (main/master) — a tag's tree can predate its changelog entry — and is file-cached, fail-soft to version-numbers-only. One source of truth: theCHANGELOG.mdevery Tiger repo already keeps (no separate release-notes file).
Housekeeping
- Backfilled the core changelog for 0.7.0 → 0.11.1 (it had fallen behind the shipped tags), and pushed the missing v0.10.0-beta tag so the tag run is contiguous again.