Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
.badge{padding:.16rem .55rem;border-radius:999px;font-size:.72rem;border:1px solid var(--ifm-color-emphasis-300)}
.p_frontdoor{background:#e8f3ff;border-color:#c6e1ff;color:#145ea8}
.p_openziti{background:#e9fff3;border-color:#c8f2df;color:#0d7a4e}
.p_onprem{background:#fff3e8;border-color:#ffdcbf;color:#9a4d00}
.p_selfhosted{background:#fff3e8;border-color:#ffdcbf;color:#9a4d00}
.p_zlan{background:#f1edff;border-color:#d9d0ff;color:#5335b7}
.p_zrok{background:#fff0f0;border-color:#ffd0d0;color:#b71c1c}

Expand Down Expand Up @@ -173,7 +173,7 @@
border-color: #c8f2df;
color: #0d7a4e;
}
.pill.active[data-product="onprem"] {
.pill.active[data-product="selfhosted"] {
background: #fff3e8;
border-color: #ffdcbf;
color: #9a4d00;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export function ProductSearch({
appId,
apiKey,
indexName,
products = ["frontdoor", "openziti", "onprem", "zlan", "zrok"],
products = ["frontdoor", "openziti", "selfhosted", "zlan", "zrok"],
extraContainerClasses = [],
}: ProductSearchProps) {
// read initial pill from ?product= for back/forward + shareable URLs
Expand Down
4 changes: 2 additions & 2 deletions unified-doc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ The unified-doc site includes BackstopJS for visual regression testing against p
### Overview

- Compares screenshots of local dev site vs production (`https://netfoundry.io/docs/`)
- Tests organized by product: `openziti`, `frontdoor`, `onprem`, `zrok`, `zlan`, `home`
- Tests organized by product: `openziti`, `frontdoor`, `selfhosted`, `zrok`, `zlan`, `home`
- 3 viewports: desktop (1920x1080), tablet (768x1024), mobile (375x812)
- Generates HTML diff reports highlighting visual differences

Expand Down Expand Up @@ -100,7 +100,7 @@ Each product has its own set of commands:
| `vrt:approve:<product>` | Approve current test screenshots as new reference |
| `vrt:report:<product>` | Open HTML diff report in browser |

Products: `home`, `openziti`, `frontdoor`, `onprem`, `zrok`, `zlan`
Products: `home`, `openziti`, `frontdoor`, `selfhosted`, `zrok`, `zlan`

### Workflow

Expand Down
4 changes: 3 additions & 1 deletion unified-doc/algolia-prod-crawler.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ new Crawler({
rec.product = "frontdoor";
else if (rec.url_without_anchor.includes("/docs/openziti"))
rec.product = "openziti";
else if (rec.url_without_anchor.includes("/docs/selfhosted"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this file should not be touched as part of this

Copy link
Contributor Author

@nicoalba nicoalba Feb 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude's defense of touching this file:

The change ensures proper Algolia search indexing during the transition:

if (rec.url_without_anchor.includes("/docs/selfhosted"))                                                                                                                 
  rec.product = "selfhosted";
else if (rec.url_without_anchor.includes("/docs/onprem"))
  rec.product = "selfhosted";  // ← Key: onprem URLs tagged as "selfhosted"

Why this matters:

  • Both /docs/onprem/* and /docs/selfhosted/* URLs get tagged with product: "selfhosted"
  • When Algolia crawls and indexes the site, both URL paths will be searchable under the "Self-Hosted" product filter
  • This maintains search continuity - old bookmarked onprem URLs will still appear in search results alongside new selfhosted URLs
  • After the transition period, when you remove the onprem path, Algolia will naturally drop those URLs from the index and only keep the selfhosted ones

This aligns perfectly with the dual-path strategy mentioned in the plan - serve the same content at both paths temporarily, let Algolia re-index, then remove the old onprem path once everything is stable.

rec.product = "selfhosted";
else if (rec.url_without_anchor.includes("/docs/onprem"))
rec.product = "onprem";
rec.product = "selfhosted";
else if (rec.url_without_anchor.includes("/docs/zlan"))
rec.product = "zlan";
else if (rec.url_without_anchor.includes("/docs/zrok"))
Expand Down
13 changes: 7 additions & 6 deletions unified-doc/build-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ lint_docs() {
"${script_dir}/_remotes/zlan/docusaurus/docs"
"${script_dir}/_remotes/frontdoor/docusaurus/docs"
"${script_dir}/_remotes/zrok/website/docs"
"${script_dir}/_remotes/onprem/docusaurus/docs"
"${script_dir}/_remotes/selfhosted/docusaurus/docs"
"${script_dir}/_remotes/openziti/docusaurus/docs"
)

Expand Down Expand Up @@ -284,11 +284,12 @@ if [ "${CLEAN:-0}" -eq 1 ]; then
find "$script_dir/_remotes" -mindepth 1 -maxdepth 1 ! -name 'package.json' -exec rm -rf {} +
fi

clone_or_update "https://bitbucket.org/netfoundry/zrok-connector.git" frontdoor develop
clone_or_update "https://bitbucket.org/netfoundry/k8s-on-prem-installations.git" onprem main
clone_or_update "https://github.com/openziti/ziti-doc.git" openziti main
clone_or_update "https://github.com/netfoundry/zlan.git" zlan main
clone_or_update "https://github.com/openziti/zrok.git" zrok main
clone_or_update "https://bitbucket.org/netfoundry/zrok-connector.git" frontdoor develop
clone_or_update "https://bitbucket.org/netfoundry/k8s-on-prem-installations.git" onprem full-rename
clone_or_update "https://bitbucket.org/netfoundry/k8s-on-prem-installations.git" selfhosted full-rename
clone_or_update "https://github.com/openziti/ziti-doc.git" openziti main
clone_or_update "https://github.com/netfoundry/zlan.git" zlan full-rename
clone_or_update "https://github.com/openziti/zrok.git" zrok main

echo "========================================"
echo "bd POST-CLONE DEBUG"
Expand Down
58 changes: 43 additions & 15 deletions unified-doc/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {zrokDocsPluginConfig} from "./_remotes/zrok/website/docusaurus-plugin-zr
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const frontdoor = `./_remotes/frontdoor`;
const onprem = `./_remotes/onprem`;
const selfhosted = `./_remotes/selfhosted`;
const openziti = `./_remotes/openziti`;
const zrokRoot = `./_remotes/zrok/website`;
const zlan = `./_remotes/zlan`;
Expand All @@ -36,7 +37,7 @@ const BUILD_FLAGS = {
NONE: 0x0,
OPENZITI: 0x1,
FRONTDOOR: 0x2,
ONPREM: 0x4,
SELFHOSTED: 0x4,
ZROK: 0x8,
ZLAN: 0x10,
};
Expand Down Expand Up @@ -82,13 +83,15 @@ const prod: PublishConfig = {
const cfg: PublishConfig = process.env.DOCUSAURUS_PUBLISH_ENV === 'prod' ? prod : staging;

const REMARK_MAPPINGS = [
{ from: '@onpremdocs', to: `${docsBase}onprem` },
{ from: '@selfhosteddocs', to: `${docsBase}selfhosted` },
{ from: '@onpremdocs', to: `${docsBase}selfhosted` },
{ from: '@openzitidocs', to: `${docsBase}openziti`},
{ from: '@zrokdocs', to: `${docsBase}zrok`},
{ from: '@static', to: docsBase},
{ from: '/openziti/', to: `${docsBase}/openziti/` },
{ from: '/frontdoor/', to: `${docsBase}/frontdoor/` },
{ from: '/onprem/', to: `${docsBase}/onprem/` },
{ from: '/selfhosted/', to: `${docsBase}/selfhosted/` },
{ from: '/onprem/', to: `${docsBase}/selfhosted/` },
{ from: '/zrok/', to: `${docsBase}/zrok/` },
{ from: '/zlan/', to: `${docsBase}/zlan/` },
];
Expand Down Expand Up @@ -200,6 +203,7 @@ const config: Config = {
'static',
'_remotes/frontdoor/docusaurus/static/',
'_remotes/onprem/docusaurus/static/',
'_remotes/selfhosted/docusaurus/static/',
'_remotes/openziti/docusaurus/static/',
'_remotes/zlan/docusaurus/static/',
`${zrokRoot}/static/`,
Expand Down Expand Up @@ -233,6 +237,7 @@ const config: Config = {
'@openziti': path.resolve(__dirname, `${openziti}/docusaurus`),
'@frontdoor': path.resolve(__dirname, `${frontdoor}/docusaurus`),
'@onprem': path.resolve(__dirname, `${onprem}/docusaurus`),
'@selfhosted': path.resolve(__dirname, `${selfhosted}/docusaurus`),
'@zlan': path.resolve(__dirname, `${zlan}/docusaurus`),
'@zrok': path.resolve(__dirname, `${zrokRoot}`),
'@zrokroot': path.resolve(__dirname, `${zrokRoot}`),
Expand All @@ -254,14 +259,31 @@ const config: Config = {

['@docusaurus/plugin-content-pages',{path: 'src/pages',routeBasePath: '/'}],
build(BUILD_FLAGS.FRONTDOOR) && ['@docusaurus/plugin-content-pages',{id: `frontdoor-pages`, path: `${frontdoor}/docusaurus/src/pages`, routeBasePath: '/frontdoor'}],
build(BUILD_FLAGS.ONPREM) && ['@docusaurus/plugin-content-pages',{id: `onprem-pages`, path: `${onprem}/docusaurus/src/pages`, routeBasePath: '/onprem'}],
build(BUILD_FLAGS.SELFHOSTED) && ['@docusaurus/plugin-content-pages',{id: `selfhosted-pages`, path: `${selfhosted}/docusaurus/src/pages`, routeBasePath: '/selfhosted'}],
build(BUILD_FLAGS.OPENZITI) && ['@docusaurus/plugin-content-pages',{id: `openziti-pages`, path: `${openziti}/docusaurus/src/pages`, routeBasePath: '/openziti'}],
build(BUILD_FLAGS.ZLAN) && ['@docusaurus/plugin-content-pages',{id: `zlan-pages`, path: `${zlan}/docusaurus/src/pages`, routeBasePath: '/zlan'}],
build(BUILD_FLAGS.ZROK) && ['@docusaurus/plugin-content-pages',{id: `zrok-pages`, path: `${zrokRoot}/src/pages`, routeBasePath: '/zrok'}],
build(BUILD_FLAGS.ONPREM) && [
build(BUILD_FLAGS.SELFHOSTED) && [
'@docusaurus/plugin-content-docs',
{
id: 'onprem', // do not change - affects algolia search
id: 'selfhosted',
path: `${selfhosted}/docusaurus/docs`,
routeBasePath: routeBase('selfhosted'),
sidebarPath: `${selfhosted}/docusaurus/sidebars.ts`,
includeCurrentVersion: true,
beforeDefaultRemarkPlugins: [
remarkGithubAdmonitionsToDirectives,
],
remarkPlugins: [
[remarkScopedPath, { mappings: REMARK_MAPPINGS, debug: false }],
[remarkCodeSections, { logLevel: LogLevel.Silent }],
],
},
],
build(BUILD_FLAGS.SELFHOSTED) && [
'@docusaurus/plugin-content-docs',
{
id: 'onprem', // RETAINED: Critical for Algolia Index continuity
path: `${onprem}/docusaurus/docs`,
routeBasePath: routeBase('onprem'),
sidebarPath: `${onprem}/docusaurus/sidebars.ts`,
Expand All @@ -275,6 +297,7 @@ const config: Config = {
],
},
],

build(BUILD_FLAGS.FRONTDOOR) && [
'@docusaurus/plugin-content-docs',
{
Expand Down Expand Up @@ -346,15 +369,20 @@ const config: Config = {
},
],
build(BUILD_FLAGS.ZROK) && extendDocsPlugins(zrokDocsPluginConfig(zrokRoot, REMARK_MAPPINGS, routeBase('zrok'))),
// Fallback redirects for JSX pages with hardcoded /docs/ paths (from upstream repos)
isVercel && [
[
'@docusaurus/plugin-client-redirects',
{
createRedirects(existingPath: string) {
// Redirect /docs/X → /X for all doc paths
return existingPath.match(/^\/(onprem|frontdoor|openziti|zrok|zlan)/)
? [`/docs${existingPath}`]
: undefined;
const redirects: string[] = [];
// Vercel previews: redirect /docs/X → /X for all doc paths
if (isVercel && existingPath.match(/^\/(selfhosted|frontdoor|openziti|zrok|zlan)/)) {
redirects.push(`/docs${existingPath}`);
}
// Migration: redirect old /onprem/* paths to /selfhosted/*
if (existingPath.startsWith('/selfhosted/')) {
redirects.push(existingPath.replace('/selfhosted/', '/onprem/'));
}
return redirects.length > 0 ? redirects : undefined;
},
},
],
Expand All @@ -365,7 +393,7 @@ const config: Config = {
themeConfig: {
docs: {
sidebar: {
hideable: false,
hideable: false,
autoCollapseCategories: true
}
},
Expand All @@ -386,7 +414,7 @@ const config: Config = {
label: 'Docs',
position: 'left',
items: [
{ to: '/onprem/intro', label: 'On-Prem' },
{ to: '/selfhosted/intro', label: 'Self-Hosted' },
{ to: '/frontdoor/intro', label: 'Frontdoor' },
{ to: '/openziti/learn/introduction', label: 'OpenZiti' },
],
Expand Down Expand Up @@ -442,4 +470,4 @@ const config: Config = {
],
};

export default config;
export default config;
10 changes: 5 additions & 5 deletions unified-doc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,31 @@
"vrt:generate": "node scripts/generate-vrt-scenarios.mjs all",
"vrt:generate:openziti": "node scripts/generate-vrt-scenarios.mjs openziti",
"vrt:generate:frontdoor": "node scripts/generate-vrt-scenarios.mjs frontdoor",
"vrt:generate:onprem": "node scripts/generate-vrt-scenarios.mjs onprem",
"vrt:generate:selfhosted": "node scripts/generate-vrt-scenarios.mjs selfhosted",
"vrt:generate:zrok": "node scripts/generate-vrt-scenarios.mjs zrok",
"vrt:generate:zlan": "node scripts/generate-vrt-scenarios.mjs zlan",
"vrt:generate:home": "node scripts/generate-vrt-scenarios.mjs home",
"vrt:reference:openziti": "backstop reference --config=backstop.openziti.json",
"vrt:reference:frontdoor": "backstop reference --config=backstop.frontdoor.json",
"vrt:reference:onprem": "backstop reference --config=backstop.onprem.json",
"vrt:reference:selfhosted": "backstop reference --config=backstop.selfhosted.json",
"vrt:reference:zrok": "backstop reference --config=backstop.zrok.json",
"vrt:reference:zlan": "backstop reference --config=backstop.zlan.json",
"vrt:reference:home": "backstop reference --config=backstop.home.json",
"vrt:test:openziti": "backstop test --config=backstop.openziti.json",
"vrt:test:frontdoor": "backstop test --config=backstop.frontdoor.json",
"vrt:test:onprem": "backstop test --config=backstop.onprem.json",
"vrt:test:selfhosted": "backstop test --config=backstop.selfhosted.json",
"vrt:test:zrok": "backstop test --config=backstop.zrok.json",
"vrt:test:zlan": "backstop test --config=backstop.zlan.json",
"vrt:test:home": "backstop test --config=backstop.home.json",
"vrt:approve:openziti": "backstop approve --config=backstop.openziti.json",
"vrt:approve:frontdoor": "backstop approve --config=backstop.frontdoor.json",
"vrt:approve:onprem": "backstop approve --config=backstop.onprem.json",
"vrt:approve:selfhosted": "backstop approve --config=backstop.selfhosted.json",
"vrt:approve:zrok": "backstop approve --config=backstop.zrok.json",
"vrt:approve:zlan": "backstop approve --config=backstop.zlan.json",
"vrt:approve:home": "backstop approve --config=backstop.home.json",
"vrt:report:openziti": "backstop openReport --config=backstop.openziti.json",
"vrt:report:frontdoor": "backstop openReport --config=backstop.frontdoor.json",
"vrt:report:onprem": "backstop openReport --config=backstop.onprem.json",
"vrt:report:selfhosted": "backstop openReport --config=backstop.selfhosted.json",
"vrt:report:zrok": "backstop openReport --config=backstop.zrok.json",
"vrt:report:zlan": "backstop openReport --config=backstop.zlan.json",
"vrt:report:home": "backstop openReport --config=backstop.home.json",
Expand Down
12 changes: 6 additions & 6 deletions unified-doc/scripts/generate-vrt-scenarios.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Usage:
* node scripts/generate-vrt-scenarios.mjs [product]
*
* Products: openziti, frontdoor, onprem, zrok, zlan, home, all
* Products: openziti, frontdoor, selfhosted, zrok, zlan, home, all
*
* Examples:
* node scripts/generate-vrt-scenarios.mjs openziti # Only OpenZiti pages
Expand Down Expand Up @@ -40,10 +40,10 @@ const PRODUCTS = {
pattern: /\/frontdoor\//,
include: (url) => url.includes('/frontdoor/')
},
onprem: {
label: 'On-Prem',
pattern: /\/onprem\//,
include: (url) => url.includes('/onprem/')
selfhosted: {
label: 'Self-Hosted',
pattern: /\/selfhosted\//,
include: (url) => url.includes('/selfhosted/')
},
zrok: {
label: 'zrok',
Expand Down Expand Up @@ -96,7 +96,7 @@ function categorizeUrls(urls) {
home: [],
openziti: [],
frontdoor: [],
onprem: [],
selfhosted: [],
zrok: [],
zlan: [],
other: []
Expand Down
2 changes: 1 addition & 1 deletion unified-doc/scripts/vrt-run.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const [,, action, product, flag] = process.argv;

if (!action || !product) {
console.error('[VRT] Usage: vrt-run.mjs <reference|test|approve> <product> [--filter]');
console.error('[VRT] Products: home, openziti, frontdoor, onprem, zrok, zlan');
console.error('[VRT] Products: home, openziti, frontdoor, selfhosted, zrok, zlan');
process.exit(1);
}

Expand Down
4 changes: 2 additions & 2 deletions unified-doc/src/components/ProductSearch.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
.badge{padding:.16rem .55rem;border-radius:999px;font-size:.72rem;border:1px solid var(--ifm-color-emphasis-300)}
.p_frontdoor{background:#e8f3ff;border-color:#c6e1ff;color:#145ea8}
.p_openziti{background:#e9fff3;border-color:#c8f2df;color:#0d7a4e}
.p_onprem{background:#fff3e8;border-color:#ffdcbf;color:#9a4d00}
.p_selfhosted{background:#fff3e8;border-color:#ffdcbf;color:#9a4d00}
.p_zlan{background:#f1edff;border-color:#d9d0ff;color:#5335b7}

/* ===== Pagination ===== */
Expand Down Expand Up @@ -172,7 +172,7 @@
border-color: #c8f2df;
color: #0d7a4e;
}
.pill.active[data-product="onprem"] {
.pill.active[data-product="selfhosted"] {
background: #fff3e8;
border-color: #ffdcbf;
color: #9a4d00;
Expand Down
2 changes: 1 addition & 1 deletion unified-doc/src/components/ProductSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export default function ProductSearch({
appId,
apiKey,
indexName,
products = ["frontdoor", "openziti", "onprem", "zlan", "zrok"],
products = ["frontdoor", "openziti", "selfhosted", "zlan", "zrok"],
extraContainerClasses = [],
}: Props) {
// read initial pill from ?product= for back/forward + shareable URLs
Expand Down
6 changes: 3 additions & 3 deletions unified-doc/src/components/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import React from "react";
export const unifiedFooter = {
...defaultNetFoundryFooterProps(),
description:
'Cloud isnt always viable. NetFoundry On-Prem™ lets you control and manage your own OpenZiti overlay network.',
'Cloud isn\'t always viable. NetFoundry Self-Hosted™ lets you control and manage your own OpenZiti overlay network.',
socialProps: {
...defaultSocialProps,
githubUrl: 'https://github.com/netfoundry/',
Expand All @@ -13,10 +13,10 @@ export const unifiedFooter = {
twitterUrl: 'https://twitter.com/netfoundry/',
},
documentationLinks: [
<a key="new" href="/installation">Getting Starteda 4</a>
<a key="new" href="/installation">Getting Started</a>
],
communityLinks: [
<a key="new" href="/installation">Getting Startedb 5</a>
<a key="new" href="/installation">Getting Started</a>
],
resourceLinks: [
<a href="https://blog.openziti.io">OpenZiti Tech Blog</a>,
Expand Down
Loading