Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions .github/workflows/smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,10 @@ jobs:

check "landing /" 200 "http://127.0.0.1:8000/"
check "login /login" 200 "http://127.0.0.1:8000/login"
check "marketing /vibe" 200 "http://127.0.0.1:8000/vibe"
check "marketing /agency" 200 "http://127.0.0.1:8000/agency"
# TIGER-230: WebTigers marketing left core (moved to the private TigerMarketing module).
# Core ships no marketing pages, so these routes must 404 now, not 200.
check "removed /vibe 404" 404 "http://127.0.0.1:8000/vibe"
check "removed /agency 404" 404 "http://127.0.0.1:8000/agency"
check "/api gateway alive" 200 "http://127.0.0.1:8000/api"
check "unknown slug 404" 404 "http://127.0.0.1:8000/no-such-page-xyzzy"
check "org-scoped CMS page" 200 "http://127.0.0.1:8000/ci-smoke-page"
Expand All @@ -178,16 +180,15 @@ jobs:
# external CDNs are not ours to gate a build on, and the cache-buster query is tolerated.
assets "landing /" "http://127.0.0.1:8000/"
assets "login /login" "http://127.0.0.1:8000/login"
assets "marketing /vibe" "http://127.0.0.1:8000/vibe"
assets "marketing /agency" "http://127.0.0.1:8000/agency"
assets "CMS page" "http://127.0.0.1:8000/ci-smoke-page"

# The home page must carry the Solutions mega-menu (its cards link to the marketing pages).
# TIGER-230: bare core is BLANK. The default home ships no chrome — no header, no footer,
# no Solutions mega-menu, no marketing links. Assert that marketing has NOT crept back in.
curl -s "http://127.0.0.1:8000/" >home.html || true
if grep -q 'tiger-mega' home.html && grep -q 'href="/vibe"' home.html && grep -q 'href="/agency"' home.html; then
echo "PASS home carries the Solutions mega-menu + audience links"
if grep -q 'tiger-mega' home.html || grep -q 'href="/vibe"' home.html || grep -q 'href="/agency"' home.html; then
echo "FAIL bare core home still carries marketing chrome (mega-menu / audience links)"; fail=1
else
echo "FAIL home missing mega-menu / audience links"; fail=1
echo "PASS bare core home carries no marketing chrome"
fi

# The seeded page (org_id = the site org) must actually DISPATCH — its body has to render, not a
Expand Down
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@ All notable changes to **Tiger Core** (`webtigers/tiger-core`). Format follows

## [Unreleased]

## [1.17.0] — 2026-09-26
## [1.18.0] — 2026-09-26

### Changed

- **Bare core ships a neutral, blank home — WebTigers marketing removed from tiger-core (TIGER-230).**
A fresh install with no theme now renders an empty home in the active layout, not WebTigers'
marketing site. Removed from core: the built-in home body (now deliberately blank), every marketing
view (`/vibe`, `/agency`, `/get-tiger`, `/how-it-works`, `/features`, `/creators`, `/developers`,
`/hosting`, `/saas-vs-sias`, `/tech-stack` + all locales), their route aliases, `IndexController`'s
marketing actions, `themes/puma/assets/marketing.css`, and the PUMA public header's Solutions/Why-Tiger
mega-menus (nav is now Docs + GitHub). `IndexController`'s home-resolution chain is unchanged, so a
site still gets `/` from ComingSoon, an admin-chosen CMS page/path, or a theme that ships
`content/index.phtml`. The WebTigers marketing now lives in the private **TigerMarketing** theme.

### Added

Expand Down
60 changes: 0 additions & 60 deletions configs/routes.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,66 +8,6 @@
; A page reachable at its default MVC path needs NO entry here — only add a route for a pretty alias.
[production]

resources.router.routes.features.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.features.route = "features"
resources.router.routes.features.defaults.module = "default"
resources.router.routes.features.defaults.controller = "index"
resources.router.routes.features.defaults.action = "features"

resources.router.routes.vibe.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.vibe.route = "vibe"
resources.router.routes.vibe.defaults.module = "default"
resources.router.routes.vibe.defaults.controller = "index"
resources.router.routes.vibe.defaults.action = "vibe"

resources.router.routes.agency.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.agency.route = "agency"
resources.router.routes.agency.defaults.module = "default"
resources.router.routes.agency.defaults.controller = "index"
resources.router.routes.agency.defaults.action = "agency"

resources.router.routes.developers.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.developers.route = "developers"
resources.router.routes.developers.defaults.module = "default"
resources.router.routes.developers.defaults.controller = "index"
resources.router.routes.developers.defaults.action = "developers"

resources.router.routes.creators.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.creators.route = "creators"
resources.router.routes.creators.defaults.module = "default"
resources.router.routes.creators.defaults.controller = "index"
resources.router.routes.creators.defaults.action = "creators"

resources.router.routes.hosting.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.hosting.route = "hosting"
resources.router.routes.hosting.defaults.module = "default"
resources.router.routes.hosting.defaults.controller = "index"
resources.router.routes.hosting.defaults.action = "hosting"

resources.router.routes.get_tiger.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.get_tiger.route = "get-tiger"
resources.router.routes.get_tiger.defaults.module = "default"
resources.router.routes.get_tiger.defaults.controller = "index"
resources.router.routes.get_tiger.defaults.action = "get-tiger"

resources.router.routes.saas_vs_sias.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.saas_vs_sias.route = "saas-vs-sias"
resources.router.routes.saas_vs_sias.defaults.module = "default"
resources.router.routes.saas_vs_sias.defaults.controller = "index"
resources.router.routes.saas_vs_sias.defaults.action = "saas-vs-sias"

resources.router.routes.how_it_works.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.how_it_works.route = "how-it-works"
resources.router.routes.how_it_works.defaults.module = "default"
resources.router.routes.how_it_works.defaults.controller = "index"
resources.router.routes.how_it_works.defaults.action = "how-it-works"

resources.router.routes.tech_stack.type = "Zend_Controller_Router_Route_Static"
resources.router.routes.tech_stack.route = "tech-stack"
resources.router.routes.tech_stack.defaults.module = "default"
resources.router.routes.tech_stack.defaults.controller = "index"
resources.router.routes.tech_stack.defaults.action = "tech-stack"

; Self-service profile pretty alias: /user/profile -> the profile module's index. The canonical
; /profile path keeps working via the default MVC route; this is just the nicer URL (config, not code).
resources.router.routes.user_profile.type = "Zend_Controller_Router_Route_Static"
Expand Down
121 changes: 0 additions & 121 deletions core/controllers/IndexController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,6 @@
*/
class IndexController extends Zend_Controller_Action
{
/**
* Append the marketing-only stylesheet (a larger base font, etc.) to the END of the CSS stack so
* it wins the cascade. Done once per request in init() (not per action), and only here — the
* admin/auth/CMS surfaces never dispatch through IndexController, so they're untouched and no
* body-class scoping is needed.
*
* @return void
*/
public function init()
{
if (isset($this->view->themeAssets)) {
$this->view->headLink()->appendStylesheet($this->view->asset($this->view->themeAssets . '/marketing.css'));
}
}

/**
* Serve the home page at "/": an admin-chosen CMS page, else the active theme's shipped
* home (`content/index.phtml`), else the built-in landing.
Expand Down Expand Up @@ -80,112 +65,6 @@ public function indexAction()
$this->view->localeView(); // index/index.es.phtml for es, else index/index.phtml
}

/**
* `/vibe` — the SaaS-startup / "vibe coding" pitch (the former home page). A shipped marketing
* page; the view owns its content. Routed via _initMarketingAliases.
*
* @return void
*/
public function vibeAction()
{
$this->view->localeView(); // index/vibe.es.phtml for es, else index/vibe.phtml
}

/**
* `/agency` — the agency story (one client or a hundred). A shipped marketing page.
*
* @return void
*/
public function agencyAction()
{
$this->view->localeView();
}

/**
* `/developers` — the open-source / builder story (free, BSD, extend via modules). Shipped marketing.
*
* @return void
*/
public function developersAction()
{
$this->view->localeView();
}

/**
* `/creators` — the plugin/theme creator story (build for the marketplace, keep your license).
*
* @return void
*/
public function creatorsAction()
{
$this->view->localeView();
}

/**
* `/hosting` — the hosting-partner story (add Tiger to the stack, zero licensing fees).
*
* @return void
*/
public function hostingAction()
{
$this->view->localeView();
}

/**
* `/features` — the full feature catalog: sectioned cards drawn from across the audience pages.
* A shipped marketing page; the view owns its content.
*
* @return void
*/
public function featuresAction()
{
$this->view->localeView();
}

/**
* `/get-tiger` — the "Get Tiger" page: the four ways to run Tiger, the vibe-stack comparison, and
* portability. A shipped marketing page; the view owns its content.
*
* @return void
*/
public function getTigerAction()
{
$this->view->localeView();
}

/**
* `/saas-vs-sias` — "You don't own your app. Your platform does." SaaS vs SiaS (Software *in* a
* Service): the vibe-coding lock-in trap and what real ownership looks like. Shipped marketing.
*
* @return void
*/
public function saasVsSiasAction()
{
$this->view->localeView();
}

/**
* `/how-it-works` — "How Tiger Works": one framework, three paths (website / vibe-code / enterprise),
* what ships in the box, the composition model, portability, and the comparisons. Shipped marketing.
*
* @return void
*/
public function howItWorksAction()
{
$this->view->localeView();
}

/**
* `/tech-stack` — "The Technology Stack": why each layer was chosen (proven, portable, fast,
* secure, AI-native, owned). A shipped marketing page; the view owns its content.
*
* @return void
*/
public function techStackAction()
{
$this->view->localeView();
}

/**
* Forward "/" to an internal path — a public module page (`/marketplace`, `/docs`) or any
* `module/controller/action`.
Expand Down
2 changes: 2 additions & 0 deletions core/languages/de/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,6 @@
'core.mail.provider.help.microsoft_smtp' => 'Microsoft deaktiviert SMTP AUTH standardmäßig und stellt die Basisauthentifizierung ein; möglicherweise müssen Sie sie für dieses Postfach aktivieren.',
'core.mail.provider.requires.aws_sdk' => 'Dieser Treiber benötigt das AWS-SDK-Modul (tiger-sdk-aws). Installieren und aktivieren Sie es, oder verwenden Sie Amazon SES (SMTP).',
'core.mail.provider.requires.generic' => 'Der Treiber dieses Anbieters ist auf dieser Installation nicht verfügbar.',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
2 changes: 2 additions & 0 deletions core/languages/en/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -211,4 +211,6 @@
'core.mail.provider.help.microsoft_smtp' => 'Microsoft disables SMTP AUTH by default and is retiring basic authentication; you may need to enable it for this mailbox.',
'core.mail.provider.requires.aws_sdk' => 'This driver needs the AWS SDK module (tiger-sdk-aws). Install and activate it, or use Amazon SES (SMTP) instead.',
'core.mail.provider.requires.generic' => 'This provider\'s driver is not available on this install.',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
2 changes: 2 additions & 0 deletions core/languages/es/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,6 @@
'core.mail.provider.help.microsoft_smtp' => 'Microsoft desactiva SMTP AUTH de forma predeterminada y está retirando la autenticación básica; puede que tengas que habilitarla para este buzón.',
'core.mail.provider.requires.aws_sdk' => 'Este controlador necesita el módulo del SDK de AWS (tiger-sdk-aws). Instálalo y actívalo, o usa Amazon SES (SMTP).',
'core.mail.provider.requires.generic' => 'El controlador de este proveedor no está disponible en esta instalación.',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
2 changes: 2 additions & 0 deletions core/languages/fr/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,6 @@
'core.mail.provider.help.microsoft_smtp' => 'Microsoft désactive SMTP AUTH par défaut et retire l\'authentification de base ; vous devrez peut-être l\'activer pour cette boîte aux lettres.',
'core.mail.provider.requires.aws_sdk' => 'Ce pilote nécessite le module SDK AWS (tiger-sdk-aws). Installez-le et activez-le, ou utilisez Amazon SES (SMTP).',
'core.mail.provider.requires.generic' => 'Le pilote de ce fournisseur n\'est pas disponible sur cette installation.',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
2 changes: 2 additions & 0 deletions core/languages/hi/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,6 @@
'core.mail.provider.help.microsoft_smtp' => 'Microsoft डिफ़ॉल्ट रूप से SMTP AUTH बंद रखता है और बेसिक प्रमाणीकरण हटा रहा है; आपको इस मेलबॉक्स के लिए इसे सक्षम करना पड़ सकता है।',
'core.mail.provider.requires.aws_sdk' => 'इस ड्राइवर के लिए AWS SDK मॉड्यूल (tiger-sdk-aws) चाहिए। इसे इंस्टॉल और सक्रिय करें, या Amazon SES (SMTP) उपयोग करें।',
'core.mail.provider.requires.generic' => 'इस प्रदाता का ड्राइवर इस इंस्टॉल पर उपलब्ध नहीं है।',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
2 changes: 2 additions & 0 deletions core/languages/pt/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,6 @@
'core.mail.provider.help.microsoft_smtp' => 'A Microsoft desativa o SMTP AUTH por padrão e está descontinuando a autenticação básica; pode ser necessário habilitá-la para esta caixa de correio.',
'core.mail.provider.requires.aws_sdk' => 'Este driver precisa do módulo do SDK da AWS (tiger-sdk-aws). Instale e ative-o, ou use o Amazon SES (SMTP).',
'core.mail.provider.requires.generic' => 'O driver deste provedor não está disponível nesta instalação.',

// --- Built-in home stub (IndexController::indexAction fallback — the neutral, brandable welcome) ---
];
Loading
Loading