From a3688ea94858d5aedcd1b6a239d85ead3f0e1e76 Mon Sep 17 00:00:00 2001
From: Kamran Ahmed <kamranahmed.se@gmail.com>
Date: Sun, 14 Aug 2022 18:37:09 +0400
Subject: [PATCH] Add email collection on the upcoming roadmaps

---
 content/roadmaps.json                |  1 -
 content/roadmaps/112-qa/landscape.md | 11 -------
 content/roadmaps/112-qa/meta.json    |  1 -
 pages/[roadmap]/index.tsx            | 45 +++++++++++++++++++++-------
 pages/signup.tsx                     | 12 ++++----
 public/sitemap.xml                   | 10 +++----
 6 files changed, 47 insertions(+), 33 deletions(-)
 delete mode 100644 content/roadmaps/112-qa/landscape.md

diff --git a/content/roadmaps.json b/content/roadmaps.json
index 7ae3828b4..e4a5880f3 100644
--- a/content/roadmaps.json
+++ b/content/roadmaps.json
@@ -550,7 +550,6 @@
     "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2022",
     "isUpcoming": true,
     "featured": true,
-    "landingPath": "/roadmaps/112-qa/landscape.md",
     "resourcesPath": "/roadmaps/112-qa/resources.md",
     "author": {
       "name": "Anas Fitiani",
diff --git a/content/roadmaps/112-qa/landscape.md b/content/roadmaps/112-qa/landscape.md
deleted file mode 100644
index 75ceb7a41..000000000
--- a/content/roadmaps/112-qa/landscape.md
+++ /dev/null
@@ -1,11 +0,0 @@
-> **Roadmap is not ready yet**. Please check back later or [subscribe to get notified](/signup).
-
-While we prepare the roadmap, follow this simple advice to learn anything
-
-> Just **pick a project and start working on it**, you will learn all that you need along the way.
-
-**&rarr;** &nbsp; [All Roadmaps](/roadmaps) &nbsp;&bull;&nbsp; [Programming guides](/guides) &nbsp;&bull;&nbsp; [Subscribe](/signup) 
-
-
-
- 
diff --git a/content/roadmaps/112-qa/meta.json b/content/roadmaps/112-qa/meta.json
index 8f3b8706b..5a09cd66c 100644
--- a/content/roadmaps/112-qa/meta.json
+++ b/content/roadmaps/112-qa/meta.json
@@ -24,7 +24,6 @@
   "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2022",
   "isUpcoming": true,
   "featured": true,
-  "landingPath": "./landscape.md",
   "resourcesPath": "./resources.md",
   "author": {
     "name": "Anas Fitiani",
diff --git a/pages/[roadmap]/index.tsx b/pages/[roadmap]/index.tsx
index e45f9947b..13a8c14e7 100644
--- a/pages/[roadmap]/index.tsx
+++ b/pages/[roadmap]/index.tsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import { Box, Container, Image } from '@chakra-ui/react';
+import { Box, Button, Container, Flex, Heading, Image, Input, Text } from '@chakra-ui/react';
 import { GlobalHeader } from '../../components/global-header';
 import { OpensourceBanner } from '../../components/opensource-banner';
 import { Footer } from '../../components/footer';
@@ -8,6 +8,8 @@ import MdRenderer from '../../components/md-renderer';
 import Helmet from '../../components/helmet';
 import { RoadmapPageHeader } from '../../components/roadmap/roadmap-page-header';
 import { InteractiveRoadmapRenderer } from './interactive';
+import { FreeSignUp, SIGNUP_EMAIL_INPUT_NAME, SIGNUP_FORM_ACTION } from '../signup';
+import { BellIcon, EmailIcon } from '@chakra-ui/icons';
 
 type RoadmapProps = {
   roadmap: RoadmapType;
@@ -25,8 +27,8 @@ function ImageRoadmap(props: RoadmapProps) {
   }
 
   return (
-    <Container maxW={'900px'} position="relative">
-      <Box mb="30px">
+    <Container maxW={'900px'} position='relative'>
+      <Box mb='30px'>
         <Image alt={roadmap.title} src={roadmap.imageUrl} />
       </Box>
     </Container>
@@ -44,7 +46,7 @@ function TextualRoadmap(props: RoadmapProps) {
   const LandingContent = require(`../../content/${normalizedPath}`).default;
 
   return (
-    <Container maxW={'container.md'} position="relative">
+    <Container maxW={'container.md'} position='relative'>
       <MdRenderer>
         <LandingContent />
       </MdRenderer>
@@ -52,11 +54,33 @@ function TextualRoadmap(props: RoadmapProps) {
   );
 }
 
+function UpcomingRoadmap(props: RoadmapProps) {
+  const { roadmap } = props;
+  if (!roadmap.isUpcoming) {
+    return null;
+  }
+
+  return (
+    <Container maxW={'container.md'} position='relative' mx='auto'>
+      <Flex flexDir='column' alignItems='center' borderWidth={1} rounded='lg' py={10} boxShadow='inner' px={5}>
+        <BellIcon w='90px' h='90px' color='gray.200' mb={5} />
+        <Heading mb={2} fontSize='2xl' >Upcoming Roadmap</Heading>
+        <Text fontSize='md' mb={4}>Please check back later or subscribe below.</Text>
+
+        <form action={SIGNUP_FORM_ACTION} method='post'>
+          <Input type='email' bg={'white'} size='lg' placeholder='Enter your email' mb={2} name={SIGNUP_EMAIL_INPUT_NAME} required />
+          <Button size='lg' isFullWidth colorScheme='teal' leftIcon={<EmailIcon />} type='submit'>Get Notified</Button>
+        </form>
+      </Flex>
+    </Container>
+  );
+}
+
 export default function Roadmap(props: RoadmapProps) {
   const { roadmap } = props;
 
   return (
-    <Box bg="white" minH="100vh">
+    <Box bg='white' minH='100vh'>
       <GlobalHeader />
       <Helmet
         title={roadmap?.seo?.title || roadmap.title}
@@ -64,10 +88,11 @@ export default function Roadmap(props: RoadmapProps) {
         keywords={roadmap?.seo.keywords || []}
         roadmap={roadmap}
       />
-      <Box mb="60px">
+      <Box mb='60px'>
         <RoadmapPageHeader roadmap={roadmap} />
         <ImageRoadmap roadmap={roadmap} />
         <TextualRoadmap roadmap={roadmap} />
+        <UpcomingRoadmap roadmap={roadmap} />
       </Box>
 
       <OpensourceBanner />
@@ -85,12 +110,12 @@ type StaticPathItem = {
 export async function getStaticPaths() {
   const roadmaps = getAllRoadmaps();
   const paramsList: StaticPathItem[] = roadmaps.map((roadmap) => ({
-    params: { roadmap: roadmap.id },
+    params: { roadmap: roadmap.id }
   }));
 
   return {
     paths: paramsList,
-    fallback: false,
+    fallback: false
   };
 }
 
@@ -105,7 +130,7 @@ export async function getStaticProps(context: ContextType) {
 
   return {
     props: {
-      roadmap: getRoadmapById(roadmapId),
-    },
+      roadmap: getRoadmapById(roadmapId)
+    }
   };
 }
diff --git a/pages/signup.tsx b/pages/signup.tsx
index 019f4ae4d..a2628b803 100644
--- a/pages/signup.tsx
+++ b/pages/signup.tsx
@@ -7,7 +7,10 @@ import { CheckCircleIcon } from '@chakra-ui/icons';
 import siteConfig from '../content/site.json';
 import Helmet from '../components/helmet';
 
-function FreeSignUp() {
+export const SIGNUP_FORM_ACTION = 'https://www.getrevue.co/profile/roadmap/add_subscriber';
+export const SIGNUP_EMAIL_INPUT_NAME = 'member[email]';
+
+export function FreeSignUp() {
   return (
     <Box p='20px' rounded='5px' borderWidth={2}>
       <Box textAlign='left'>
@@ -15,11 +18,10 @@ function FreeSignUp() {
         <Text mb='14px' fontSize='14px' lineHeight='20px'>Enter your email below to get notified about the new
           roadmaps, guides and updates</Text>
 
-        <form action='https://www.getrevue.co/profile/roadmap/add_subscriber' method='post' target='_blank'>
+        <form action={SIGNUP_FORM_ACTION} method='post' target='_blank'>
           <Input size='sm' fontSize='15px' py='18px' rounded='4px' placeholder='Your email'
-                 borderWidth={2} mb={'10px'} name='member[email]' />
-          <Button type={'submit'} bg='gray.700' _hover={{ bg: 'black' }} fontWeight={500} color={'white'}
-                  w='100%'>Subscribe</Button>
+                 borderWidth={2} mb={'10px'} name={SIGNUP_EMAIL_INPUT_NAME} />
+          <Button type={'submit'} bg='gray.700' _hover={{ bg: 'black' }} fontWeight={500} color={'white'} w='100%'>Subscribe</Button>
         </form>
 
         <Text color='gray.500' fontSize='12px' mt='10px'>
diff --git a/public/sitemap.xml b/public/sitemap.xml
index 185adc3cc..8908329b4 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -45,7 +45,7 @@
 <url>
               <loc>https://roadmap.sh/python</loc>
               <changefreq>monthly</changefreq>
-              <lastmod>2022-08-12T22:39:27.488Z</lastmod>
+              <lastmod>2022-08-12T22:51:31.431Z</lastmod>
               <priority>1.0</priority>
           </url>
 <url>
@@ -69,7 +69,7 @@
 <url>
               <loc>https://roadmap.sh/qa</loc>
               <changefreq>monthly</changefreq>
-              <lastmod>2022-08-08T14:33:53.391Z</lastmod>
+              <lastmod>2022-08-14T13:57:13.938Z</lastmod>
               <priority>1.0</priority>
           </url>
 <url>
@@ -249,13 +249,13 @@
 <url>
               <loc>https://roadmap.sh/guides</loc>
               <changefreq>monthly</changefreq>
-              <lastmod>2022-08-04T14:33:07.923Z</lastmod>
+              <lastmod>2022-08-13T19:24:17.719Z</lastmod>
               <priority>1.0</priority>
           </url>
 <url>
               <loc>https://roadmap.sh/</loc>
               <changefreq>monthly</changefreq>
-              <lastmod>2022-08-04T14:33:07.920Z</lastmod>
+              <lastmod>2022-08-13T19:24:17.721Z</lastmod>
               <priority>1.0</priority>
           </url>
 <url>
@@ -279,7 +279,7 @@
 <url>
               <loc>https://roadmap.sh/watch</loc>
               <changefreq>monthly</changefreq>
-              <lastmod>2022-08-04T14:33:17.758Z</lastmod>
+              <lastmod>2022-08-13T19:31:00.946Z</lastmod>
               <priority>1.0</priority>
           </url>
 </urlset>
\ No newline at end of file