diff --git a/components/related-roadmaps.tsx b/components/related-roadmaps.tsx index 4600babb9..a69a44e64 100644 --- a/components/related-roadmaps.tsx +++ b/components/related-roadmaps.tsx @@ -5,6 +5,18 @@ type RelatedRoadmapsProps = { roadmaps: RoadmapType[]; }; +const colorsList = [ + 'gray.700', + 'purple.700', + 'blue.700', + 'red.700', + 'green.700', + 'teal.700', + 'yellow.700', + 'cyan.700', + 'pink.700' +]; + export function RelatedRoadmaps(props: RelatedRoadmapsProps) { const { roadmaps } = props; if (!roadmaps.length) { @@ -16,21 +28,44 @@ export function RelatedRoadmaps(props: RelatedRoadmapsProps) { - Other Related Roadmaps + Related Roadmaps - - { roadmaps.map(roadmap => ( - - { roadmap.featuredTitle } - { roadmap.featuredDescription } + {roadmaps.map((roadmap, counter) => ( + + + {roadmap.featuredTitle} + + {roadmap.featuredDescription} ))} diff --git a/content/roadmaps.json b/content/roadmaps.json index 07bb34318..1262f2ca5 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -46,6 +46,13 @@ "resourcesPath": "/roadmaps/100-frontend/resources.md", "pdfUrl": "/pdfs/frontend.pdf", "contentPathsFilePath": "/roadmaps/100-frontend/content-paths.json", + "relatedRoadmaps": [ + "javascript", + "nodejs", + "react", + "angular", + "vue" + ], "id": "frontend", "metaPath": "/roadmaps/100-frontend/meta.json", "isUpcoming": false @@ -96,6 +103,15 @@ }, "pdfUrl": "/pdfs/backend.pdf", "contentPathsFilePath": "/roadmaps/101-backend/content-paths.json", + "relatedRoadmaps": [ + "python", + "java", + "golang", + "devops", + "javascript", + "nodejs", + "postgresql-dba" + ], "id": "backend", "metaPath": "/roadmaps/101-backend/meta.json", "isUpcoming": false @@ -145,6 +161,14 @@ }, "pdfUrl": "/pdfs/devops.pdf", "contentPathsFilePath": "/roadmaps/102-devops/content-paths.json", + "relatedRoadmaps": [ + "backend", + "python", + "java", + "golang", + "javascript", + "nodejs" + ], "id": "devops", "metaPath": "/roadmaps/102-devops/meta.json", "isUpcoming": false @@ -190,6 +214,13 @@ }, "pdfUrl": "/pdfs/react.pdf", "contentPathsFilePath": "/roadmaps/103-react/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "javascript", + "angular", + "vue", + "nodejs" + ], "id": "react", "metaPath": "/roadmaps/103-react/meta.json", "isUpcoming": false @@ -233,6 +264,13 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/angular.pdf", + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "vue", + "nodejs" + ], "id": "angular", "metaPath": "/roadmaps/104-angular/meta.json", "isUpcoming": false @@ -288,6 +326,13 @@ }, "pdfUrl": "/pdfs/vue.pdf", "contentPathsFilePath": "/roadmaps/105-vue/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "angular", + "nodejs" + ], "id": "vue", "metaPath": "/roadmaps/105-vue/meta.json", "isUpcoming": false @@ -336,6 +381,15 @@ }, "pdfUrl": "/pdfs/javascript.pdf", "contentPathsFilePath": "/roadmaps/106-javascript/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "react", + "angular", + "vue", + "nodejs" + ], "id": "javascript", "metaPath": "/roadmaps/106-javascript/meta.json", "isUpcoming": false @@ -378,6 +432,12 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "nodejs" + ], "id": "android", "metaPath": "/roadmaps/107-android/meta.json", "isUpcoming": false @@ -450,6 +510,14 @@ "jsonUrl": "/project/nodejs.json", "pdfUrl": "/pdfs/nodejs.pdf", "contentPathsFilePath": "/roadmaps/107-nodejs/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "react", + "angular", + "vue" + ], "id": "nodejs", "metaPath": "/roadmaps/107-nodejs/meta.json", "isUpcoming": false @@ -491,6 +559,14 @@ "url": "https://twitter.com/kamranahmedse" }, "contentPathsFilePath": "/roadmaps/108-python/content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "golang", + "java", + "javascript", + "nodejs" + ], "id": "python", "metaPath": "/roadmaps/108-python/meta.json", "isUpcoming": false @@ -545,6 +621,14 @@ "url": "https://twitter.com/kamranahmedse" }, "contentPathsFilePath": "/roadmaps/109-golang/content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "python", + "java", + "javascript", + "nodejs" + ], "id": "golang", "metaPath": "/roadmaps/109-golang/meta.json" }, @@ -597,6 +681,14 @@ }, "pdfUrl": "/pdfs/java.pdf", "contentPathsFilePath": "/roadmaps/110-java/content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "python", + "golang", + "javascript", + "nodejs" + ], "id": "java", "metaPath": "/roadmaps/110-java/meta.json" }, @@ -641,6 +733,10 @@ "featured": true, "detailed": false, "versions": [], + "relatedRoadmaps": [ + "backend", + "devops" + ], "id": "postgresql-dba", "metaPath": "/roadmaps/111-postgresql-dba/meta.json", "isUpcoming": false @@ -694,6 +790,15 @@ }, "pdfUrl": "/pdfs/blockchain.pdf", "contentPathsFilePath": "/roadmaps/112-blockchain/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "nodejs", + "react", + "vue", + "angular" + ], "id": "blockchain", "metaPath": "/roadmaps/112-blockchain/meta.json", "isUpcoming": false @@ -733,6 +838,13 @@ "url": "https://github.com/anas-qa" }, "contentPathsFilePath": "/roadmaps/113-qa/content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "devops", + "javascript", + "nodejs" + ], "id": "qa", "metaPath": "/roadmaps/113-qa/meta.json", "isUpcoming": false diff --git a/content/roadmaps/100-frontend/meta.json b/content/roadmaps/100-frontend/meta.json index bfe495353..0563fcaf0 100644 --- a/content/roadmaps/100-frontend/meta.json +++ b/content/roadmaps/100-frontend/meta.json @@ -44,5 +44,12 @@ "jsonUrl": "/project/frontend.json", "resourcesPath": "./resources.md", "pdfUrl": "/pdfs/frontend.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "javascript", + "nodejs", + "react", + "angular", + "vue" + ] } diff --git a/content/roadmaps/101-backend/meta.json b/content/roadmaps/101-backend/meta.json index eee5afff9..80c4f6e63 100644 --- a/content/roadmaps/101-backend/meta.json +++ b/content/roadmaps/101-backend/meta.json @@ -43,5 +43,14 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/backend.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "python", + "java", + "golang", + "devops", + "javascript", + "nodejs", + "postgresql-dba" + ] } diff --git a/content/roadmaps/102-devops/meta.json b/content/roadmaps/102-devops/meta.json index 211b0f919..78ff4e8e2 100644 --- a/content/roadmaps/102-devops/meta.json +++ b/content/roadmaps/102-devops/meta.json @@ -42,5 +42,13 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/devops.pdf", - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "backend", + "python", + "java", + "golang", + "javascript", + "nodejs" + ] +} diff --git a/content/roadmaps/103-react/meta.json b/content/roadmaps/103-react/meta.json index c8468088e..50216ceca 100644 --- a/content/roadmaps/103-react/meta.json +++ b/content/roadmaps/103-react/meta.json @@ -38,5 +38,12 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/react.pdf", - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "javascript", + "angular", + "vue", + "nodejs" + ] +} diff --git a/content/roadmaps/104-angular/meta.json b/content/roadmaps/104-angular/meta.json index 987c30f19..fa9de274e 100644 --- a/content/roadmaps/104-angular/meta.json +++ b/content/roadmaps/104-angular/meta.json @@ -36,5 +36,12 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, - "pdfUrl": "/pdfs/angular.pdf" + "pdfUrl": "/pdfs/angular.pdf", + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "vue", + "nodejs" + ] } diff --git a/content/roadmaps/105-vue/meta.json b/content/roadmaps/105-vue/meta.json index 65ed6f5c6..6201724a5 100644 --- a/content/roadmaps/105-vue/meta.json +++ b/content/roadmaps/105-vue/meta.json @@ -48,5 +48,12 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/vue.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "angular", + "nodejs" + ] } diff --git a/content/roadmaps/106-javascript/meta.json b/content/roadmaps/106-javascript/meta.json index 615d51760..b57991aa3 100644 --- a/content/roadmaps/106-javascript/meta.json +++ b/content/roadmaps/106-javascript/meta.json @@ -41,5 +41,14 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/javascript.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "react", + "angular", + "vue", + "nodejs" + ] } diff --git a/content/roadmaps/107-android/meta.json b/content/roadmaps/107-android/meta.json index 83f224d7d..f775bb144 100644 --- a/content/roadmaps/107-android/meta.json +++ b/content/roadmaps/107-android/meta.json @@ -35,5 +35,11 @@ "author": { "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" - } + }, + "relatedRoadmaps": [ + "frontend", + "javascript", + "react", + "nodejs" + ] } diff --git a/content/roadmaps/107-nodejs/meta.json b/content/roadmaps/107-nodejs/meta.json index baa18b28b..99f61afe8 100644 --- a/content/roadmaps/107-nodejs/meta.json +++ b/content/roadmaps/107-nodejs/meta.json @@ -65,5 +65,13 @@ "imageUrl": "/roadmaps/nodejs.png", "jsonUrl": "/project/nodejs.json", "pdfUrl": "/pdfs/nodejs.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "react", + "angular", + "vue" + ] } diff --git a/content/roadmaps/108-python/meta.json b/content/roadmaps/108-python/meta.json index c479636ab..90caa57a9 100644 --- a/content/roadmaps/108-python/meta.json +++ b/content/roadmaps/108-python/meta.json @@ -34,5 +34,13 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "golang", + "java", + "javascript", + "nodejs" + ] +} diff --git a/content/roadmaps/109-golang/meta.json b/content/roadmaps/109-golang/meta.json index 6fc88387e..706f357f9 100644 --- a/content/roadmaps/109-golang/meta.json +++ b/content/roadmaps/109-golang/meta.json @@ -47,5 +47,13 @@ "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" }, - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "python", + "java", + "javascript", + "nodejs" + ] +} diff --git a/content/roadmaps/110-java/meta.json b/content/roadmaps/110-java/meta.json index 913f75d13..bc4542a7c 100644 --- a/content/roadmaps/110-java/meta.json +++ b/content/roadmaps/110-java/meta.json @@ -46,5 +46,13 @@ "url": "https://twitter.com/kamranahmedse" }, "pdfUrl": "/pdfs/java.pdf", - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "backend", + "devops", + "python", + "golang", + "javascript", + "nodejs" + ] +} diff --git a/content/roadmaps/111-postgresql-dba/meta.json b/content/roadmaps/111-postgresql-dba/meta.json index 9e87ff450..1e19557ab 100644 --- a/content/roadmaps/111-postgresql-dba/meta.json +++ b/content/roadmaps/111-postgresql-dba/meta.json @@ -38,5 +38,9 @@ "isTextHeavy": true, "featured": true, "detailed": false, - "versions": [] + "versions": [], + "relatedRoadmaps": [ + "backend", + "devops" + ] } diff --git a/content/roadmaps/112-blockchain/meta.json b/content/roadmaps/112-blockchain/meta.json index 33cd3b69f..ea5a9d271 100644 --- a/content/roadmaps/112-blockchain/meta.json +++ b/content/roadmaps/112-blockchain/meta.json @@ -46,5 +46,14 @@ "url": "https://twitter.com/danielgruesso" }, "pdfUrl": "/pdfs/blockchain.pdf", - "contentPathsFilePath": "./content-paths.json" + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "javascript", + "nodejs", + "react", + "vue", + "angular" + ] } diff --git a/content/roadmaps/113-qa/meta.json b/content/roadmaps/113-qa/meta.json index 303efcf9d..b9be1ea0c 100644 --- a/content/roadmaps/113-qa/meta.json +++ b/content/roadmaps/113-qa/meta.json @@ -32,5 +32,12 @@ "name": "Anas Fitiani", "url": "https://github.com/anas-qa" }, - "contentPathsFilePath": "./content-paths.json" -} \ No newline at end of file + "contentPathsFilePath": "./content-paths.json", + "relatedRoadmaps": [ + "frontend", + "backend", + "devops", + "javascript", + "nodejs" + ] +} diff --git a/lib/roadmap.ts b/lib/roadmap.ts index 5ce067ec1..c8550362d 100644 --- a/lib/roadmap.ts +++ b/lib/roadmap.ts @@ -14,7 +14,7 @@ export type RoadmapType = { name: string; url: string; }; - type: "role" | "tool"; + type: 'role' | 'tool'; featured: boolean; imageUrl?: string; jsonUrl?: string; @@ -27,6 +27,7 @@ export type RoadmapType = { isUpcoming: boolean; id: string; pdfUrl?: string; + relatedRoadmaps?: string[]; }; export function getRoadmapById(id: string): RoadmapType | undefined { @@ -37,6 +38,10 @@ export function getAllRoadmaps(): RoadmapType[] { return roadmaps as RoadmapType[]; } +export function filterRoadmapsByIds(ids: string[]): RoadmapType[] { + return (roadmaps as RoadmapType[]).filter(roadmap => ids.includes(roadmap.id)); +} + export function getFeaturedRoadmaps(): RoadmapType[] { const roadmaps: RoadmapType[] = getAllRoadmaps(); diff --git a/pages/[roadmap]/index.tsx b/pages/[roadmap]/index.tsx index 8447b81b2..be19e6bef 100644 --- a/pages/[roadmap]/index.tsx +++ b/pages/[roadmap]/index.tsx @@ -3,7 +3,13 @@ import { Box, Button, Container, Flex, Heading, Image, Input, Text } from '@chak import { GlobalHeader } from '../../components/global-header'; import { OpensourceBanner } from '../../components/opensource-banner'; import { Footer } from '../../components/footer'; -import { getAllRoadmaps, getRoadmapById, isInteractiveRoadmap, RoadmapType } from '../../lib/roadmap'; +import { + filterRoadmapsByIds, + getAllRoadmaps, + getRoadmapById, + isInteractiveRoadmap, + RoadmapType +} from '../../lib/roadmap'; import MdRenderer from '../../components/md-renderer'; import Helmet from '../../components/helmet'; import { RoadmapPageHeader } from '../../components/roadmap/roadmap-page-header'; @@ -65,11 +71,12 @@ function UpcomingRoadmap(props: RoadmapProps) { - Upcoming Roadmap + Upcoming Roadmap Please check back later or subscribe below.
- +
@@ -77,8 +84,12 @@ function UpcomingRoadmap(props: RoadmapProps) { ); } -export default function Roadmap(props: RoadmapProps) { - const { roadmap } = props; +type RoadmapPageProps = RoadmapProps & { + relatedRoadmaps: RoadmapType[] +}; + +export default function Roadmap(props: RoadmapPageProps) { + const { roadmap, relatedRoadmaps } = props; return ( @@ -89,13 +100,13 @@ export default function Roadmap(props: RoadmapProps) { keywords={roadmap?.seo.keywords || []} roadmap={roadmap} /> - + - +