Website: Update software catalog url and mentions. (#30562)

Closes: https://github.com/fleetdm/confidential/issues/10867

Changes:
- Updated the route for the /app-library page and app details pages to
be at `/software-catalog` and added redirects.
- Updated places where we mentioned the app library to say "software
catalog" instead.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Updated all references and navigation paths from "app library" to
"software catalog" across the website.
* Updated internal links, breadcrumbs, and share URLs to use the new
"/software-catalog" path.
* Added redirects from old "app-library" URLs to the new
"software-catalog" URLs for seamless navigation.

* **Style**
* Updated descriptive text and metadata to reflect the new "software
catalog" terminology throughout the site.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Eric 2025-07-09 17:02:11 -05:00 committed by GitHub
parent 1980ec9cc0
commit c7cbf09c8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 23 additions and 17 deletions

View file

@ -74,7 +74,7 @@ module.exports = {
'/queries',// « overview page (all subpages are dynamic)
'/policies',// « overview page (all subpages are dynamic)
'/tables',// « overview page (all subpages are dynamic)
'/app-library',// « overview page (all subpages are dynamic)
'/software-catalog',// « overview page (all subpages are dynamic)
'/reports/state-of-device-management',// « 2021 research
// FUTURE: Do something smarter to get hand-coded HTML pages from routes.js, like how rebuild-cloud-sdk works, to avoid this manual duplication.
// See also https://github.com/sailshq/sailsjs.com/blob/b53c6e6a90c9afdf89e5cae00b9c9dd3f391b0e7/api/helpers/get-pages-for-sitemap.js#L27
@ -109,7 +109,7 @@ module.exports = {
// ║ ║ ║ ╠═╣║╣ ╠╦╝ ║║╚╦╝║║║╠═╣║║║║║ ╠═╝╠═╣║ ╦║╣ ╚═╗
// ╚═╝ ╩ ╩ ╩╚═╝╩╚═ ═╩╝ ╩ ╝╚╝╩ ╩╩ ╩╩╚═╝ ╩ ╩ ╩╚═╝╚═╝╚═╝
for (let appPage of sails.config.builtStaticContent.appLibrary) {
sitemapXml +=`<url><loc>${_.escape(sails.config.custom.baseUrl+`/app-library/${appPage.identifier}`)}</loc></url>`;// note we omit lastmod for some sitemap entries. This is ok, to mix w/ other entries that do have lastmod. Why? See https://docs.google.com/document/d/1SbpSlyZVXWXVA_xRTaYbgs3750jn252oXyMFLEQxMeU/edit
sitemapXml +=`<url><loc>${_.escape(sails.config.custom.baseUrl+`/software-catalog/${appPage.identifier}`)}</loc></url>`;// note we omit lastmod for some sitemap entries. This is ok, to mix w/ other entries that do have lastmod. Why? See https://docs.google.com/document/d/1SbpSlyZVXWXVA_xRTaYbgs3750jn252oXyMFLEQxMeU/edit
}//∞
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sitemapXml += '</urlset>';

View file

@ -11,7 +11,7 @@ module.exports = {
appIdentifier: {
type: 'string',
required: true,
description: 'the identifier of an app in Fleet\'s maintained app library.',
description: 'the identifier of an app in Fleet\'s maintained software catalog.',
example: '1password'
},
},
@ -44,7 +44,7 @@ module.exports = {
throw 'notFound';
}
// FUTURE: make these better.
let pageTitleForMeta = thisApp.name + ' | Fleet app library';
let pageTitleForMeta = thisApp.name + ' | Fleet software catalog';
// let pageDescriptionForMeta = 'TODO'
// Respond with view.

View file

@ -39,7 +39,7 @@ parasails.registerComponent('docsNavAndSearch', {
<a :class="[currentSection === 'vitals' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/vitals" style="text-decoration: none; text-decoration-line: none;">Vitals</a>
<a :class="[currentSection === 'queries' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/queries" style="text-decoration: none; text-decoration-line: none;">Queries</a>
<a :class="[currentSection === 'policies' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/policies" style="text-decoration: none; text-decoration-line: none;">Policies</a>
<a :class="[currentSection === 'software' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/app-library" style="text-decoration: none; text-decoration-line: none;">Software</a>
<a :class="[currentSection === 'software' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/software-catalog" style="text-decoration: none; text-decoration-line: none;">Software</a>
<a :class="[currentSection === 'osSettings' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/os-settings" style="text-decoration: none; text-decoration-line: none;">OS settings</a>
<a :class="[currentSection === 'tables' ? 'active' : '']" purpose="docs-top-nav-menu-link" href="/tables" style="text-decoration: none; text-decoration-line: none;">Data tables</a>
</div>

View file

@ -401,7 +401,7 @@ module.exports.routes = {
action: 'view-software-management',
locals: {
pageTitleForMeta: 'Software management',
pageDescriptionForMeta: 'Pick from a curated app library or upload your own custom packages. Configure custom installation scripts if you need or let Fleet do it for you.',
pageDescriptionForMeta: 'Pick from a curated software catalog or upload your own custom packages. Configure custom installation scripts if you need or let Fleet do it for you.',
currentSection: 'platform',
}
},
@ -463,7 +463,7 @@ module.exports.routes = {
}
},
'GET /app-library': {
'GET /software-catalog': {
action: 'view-app-library',
locals: {
pageTitleForMeta: 'Software',
@ -471,7 +471,7 @@ module.exports.routes = {
}
},
'GET /app-library/:appIdentifier': {
'GET /software-catalog/:appIdentifier': {
action: 'view-app-details',// Meta title and description set in view action
},
@ -726,7 +726,12 @@ module.exports.routes = {
'GET /guides/secret-variables': '/guides/secrets-in-scripts-and-configuration-profiles',
'GET /guides/ndes-scep-proxy': '/guides/connect-end-user-to-wifi-with-certificate',
'GET /guides/install-fleet-maintained-apps-on-macos-hosts': '/guides/fleet-maintained-apps',
'GET /app-library': '/software-catalog',
'GET /app-library/:appIdentifier': {
fn: (req,res)=> {
return res.redirect('/software-catalog/'+req.param('appIdentifier'));
}
},
// Release note article redirects.
'GET /releases/fleet-3.10.0': '/releases/fleet-3-10-0',
'GET /releases/fleet-3.12.0': '/releases/fleet-3-12-0',
@ -849,6 +854,7 @@ module.exports.routes = {
'GET /endpoint-ops': (req,res)=> { let originalQueryString = req.url.match(/\?(.+)$/) ? '?'+req.url.match(/\?(.+)$/)[1] : ''; return res.redirect(301, sails.config.custom.baseUrl+'/orchestration'+originalQueryString);},
'GET /observability': (req,res)=> { let originalQueryString = req.url.match(/\?(.+)$/) ? '?'+req.url.match(/\?(.+)$/)[1] : ''; return res.redirect(301, sails.config.custom.baseUrl+'/orchestration'+originalQueryString);},
// Shortlinks for texting friends, radio ads, etc
'GET /mdm': '/device-management?utm_content=mdm',// « alias for radio ad
'GET /it': '/observability?utm_content=eo-it',

View file

@ -207,7 +207,7 @@
<div purpose="header-dropdown" class="dropdown-menu">
<a class="dropdown-item" data-dropdown-option="device-management" href="/device-management">Device management <small>+ MDM</small></a>
<a class="dropdown-item" data-dropdown-option="orchestration" href="/orchestration">Orchestration <small>+ monitoring</small></a>
<a class="dropdown-item" data-dropdown-option="software-management" href="/software-management">Software management <small>+ CVEs, usage, app library</small></a>
<a class="dropdown-item" data-dropdown-option="software-management" href="/software-management">Software management <small>+ CVEs, usage, software catalog</small></a>
<a class="dropdown-item" data-dropdown-option="integrations" href="/integrations">Integrations</a>
</div>
</div>

View file

@ -4,7 +4,7 @@
<docs-nav-and-search current-section="software" search-filter="software" :algolia-public-key="algoliaPublicKey"></docs-nav-and-search>
<div purpose="breadcrumbs" class="d-flex flex-row align-items-start">
<div>
<a purpose="breadcrumbs-category" class="text-nowrap" href="/app-library">Software</a>/
<a purpose="breadcrumbs-category" class="text-nowrap" href="/software-catalog">Software</a>/
</div>
<div purpose="breadcrumbs-title">
<span><%- thisApp.name %></span>
@ -29,7 +29,7 @@
<li>Navigate to the <strong>Fleet Desktop</strong> icon in the OS menu bar and select <strong>My device</strong>.</li>
<li>From the <strong>Self-service</strong> tab, navigate to <%- thisApp.name %> and click <strong>Install</strong>.</li>
</ol>
<p>Dont see <%- thisApp.name %> or the Fleet Desktop icon? Send a <a :href="'/app-library/'+thisApp.identifier">link to this page</a> to your IT team.</p>
<p>Dont see <%- thisApp.name %> or the Fleet Desktop icon? Send a <a :href="'/software-catalog/'+thisApp.identifier">link to this page</a> to your IT team.</p>
</div>
<div purpose="app-uninstall">
<h3>Uninstall <%- thisApp.name %></h3>
@ -52,9 +52,9 @@
<div purpose="social-share-buttons" class="d-flex flex-column order-lg-2 order-1">
<p><strong>Share</strong></p>
<div class="d-flex flex-row">
<a :href="`https://news.ycombinator.com/submitlink?u=https://fleetdm.com/app-library/${encodeURIComponent(thisApp.identifier)}&t=${encodeURIComponent(thisApp.name)}`"><img src="/images/social-share-icon-hacker-news-20x20@2x.png" alt="Share this article on Hacker News"></a>
<a :href="`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent('https://fleetdm.com/app-library/'+thisApp.identifier)}`"><img src="/images/social-share-icon-linkedin-20x20@2x.png" alt="Share this article on LinkedIn"></a>
<a :href="`https://twitter.com/intent/tweet?url=${encodeURIComponent('https://fleetdm.com/app-library/'+thisApp.identifier)}`"><img src="/images/social-share-icon-twitter-20x20@2x.png" alt="Share this article on Twitter"></a>
<a :href="`https://news.ycombinator.com/submitlink?u=https://fleetdm.com/software-catalog/${encodeURIComponent(thisApp.identifier)}&t=${encodeURIComponent(thisApp.name)}`"><img src="/images/social-share-icon-hacker-news-20x20@2x.png" alt="Share this article on Hacker News"></a>
<a :href="`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent('https://fleetdm.com/software-catalog/'+thisApp.identifier)}`"><img src="/images/social-share-icon-linkedin-20x20@2x.png" alt="Share this article on LinkedIn"></a>
<a :href="`https://twitter.com/intent/tweet?url=${encodeURIComponent('https://fleetdm.com/software-catalog/'+thisApp.identifier)}`"><img src="/images/social-share-icon-twitter-20x20@2x.png" alt="Share this article on Twitter"></a>
</div>
</div>
<div purpose="docs-links" class="order-3">

View file

@ -17,7 +17,7 @@
<div purpose="app-cards" class="card-deck flex-wrap">
<% for(let app of allApps) { %>
<a href="/app-library/<%- app.identifier %>" purpose="app-card" class="card d-flex">
<a href="/software-catalog/<%- app.identifier %>" purpose="app-card" class="card d-flex">
<div class="d-flex flex-row align-items-center justify-content-start">
<div purpose="app-icon">
<img alt="<%- app.name %> icon" src="/images/<%= app.iconFilename %>">

View file

@ -4,7 +4,7 @@
<div purpose="page-hero">
<h4>Software management</h4>
<h1>Manage software consistently</h1>
<p purpose="hero-text">Pick from a curated app library or upload your own custom packages. Configure custom installation scripts if you need or let Fleet do it for you.</p>
<p purpose="hero-text">Pick from a curated software catalog or upload your own custom packages. Configure custom installation scripts if you need or let Fleet do it for you.</p>
<div purpose="button-row" class="d-flex justify-content-start">
<a class="btn btn-primary" purpose="contact-button" href="/contact">Talk to an engineer</a>
<animated-arrow-button href="/register">Try it yourself</animated-arrow-button>