diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 7820da656f..8823699e80 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -67,7 +67,7 @@
}
},
"2022/responsive-web-design": {
- "title": "Responsive Web Design",
+ "title": "Responsive Web Design (Beta)",
"intro": [
"In this Responsive Web Design Certification, you'll learn the languages that developers use to build webpages: HTML (Hypertext Markup Language) for content, and CSS (Cascading Style Sheets) for design.",
"First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.",
@@ -672,6 +672,8 @@
"expand": "Expand courses",
"collapse": "Collapse courses",
"legacy-header": "Legacy Courses",
- "legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning."
+ "legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning.",
+ "viewing-upcoming-change": "You are looking at a beta version of the curriculum. ",
+ "go-back-to-learn": "Go back to the stable version."
}
}
diff --git a/client/src/assets/icons/index.tsx b/client/src/assets/icons/index.tsx
index a0d9e24d4c..43898859b2 100644
--- a/client/src/assets/icons/index.tsx
+++ b/client/src/assets/icons/index.tsx
@@ -14,6 +14,7 @@ import ResponsiveDesign from './responsive-design';
import Shield from './shield';
const iconMap = {
+ [SuperBlocks.RespWebDesignNew]: ResponsiveDesign,
[SuperBlocks.RespWebDesign]: ResponsiveDesign,
[SuperBlocks.JsAlgoDataStruct]: JavaScriptIcon,
[SuperBlocks.FrontEndDevLibs]: ReactIcon,
diff --git a/client/src/components/layouts/global.css b/client/src/components/layouts/global.css
index 80ec16ee42..72b546c489 100644
--- a/client/src/components/layouts/global.css
+++ b/client/src/components/layouts/global.css
@@ -595,7 +595,9 @@ blockquote .small {
border-color: #31708f;
}
.alert .btn:hover,
-.alert .btn:focus {
+.alert .btn:focus,
+.alert a:hover,
+.alert a:hover {
background-color: #31708f;
color: #d9edf7;
border-color: #31708f;
diff --git a/client/src/resources/cert-and-project-map.ts b/client/src/resources/cert-and-project-map.ts
index 122a49e89b..e8ea47859c 100644
--- a/client/src/resources/cert-and-project-map.ts
+++ b/client/src/resources/cert-and-project-map.ts
@@ -1,7 +1,7 @@
import { SuperBlocks } from '../../../config/certification-settings';
import envData from '../../../config/env.json';
-const { showNewCurriculum } = envData;
+const { showNewCurriculum, showUpcomingChanges } = envData;
const responsiveWebBase =
'/learn/responsive-web-design/responsive-web-design-projects';
@@ -729,7 +729,8 @@ function getResponsiveWebDesignPath(
project: string,
{ showNewCurriculum }: { showNewCurriculum: boolean }
) {
- return showNewCurriculum
+ // TODO: for the hard launch, the conditional should just be `showNewCurriculum`
+ return showNewCurriculum && showUpcomingChanges
? `${responsiveWeb22Base}/${project}-project/${project}`
: `${responsiveWebBase}/${project}/`;
}
diff --git a/client/src/templates/Introduction/components/legacy-links.tsx b/client/src/templates/Introduction/components/legacy-links.tsx
new file mode 100644
index 0000000000..a55fd2b816
--- /dev/null
+++ b/client/src/templates/Introduction/components/legacy-links.tsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+import { SuperBlocks } from '../../../../../config/certification-settings';
+import { Link } from '../../../components/helpers';
+import { Alert } from '@freecodecamp/react-bootstrap';
+
+interface LegacyLinksProps {
+ superBlock: SuperBlocks;
+}
+
+function LegacyLinks({ superBlock }: LegacyLinksProps): JSX.Element {
+ const { t } = useTranslation();
+ return (
+ <>
+ {superBlock === SuperBlocks.RespWebDesignNew && (
+
+