diff --git a/website/_redirects b/website/_redirects
index 1715a03a9..f4469df5f 100644
--- a/website/_redirects
+++ b/website/_redirects
@@ -274,34 +274,36 @@
# Guides
# Reorganized Guides by Persona
-/guides/autopilot.html /guides/operations/autopilot
-/guides/autopilot /guides/operations/autopilot
-/guides/cluster/automatic.html /guides/operations/cluster/automatic
-/guides/cluster/automatic /guides/operations/cluster/automatic
-/guides/cluster/bootstrapping.html /guides/operations/cluster/bootstrapping
-/guides/cluster/bootstrapping /guides/operations/cluster/bootstrapping
-/guides/cluster/manual.html /guides/operations/cluster/manual
-/guides/cluster/manual /guides/operations/cluster/manual
-/guides/cluster/federation /guides/operations/federation
-/guides/cluster/requirements /guides/operations/requirements
-/guides/nomad-metrics.html /guides/operations/monitoring/nomad-metrics
-/guides/nomad-metrics /guides/operations/monitoring/nomad-metrics
-/guides/node-draining.html /guides/operations/node-draining
-/guides/node-draining /guides/operations/node-draining
-/guides/outage.html /guides/operations/outage
-/guides/outage /guides/operations/outage
-/guides/acl.html /guides/security/acl
-/guides/acl /guides/security/acl
-/guides/namespaces.html https://learn.hashicorp.com/nomad/governance-and-policy/namespaces
-/guides/namespaces https://learn.hashicorp.com/nomad/governance-and-policy/namespaces
-/guides/quotas.html https://learn.hashicorp.com/nomad/governance-and-policy/quotas
-/guides/quotas https://learn.hashicorp.com/nomad/governance-and-policy/quotas
-/guides/securing-nomad.html /guides/security/securing-nomad
-/guides/securing-nomad /guides/security/securing-nomad
-/guides/sentinel-policy.html https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
-/guides/sentinel-policy https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
-/guides/sentinel/job.html https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
-/guides/sentinel/job https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
+/guides/autopilot.html /guides/operations/autopilot
+/guides/autopilot /guides/operations/autopilot
+/guides/cluster/automatic.html /guides/operations/cluster/automatic
+/guides/cluster/automatic /guides/operations/cluster/automatic
+/guides/cluster/bootstrapping.html /guides/operations/cluster
+/guides/cluster/bootstrapping /guides/operations/cluster
+/guides/operations/cluster/bootstrapping.html /guides/operations/cluster
+/guides/operations/cluster/bootstrapping /guides/operations/cluster
+/guides/cluster/manual.html /guides/operations/cluster/manual
+/guides/cluster/manual /guides/operations/cluster/manual
+/guides/cluster/federation /guides/operations/federation
+/guides/cluster/requirements /guides/operations/requirements
+/guides/nomad-metrics.html /guides/operations/monitoring/nomad-metrics
+/guides/nomad-metrics /guides/operations/monitoring/nomad-metrics
+/guides/node-draining.html /guides/operations/node-draining
+/guides/node-draining /guides/operations/node-draining
+/guides/outage.html /guides/operations/outage
+/guides/outage /guides/operations/outage
+/guides/acl.html /guides/security/acl
+/guides/acl /guides/security/acl
+/guides/namespaces.html https://learn.hashicorp.com/nomad/governance-and-policy/namespaces
+/guides/namespaces https://learn.hashicorp.com/nomad/governance-and-policy/namespaces
+/guides/quotas.html https://learn.hashicorp.com/nomad/governance-and-policy/quotas
+/guides/quotas https://learn.hashicorp.com/nomad/governance-and-policy/quotas
+/guides/securing-nomad.html /guides/security/securing-nomad
+/guides/securing-nomad /guides/security/securing-nomad
+/guides/sentinel-policy.html https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
+/guides/sentinel-policy https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
+/guides/sentinel/job.html https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
+/guides/sentinel/job https://learn.hashicorp.com/nomad/governance-and-policy/sentinel
/guides/analytical-workloads/spark/spark.html /guides/analytical-workloads/spark
/guides/analytical-workloads/spark/spark /guides/analytical-workloads/spark
diff --git a/website/components/before-after-diagram/img/alert-icon.svg b/website/components/before-after-diagram/img/alert-icon.svg
deleted file mode 100644
index 072e687cd..000000000
--- a/website/components/before-after-diagram/img/alert-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/before-after-diagram/img/alert-triangle.svg b/website/components/before-after-diagram/img/alert-triangle.svg
deleted file mode 100644
index c3e948346..000000000
--- a/website/components/before-after-diagram/img/alert-triangle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/before-after-diagram/img/check-circle-blue.svg b/website/components/before-after-diagram/img/check-circle-blue.svg
deleted file mode 100644
index d29658955..000000000
--- a/website/components/before-after-diagram/img/check-circle-blue.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/before-after-diagram/img/check-circle.svg b/website/components/before-after-diagram/img/check-circle.svg
deleted file mode 100644
index e029eaacc..000000000
--- a/website/components/before-after-diagram/img/check-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/website/components/before-after-diagram/img/check-icon.svg b/website/components/before-after-diagram/img/check-icon.svg
deleted file mode 100644
index 98e39a99d..000000000
--- a/website/components/before-after-diagram/img/check-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/before-after-diagram/index.jsx b/website/components/before-after-diagram/index.jsx
deleted file mode 100644
index ccbe50f20..000000000
--- a/website/components/before-after-diagram/index.jsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import marked from 'marked'
-import Image from '@hashicorp/react-image'
-import alertIcon from './img/alert-icon.svg?include'
-import checkIcon from './img/check-icon.svg?include'
-
-function BeforeAfterDiagram(props) {
- const markedOptions = generateMarkedOptions()
- const {
- theme,
- beforeHeadline,
- beforeContent,
- beforeImage,
- afterHeadline,
- afterContent,
- afterImage
- } = props
- return (
-
-
-
-
-
-
-
-
-
-
- {beforeHeadline && (
-
- )}
- {beforeContent && (
-
- )}
-
-
-
-
-
-
-
-
- {afterHeadline && (
-
- )}
- {afterContent && (
-
- )}
-
-
-
-
- )
-}
-
-export default BeforeAfterDiagram
-
-function generateMarkedOptions() {
- const markedRenderer = new marked.Renderer()
-
- markedRenderer.heading = function(text, level) {
- return `${text}`
- }
- markedRenderer.paragraph = function(text) {
- return `${text}
`
- }
- markedRenderer.list = function(text) {
- return ``
- }
-
- return { renderer: markedRenderer }
-}
diff --git a/website/components/before-after-diagram/style.css b/website/components/before-after-diagram/style.css
deleted file mode 100644
index 385f97629..000000000
--- a/website/components/before-after-diagram/style.css
+++ /dev/null
@@ -1,307 +0,0 @@
-.g-before-after-diagrams {
- display: flex;
- flex-wrap: wrap;
- margin: 0 -16px;
- position: relative;
-
- @media (max-width: 1023px) {
- margin-left: -12px;
- margin-right: -12px;
- }
-
- @media (max-width: 767px) {
- flex-direction: column;
- margin-left: 40px;
- margin-right: 0;
- }
-
- & > div {
- display: flex;
- flex-direction: column;
- margin: 0 16px;
- position: relative;
- width: calc(50% - 32px);
-
- @media (max-width: 1023px) {
- margin: 0 12px;
- width: calc(50% - 24px);
- }
-
- @media (max-width: 767px) {
- margin: 0;
- width: 100%;
- }
- }
-
- & .before {
- @media (max-width: 767px) {
- margin-bottom: 62px;
- }
-
- & li:before {
- background: url('/img/icons/alert-triangle.svg');
- height: 20px;
- margin-top: 3px;
- width: 20px;
- }
- }
-
- & .after li:before {
- background: url('/img/icons/check-circle.svg');
- height: 18px;
- margin-top: 4px;
- width: 18px;
- }
-
- & .image {
- align-items: center;
- display: flex;
- height: 320px;
- justify-content: center;
- margin-bottom: 96px;
-
- @media (max-width: 767px) {
- margin-bottom: 40px;
- }
-
- @media (max-width: 640px) {
- height: 284px;
- }
-
- @media (max-width: 540px) {
- height: 238px;
- }
-
- @media (max-width: 480px) {
- height: 211px;
- }
-
- @media (max-width: 375px) {
- height: 163px;
- }
-
- & div {
- height: 100%;
- text-align: center;
- width: 100%;
- }
-
- & img,
- & svg {
- max-height: 100%;
- max-width: 100%;
- }
- }
-
- & .content {
- border: 1px solid var(--DEPRECATED-gray-9);
- padding: 24px 32px 20px;
- position: relative;
- flex-grow: 1;
-
- @media (max-width: 1023px) {
- padding-left: 24px;
- padding-right: 24px;
- }
-
- @media (max-width: 767px) {
- padding-left: 20px;
- padding-right: 20px;
- }
-
- &:before,
- &:after {
- bottom: 100%;
- border: solid transparent;
- content: '';
- height: 0;
- left: 50%;
- width: 0;
- position: absolute;
- pointer-events: none;
- }
-
- &:before {
- border-color: rgba(229, 230, 235, 0);
- border-bottom-color: var(--DEPRECATED-gray-9);
- border-width: 18px;
- margin-left: -18px;
- }
-
- &:after {
- border-color: rgba(255, 255, 255, 0);
- border-bottom-color: var(--white);
- border-width: 17px;
- margin-left: -17px;
- }
-
- & > div {
- height: 100%;
-
- &.line {
- height: auto;
- }
-
- & > div {
- @media (min-width: 768px) {
- max-width: 480px;
- margin: 0 auto;
- }
- }
- }
- }
-
- & h3 {
- border-bottom: 1px solid var(--DEPRECATED-gray-9);
- color: var(--black);
- margin: 0 0 24px;
- padding-bottom: 24px;
- text-align: center;
- }
-
- & h4 {
- display: block;
- margin: 24px 0 26px;
- text-transform: uppercase;
- }
-
- & ul {
- list-style: none;
- padding-left: 32px;
- position: relative;
- }
-
- & li {
- margin: 8px 0;
-
- &:before {
- background-repeat: no-repeat;
- content: '';
- left: 0;
- position: absolute;
- }
- }
-
- & .line {
- padding: 0;
- position: absolute;
- right: 0;
- top: -75px;
- width: 100%;
-
- @media (max-width: 767px) {
- left: -28px;
- height: 100%;
- right: auto;
- top: 28px;
- width: auto;
- }
-
- & span {
- display: block;
- height: 1px;
- position: absolute;
- top: 12px;
- width: calc(100% - 14px);
-
- @media (max-width: 767px) {
- width: 1px;
- }
-
- &:first-child {
- background-image: linear-gradient(
- 90deg,
- rgba(210, 212, 219, 0) 0%,
- var(--DEPRECATED-gray-8) 100%
- );
- right: calc(50% + 20px);
- width: calc(50% + 140px);
-
- @media (max-width: 767px) {
- background-image: linear-gradient(
- 180deg,
- rgba(210, 212, 219, 0) 0%,
- var(--DEPRECATED-gray-8) 100%
- );
- height: 245px;
- right: auto;
- top: -253px;
- width: 1px;
- }
- }
-
- &:last-child {
- background-image: linear-gradient(
- 90deg,
- var(--DEPRECATED-gray-8) 0%,
- var(--black) 100%
- );
- left: calc(50% + 20px);
-
- @media (max-width: 767px) {
- background-image: linear-gradient(
- 180deg,
- var(--DEPRECATED-gray-8) 0%,
- var(--black) 100%
- );
- height: calc(100% + 375px);
- left: auto;
- top: 32px;
- }
-
- @media (max-width: 640px) {
- height: calc(100% + 339px);
- }
-
- @media (max-width: 540px) {
- height: calc(100% + 293px);
- }
-
- @media (max-width: 480px) {
- height: calc(100% + 266px);
- }
-
- @media (max-width: 375px) {
- height: calc(100% + 218px);
- }
-
- &:after {
- border-color: transparent transparent transparent #000000;
- border-style: solid;
- border-width: 5.5px 0 5.5px 8px;
- content: '';
- height: 0;
- position: absolute;
- right: -8px;
- top: -5px;
- width: 0;
-
- @media (max-width: 767px) {
- transform: rotate(90deg);
- top: auto;
- bottom: -8px;
- right: -4px;
- }
- }
- }
- }
-
- & svg {
- position: absolute;
- left: 50%;
- margin: 0 0 0 -11px;
- }
- }
-
- /*
- * VAULT THEME
- */
- &.vault {
- & .after {
- & li:before {
- background: url('/img/icons/check-circle-blue.svg');
- height: 19px;
- }
- }
- }
-}
diff --git a/website/package-lock.json b/website/package-lock.json
index 14e09e7b4..3a1f50d54 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -6591,6 +6591,12 @@
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
"integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug=="
},
+ "dart-linkcheck": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/dart-linkcheck/-/dart-linkcheck-2.0.12.tgz",
+ "integrity": "sha512-ReLhme4n6r1v47QcZgkz0yxrJ8qkSRMaHwichzK96OdwOMZ9DY4hHfHAnsLh2vU1rnYCwaVfo1LwwdnAM+nrzw==",
+ "dev": true
+ },
"date-fns": {
"version": "1.30.1",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
diff --git a/website/package.json b/website/package.json
index ce40c3f03..0a1d4ea97 100644
--- a/website/package.json
+++ b/website/package.json
@@ -40,6 +40,7 @@
"stringify-object": "^3.3.0"
},
"devDependencies": {
+ "dart-linkcheck": "^2.0.12",
"glob": "^7.1.6",
"husky": "^4.2.1",
"inquirer": "^7.0.4",
@@ -59,6 +60,7 @@
"generate:component": "next-hashicorp generate component",
"lint": "next-hashicorp lint",
"start": "rm -rf .next/cache/next-babel-loader/ && next dev",
- "static": "npm run build && npm run export && cp _redirects out/."
+ "static": "npm run build && npm run export && cp _redirects out/.",
+ "linkcheck": "linkcheck https://www.nomadproject.io"
}
}