From cb694018f9ee359a7439629ad2a1efe672b4bfd8 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 28 Jan 2020 17:48:22 +0500 Subject: [PATCH 1/6] feat: detailed roadmap preparation --- components/detailed-roadmap/index.js | 2 +- content/roadmaps.json | 45 ++++++------------- .../0-About/{0-Summary.md => 0-Landscape.md} | 0 .../{0-Summary-detailed.md => 1-Summary.md} | 0 .../{1-Skill-Summary.md => 2-Basic-Skills.md} | 0 .../{2-Job-Titles.md => 3-Job-Titles.md} | 0 .../1-Landscape/1-Junior-Developer.md | 18 -------- .../1-Landscape/2-Mid-Level-Developer.md | 0 .../1-Landscape/3-Senior-Developer.md | 0 .../1-frontend/2-Learn/1-Job-Ready.md | 18 ++++++++ content/roadmaps/1-frontend/meta.json | 3 +- content/roadmaps/2-backend/meta.json | 1 + content/roadmaps/3-devops/meta.json | 1 + content/roadmaps/4-fullstack/meta.json | 1 + content/roadmaps/5-qa/meta.json | 1 + scripts/roadmaps-meta.js | 4 +- 16 files changed, 41 insertions(+), 53 deletions(-) rename content/roadmaps/1-frontend/0-About/{0-Summary.md => 0-Landscape.md} (100%) rename content/roadmaps/1-frontend/0-About/{0-Summary-detailed.md => 1-Summary.md} (100%) rename content/roadmaps/1-frontend/0-About/{1-Skill-Summary.md => 2-Basic-Skills.md} (100%) rename content/roadmaps/1-frontend/0-About/{2-Job-Titles.md => 3-Job-Titles.md} (100%) delete mode 100644 content/roadmaps/1-frontend/1-Landscape/1-Junior-Developer.md delete mode 100644 content/roadmaps/1-frontend/1-Landscape/2-Mid-Level-Developer.md delete mode 100644 content/roadmaps/1-frontend/1-Landscape/3-Senior-Developer.md diff --git a/components/detailed-roadmap/index.js b/components/detailed-roadmap/index.js index 75b72b094..49a61ed1c 100644 --- a/components/detailed-roadmap/index.js +++ b/components/detailed-roadmap/index.js @@ -44,7 +44,7 @@ const DetailedRoadmap = ({ roadmap }) => { { sidebar[groupTitle].map(page => { const isActivePage = page.url === currentPage.url; // e.g. /frontend should mark `/frontend/summary` as active - const isSummaryPage = page.url === `${currentPage.url}/summary`; + const isSummaryPage = page.url === `${currentPage.url}/landscape`; return (
  • diff --git a/content/roadmaps.json b/content/roadmaps.json index 14c8d6da9..9c06265b2 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -8,7 +8,8 @@ "url": "https://twitter.com/kamranahmedse" }, "featured": true, - "detailed": false, + "path": "/roadmaps/1-frontend/0-About/0-Landscape.md", + "detailed": true, "versions": [ "latest", "2018", @@ -17,45 +18,27 @@ "contributorsCount": 1, "contributorsUrl": "/frontend/contributors", "url": "/frontend", - "path": "/roadmaps/1-frontend/0-About/0-Summary.md", "sidebar": { "About": [ { - "url": "/frontend/summary-detailed", - "title": "Summary detailed", - "path": "/roadmaps/1-frontend/0-About/0-Summary-detailed.md" + "url": "/frontend/landscape", + "title": "Landscape", + "path": "/roadmaps/1-frontend/0-About/0-Landscape.md" }, { "url": "/frontend/summary", "title": "Summary", - "path": "/roadmaps/1-frontend/0-About/0-Summary.md" + "path": "/roadmaps/1-frontend/0-About/1-Summary.md" }, { - "url": "/frontend/skill-summary", - "title": "Skill Summary", - "path": "/roadmaps/1-frontend/0-About/1-Skill-Summary.md" + "url": "/frontend/basic-skills", + "title": "Basic Skills", + "path": "/roadmaps/1-frontend/0-About/2-Basic-Skills.md" }, { "url": "/frontend/job-titles", "title": "Job Titles", - "path": "/roadmaps/1-frontend/0-About/2-Job-Titles.md" - } - ], - "Landscape": [ - { - "url": "/frontend/junior-developer", - "title": "Junior Developer", - "path": "/roadmaps/1-frontend/1-Landscape/1-Junior-Developer.md" - }, - { - "url": "/frontend/mid-level-developer", - "title": "Mid Level Developer", - "path": "/roadmaps/1-frontend/1-Landscape/2-Mid-Level-Developer.md" - }, - { - "url": "/frontend/senior-developer", - "title": "Senior Developer", - "path": "/roadmaps/1-frontend/1-Landscape/3-Senior-Developer.md" + "path": "/roadmaps/1-frontend/0-About/3-Job-Titles.md" } ], "Learn": [ @@ -107,6 +90,7 @@ "description": "Step by step guide to becoming a modern backend developer", "featuredDescription": "Step by step guide to becoming a modern backend developer in 2020", "featured": true, + "path": "/roadmaps/2-backend/0-About/0-Summary.md", "author": { "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" @@ -114,7 +98,6 @@ "contributorsCount": 1, "contributorsUrl": "/backend/contributors", "url": "/backend", - "path": "/roadmaps/2-backend/0-About/0-Summary.md", "sidebar": { "About": [ { @@ -152,6 +135,7 @@ "description": "Step by step guide for DevOps or any other Operations Role", "featuredDescription": "Step by step guide to become an SRE or for any operations role in 2020", "featured": true, + "path": "/roadmaps/3-devops/0-About/0-Summary.md", "versions": [ "latest", "2018", @@ -164,7 +148,6 @@ "contributorsCount": 1, "contributorsUrl": "/devops/contributors", "url": "/devops", - "path": "/roadmaps/3-devops/0-About/0-Summary.md", "sidebar": { "About": [ { @@ -196,6 +179,7 @@ "title": "Full Stack Developer", "description": "Step by step guide to becoming a modern fullstack developer in 2020", "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2020", + "path": "/roadmaps/4-fullstack/0-About/0-Summary.md", "upcoming": true, "author": { "name": "Kamran Ahmed", @@ -204,7 +188,6 @@ "contributorsCount": 1, "contributorsUrl": "/fullstack/contributors", "url": "/fullstack", - "path": "/roadmaps/4-fullstack/0-About/0-Summary.md", "sidebar": { "About": [ { @@ -220,6 +203,7 @@ "description": "Steps to follow in order to become a modern QA Engineer in 2020", "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2020", "upcoming": true, + "path": "/roadmaps/5-qa/0-About/0-Summary.md", "author": { "name": "Anas Fitiani", "url": "https://github.com/anas-qa" @@ -227,7 +211,6 @@ "contributorsCount": 1, "contributorsUrl": "/qa/contributors", "url": "/qa", - "path": "/roadmaps/5-qa/0-About/0-Summary.md", "sidebar": { "About": [ { diff --git a/content/roadmaps/1-frontend/0-About/0-Summary.md b/content/roadmaps/1-frontend/0-About/0-Landscape.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/0-Summary.md rename to content/roadmaps/1-frontend/0-About/0-Landscape.md diff --git a/content/roadmaps/1-frontend/0-About/0-Summary-detailed.md b/content/roadmaps/1-frontend/0-About/1-Summary.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/0-Summary-detailed.md rename to content/roadmaps/1-frontend/0-About/1-Summary.md diff --git a/content/roadmaps/1-frontend/0-About/1-Skill-Summary.md b/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/1-Skill-Summary.md rename to content/roadmaps/1-frontend/0-About/2-Basic-Skills.md diff --git a/content/roadmaps/1-frontend/0-About/2-Job-Titles.md b/content/roadmaps/1-frontend/0-About/3-Job-Titles.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/2-Job-Titles.md rename to content/roadmaps/1-frontend/0-About/3-Job-Titles.md diff --git a/content/roadmaps/1-frontend/1-Landscape/1-Junior-Developer.md b/content/roadmaps/1-frontend/1-Landscape/1-Junior-Developer.md deleted file mode 100644 index 9099ea8b0..000000000 --- a/content/roadmaps/1-frontend/1-Landscape/1-Junior-Developer.md +++ /dev/null @@ -1,18 +0,0 @@ -#### Technical Skills -The sections below describe different steps required to become a frontend developer - -#### Learning How Things Work -As a web developer, frontend, backend or fullstack, you should have a good understanding of how the internet works - -![](/roadmaps/frontend/beginner-1.png) - -Learn the below listed in the order given below -* What is Internet and how does it work? -* What is HTTP, how it evolved and where is it now? -* How do the browsers work? Engines behind different browsers -* What is DNS? How a website is found on the internet? -* What's in a domain name? What is an IP Address? -* What is Web Hosting? - -#### Writing Some Code -Now that you understand how things work, next step is getting your hands dirty and start actual coding diff --git a/content/roadmaps/1-frontend/1-Landscape/2-Mid-Level-Developer.md b/content/roadmaps/1-frontend/1-Landscape/2-Mid-Level-Developer.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/content/roadmaps/1-frontend/1-Landscape/3-Senior-Developer.md b/content/roadmaps/1-frontend/1-Landscape/3-Senior-Developer.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md b/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md index e69de29bb..9099ea8b0 100644 --- a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md +++ b/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md @@ -0,0 +1,18 @@ +#### Technical Skills +The sections below describe different steps required to become a frontend developer + +#### Learning How Things Work +As a web developer, frontend, backend or fullstack, you should have a good understanding of how the internet works + +![](/roadmaps/frontend/beginner-1.png) + +Learn the below listed in the order given below +* What is Internet and how does it work? +* What is HTTP, how it evolved and where is it now? +* How do the browsers work? Engines behind different browsers +* What is DNS? How a website is found on the internet? +* What's in a domain name? What is an IP Address? +* What is Web Hosting? + +#### Writing Some Code +Now that you understand how things work, next step is getting your hands dirty and start actual coding diff --git a/content/roadmaps/1-frontend/meta.json b/content/roadmaps/1-frontend/meta.json index 52047a35e..748022f33 100644 --- a/content/roadmaps/1-frontend/meta.json +++ b/content/roadmaps/1-frontend/meta.json @@ -7,7 +7,8 @@ "url": "https://twitter.com/kamranahmedse" }, "featured": true, - "detailed": false, + "path": "./0-About/0-Landscape.md", + "detailed": true, "versions": [ "latest", "2018", diff --git a/content/roadmaps/2-backend/meta.json b/content/roadmaps/2-backend/meta.json index 0e3da0fe5..11bcc619b 100644 --- a/content/roadmaps/2-backend/meta.json +++ b/content/roadmaps/2-backend/meta.json @@ -3,6 +3,7 @@ "description": "Step by step guide to becoming a modern backend developer", "featuredDescription": "Step by step guide to becoming a modern backend developer in 2020", "featured": true, + "path": "./0-About/0-Summary.md", "author": { "name": "Kamran Ahmed", "url": "https://twitter.com/kamranahmedse" diff --git a/content/roadmaps/3-devops/meta.json b/content/roadmaps/3-devops/meta.json index 22e2712d6..e3e8207eb 100644 --- a/content/roadmaps/3-devops/meta.json +++ b/content/roadmaps/3-devops/meta.json @@ -3,6 +3,7 @@ "description": "Step by step guide for DevOps or any other Operations Role", "featuredDescription": "Step by step guide to become an SRE or for any operations role in 2020", "featured": true, + "path": "./0-About/0-Summary.md", "versions": [ "latest", "2018", diff --git a/content/roadmaps/4-fullstack/meta.json b/content/roadmaps/4-fullstack/meta.json index b0d9f646d..0e935ecb4 100644 --- a/content/roadmaps/4-fullstack/meta.json +++ b/content/roadmaps/4-fullstack/meta.json @@ -2,6 +2,7 @@ "title": "Full Stack Developer", "description": "Step by step guide to becoming a modern fullstack developer in 2020", "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2020", + "path": "./0-About/0-Summary.md", "upcoming": true, "author": { "name": "Kamran Ahmed", diff --git a/content/roadmaps/5-qa/meta.json b/content/roadmaps/5-qa/meta.json index 81150bea9..88fd25bf8 100644 --- a/content/roadmaps/5-qa/meta.json +++ b/content/roadmaps/5-qa/meta.json @@ -3,6 +3,7 @@ "description": "Steps to follow in order to become a modern QA Engineer in 2020", "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2020", "upcoming": true, + "path": "./0-About/0-Summary.md", "author": { "name": "Anas Fitiani", "url": "https://github.com/anas-qa" diff --git a/scripts/roadmaps-meta.js b/scripts/roadmaps-meta.js index 953e6afed..28838a189 100644 --- a/scripts/roadmaps-meta.js +++ b/scripts/roadmaps-meta.js @@ -16,7 +16,7 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => { // We can't use the absolute path in the build e.g. ~/Users/user/where-build-is-running/content // So, we remove it and use the path relative to content directory - const summaryFilePath = path.join(roadmapDir.replace(STORAGE_PATH, ''), '/0-About/0-Summary.md'); + const roadmapLandingFilePath = path.join(roadmapDir.replace(STORAGE_PATH, ''), roadmapMeta.path); const contributors = exec(`git log --pretty=format:"%an%x09" ${roadmapDir} | uniq`) .toString() @@ -76,7 +76,7 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => { contributorsCount: contributorNames.length, contributorsUrl: `/${roadmapSlug}/contributors`, url: `/${roadmapSlug}`, - path: summaryFilePath, + path: roadmapLandingFilePath, sidebar, }, ]; From 7acae86a003d822319919470bb70faf6e6ab151a Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 29 Jan 2020 09:43:24 +0500 Subject: [PATCH 2/6] Update copy --- components/detailed-roadmap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/detailed-roadmap/index.js b/components/detailed-roadmap/index.js index 49a61ed1c..f5f341c81 100644 --- a/components/detailed-roadmap/index.js +++ b/components/detailed-roadmap/index.js @@ -43,7 +43,7 @@ const DetailedRoadmap = ({ roadmap }) => {
      { sidebar[groupTitle].map(page => { const isActivePage = page.url === currentPage.url; - // e.g. /frontend should mark `/frontend/summary` as active + // e.g. /frontend should mark `/frontend/landscape` as active const isSummaryPage = page.url === `${currentPage.url}/landscape`; return ( From 2dfd62d865fc1e04331513eb5862a7f95e6d31c3 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 29 Jan 2020 10:42:52 +0500 Subject: [PATCH 3/6] Fix SEO titles and keywords --- components/helmet/index.js | 2 +- content/roadmaps.json | 120 +++++++++++++++++++++++++ content/roadmaps/1-frontend/meta.json | 27 ++++++ content/roadmaps/2-backend/meta.json | 27 ++++++ content/roadmaps/3-devops/meta.json | 21 +++++ content/roadmaps/4-fullstack/meta.json | 27 ++++++ content/roadmaps/5-qa/meta.json | 18 ++++ content/site.json | 2 +- pages/[roadmap]/index.js | 5 +- pages/about.js | 4 +- pages/privacy.js | 2 +- pages/signup.js | 2 +- pages/terms.js | 2 +- public/sitemap.xml | 92 +++++++++---------- scripts/sitemap.js | 2 +- 15 files changed, 292 insertions(+), 61 deletions(-) diff --git a/components/helmet/index.js b/components/helmet/index.js index 9cc1f9336..975ec4277 100644 --- a/components/helmet/index.js +++ b/components/helmet/index.js @@ -19,7 +19,7 @@ const Helmet = (props) => ( - + { props.canonical && } diff --git a/content/roadmaps.json b/content/roadmaps.json index 9c06265b2..72592fdcc 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -1,5 +1,32 @@ [ { + "seo": { + "title": "Frontend Roadmap: Learn to become a modern frontend developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development. Learn to become a modern frontend developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a frontend developer", + "frontend developer", + "frontend engineer", + "frontend skills", + "frontend development", + "javascript developer", + "frontend development skills", + "frontend development skills test", + "frontend engineer roadmap", + "frontend developer roadmap", + "become a frontend developer", + "frontend developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for frontend development", + "learn frontend development", + "what is frontend development", + "frontend developer quiz", + "frontend developer interview questions" + ] + }, "title": "Frontend Developer", "description": "Step by step guide to becoming a modern frontend developer", "featuredDescription": "Step by step guide to becoming a modern frontend developer in 2020", @@ -86,6 +113,33 @@ } }, { + "seo": { + "title": "Backend Roadmap: Learn to become a modern backend developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern backend development. Learn to become a modern backend developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a backend developer", + "backend developer", + "backend engineer", + "backend skills", + "backend development", + "javascript developer", + "backend development skills", + "backend development skills test", + "backend engineer roadmap", + "backend developer roadmap", + "become a backend developer", + "backend developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for backend development", + "learn backend development", + "what is backend development", + "backend developer quiz", + "backend developer interview questions" + ] + }, "title": "Backend Developer", "description": "Step by step guide to becoming a modern backend developer", "featuredDescription": "Step by step guide to becoming a modern backend developer in 2020", @@ -131,6 +185,27 @@ } }, { + "seo": { + "title": "DevOps Roadmap: Learn to become an SRE or for any other operations role", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a devops enginer", + "devops roadmap", + "sre roadmap", + "site reliability engineer roadmap", + "operations roles", + "become devops", + "devops skills", + "modern devops skills", + "devops skills test", + "skills for devops", + "learn devops", + "what is devops", + "what is sre", + "devops quiz", + "devops interview questions" + ] + }, "title": "DevOps Roadmap", "description": "Step by step guide for DevOps or any other Operations Role", "featuredDescription": "Step by step guide to become an SRE or for any operations role in 2020", @@ -176,6 +251,33 @@ } }, { + "seo": { + "title": "Fullstack Roadmap: Learn to become a modern fullstack developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern fullstack development. Learn to become a modern fullstack developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a fullstack developer", + "fullstack developer", + "fullstack engineer", + "fullstack skills", + "fullstack development", + "javascript developer", + "fullstack development skills", + "fullstack development skills test", + "fullstack engineer roadmap", + "fullstack developer roadmap", + "become a fullstack developer", + "fullstack developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for fullstack development", + "learn fullstack development", + "what is fullstack development", + "fullstack developer quiz", + "fullstack developer interview questions" + ] + }, "title": "Full Stack Developer", "description": "Step by step guide to becoming a modern fullstack developer in 2020", "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2020", @@ -199,6 +301,24 @@ } }, { + "seo": { + "title": "QA Engineer Roadmap: Learn to become a modern QA engineer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a QA engineer", + "QA engineer", + "QA skills", + "QA development skills", + "QA development skills test", + "QA engineer roadmap", + "become a QA engineer", + "QA engineer career path", + "skills for QA development", + "what is QA engineer", + "QA engineer quiz", + "QA engineer interview questions" + ] + }, "title": "QA Engineer", "description": "Steps to follow in order to become a modern QA Engineer in 2020", "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2020", diff --git a/content/roadmaps/1-frontend/meta.json b/content/roadmaps/1-frontend/meta.json index 748022f33..b8200359c 100644 --- a/content/roadmaps/1-frontend/meta.json +++ b/content/roadmaps/1-frontend/meta.json @@ -1,4 +1,31 @@ { + "seo": { + "title": "Frontend Roadmap: Learn to become a modern frontend developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development. Learn to become a modern frontend developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a frontend developer", + "frontend developer", + "frontend engineer", + "frontend skills", + "frontend development", + "javascript developer", + "frontend development skills", + "frontend development skills test", + "frontend engineer roadmap", + "frontend developer roadmap", + "become a frontend developer", + "frontend developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for frontend development", + "learn frontend development", + "what is frontend development", + "frontend developer quiz", + "frontend developer interview questions" + ] + }, "title": "Frontend Developer", "description": "Step by step guide to becoming a modern frontend developer", "featuredDescription": "Step by step guide to becoming a modern frontend developer in 2020", diff --git a/content/roadmaps/2-backend/meta.json b/content/roadmaps/2-backend/meta.json index 11bcc619b..64f1fce6a 100644 --- a/content/roadmaps/2-backend/meta.json +++ b/content/roadmaps/2-backend/meta.json @@ -1,4 +1,31 @@ { + "seo": { + "title": "Backend Roadmap: Learn to become a modern backend developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern backend development. Learn to become a modern backend developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a backend developer", + "backend developer", + "backend engineer", + "backend skills", + "backend development", + "javascript developer", + "backend development skills", + "backend development skills test", + "backend engineer roadmap", + "backend developer roadmap", + "become a backend developer", + "backend developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for backend development", + "learn backend development", + "what is backend development", + "backend developer quiz", + "backend developer interview questions" + ] + }, "title": "Backend Developer", "description": "Step by step guide to becoming a modern backend developer", "featuredDescription": "Step by step guide to becoming a modern backend developer in 2020", diff --git a/content/roadmaps/3-devops/meta.json b/content/roadmaps/3-devops/meta.json index e3e8207eb..b6d7d7fee 100644 --- a/content/roadmaps/3-devops/meta.json +++ b/content/roadmaps/3-devops/meta.json @@ -1,4 +1,25 @@ { + "seo": { + "title": "DevOps Roadmap: Learn to become an SRE or for any other operations role", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a devops enginer", + "devops roadmap", + "sre roadmap", + "site reliability engineer roadmap", + "operations roles", + "become devops", + "devops skills", + "modern devops skills", + "devops skills test", + "skills for devops", + "learn devops", + "what is devops", + "what is sre", + "devops quiz", + "devops interview questions" + ] + }, "title": "DevOps Roadmap", "description": "Step by step guide for DevOps or any other Operations Role", "featuredDescription": "Step by step guide to become an SRE or for any operations role in 2020", diff --git a/content/roadmaps/4-fullstack/meta.json b/content/roadmaps/4-fullstack/meta.json index 0e935ecb4..cd912679d 100644 --- a/content/roadmaps/4-fullstack/meta.json +++ b/content/roadmaps/4-fullstack/meta.json @@ -1,4 +1,31 @@ { + "seo": { + "title": "Fullstack Roadmap: Learn to become a modern fullstack developer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern fullstack development. Learn to become a modern fullstack developer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a developer", + "guide to becoming a fullstack developer", + "fullstack developer", + "fullstack engineer", + "fullstack skills", + "fullstack development", + "javascript developer", + "fullstack development skills", + "fullstack development skills test", + "fullstack engineer roadmap", + "fullstack developer roadmap", + "become a fullstack developer", + "fullstack developer career path", + "javascript developer", + "modern javascript developer", + "node developer", + "skills for fullstack development", + "learn fullstack development", + "what is fullstack development", + "fullstack developer quiz", + "fullstack developer interview questions" + ] + }, "title": "Full Stack Developer", "description": "Step by step guide to becoming a modern fullstack developer in 2020", "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2020", diff --git a/content/roadmaps/5-qa/meta.json b/content/roadmaps/5-qa/meta.json index 88fd25bf8..89ed488c7 100644 --- a/content/roadmaps/5-qa/meta.json +++ b/content/roadmaps/5-qa/meta.json @@ -1,4 +1,22 @@ { + "seo": { + "title": "QA Engineer Roadmap: Learn to become a modern QA engineer", + "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.", + "keywords": [ + "guide to becoming a QA engineer", + "QA engineer", + "QA skills", + "QA development skills", + "QA development skills test", + "QA engineer roadmap", + "become a QA engineer", + "QA engineer career path", + "skills for QA development", + "what is QA engineer", + "QA engineer quiz", + "QA engineer interview questions" + ] + }, "title": "QA Engineer", "description": "Steps to follow in order to become a modern QA Engineer in 2020", "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2020", diff --git a/content/site.json b/content/site.json index 16e7a482b..608401796 100644 --- a/content/site.json +++ b/content/site.json @@ -2,7 +2,7 @@ "author": "Kamran Ahmed", "title": "Roadmaps to becoming a modern developer", "name": "roadmap.sh", - "description": "Roadmaps, articles and resources to help you choose your path, learn and improve.", + "description": "Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve.", "twitter": "kamranahmedse", "facebook": "kamranahmedse", "logo": "/brand.png", diff --git a/pages/[roadmap]/index.js b/pages/[roadmap]/index.js index e6592e073..571449f61 100644 --- a/pages/[roadmap]/index.js +++ b/pages/[roadmap]/index.js @@ -19,8 +19,9 @@ const Roadmap = ({ roadmap, canonical }) => { { showSummary ? : } diff --git a/pages/about.js b/pages/about.js index 0bf8da0bd..56ad9cda8 100644 --- a/pages/about.js +++ b/pages/about.js @@ -7,7 +7,9 @@ import Helmet from 'components/helmet'; const About = () => ( - + diff --git a/pages/privacy.js b/pages/privacy.js index 2792e3b41..9404142a7 100644 --- a/pages/privacy.js +++ b/pages/privacy.js @@ -8,7 +8,7 @@ const Privacy = () => ( - +

      Privacy Policy

      diff --git a/pages/signup.js b/pages/signup.js index 7fa338629..9e32d65fa 100644 --- a/pages/signup.js +++ b/pages/signup.js @@ -6,7 +6,7 @@ import Helmet from 'components/helmet'; const SignUp = () => ( - + diff --git a/pages/terms.js b/pages/terms.js index b4bad27fb..2240bd8b5 100644 --- a/pages/terms.js +++ b/pages/terms.js @@ -7,7 +7,7 @@ import DefaultLayout from 'layouts/default/index'; const Terms = () => ( - +
      diff --git a/public/sitemap.xml b/public/sitemap.xml index 798f89b5e..0e7088abc 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -3,187 +3,169 @@ https://roadmap.sh/frontend monthly - 2020-01-02T05:49:17.047Z + 2020-01-20T07:22:49.852Z 1.0 - https://roadmap.sh/frontend/summary-detailed + https://roadmap.sh/frontend/landscape monthly - 2020-01-02T05:49:17.047Z + 2020-01-20T07:22:49.852Z 1.0 https://roadmap.sh/frontend/summary monthly - 2020-01-02T05:49:17.047Z + 2020-01-20T07:22:49.852Z 1.0 - https://roadmap.sh/frontend/skill-summary + https://roadmap.sh/frontend/basic-skills monthly - 2020-01-02T05:49:17.047Z + 2020-01-20T07:22:49.852Z 1.0 https://roadmap.sh/frontend/job-titles monthly - 2020-01-02T05:49:17.048Z - 1.0 - - - https://roadmap.sh/frontend/junior-developer - monthly - 2020-01-02T05:49:17.048Z - 1.0 - - - https://roadmap.sh/frontend/mid-level-developer - monthly - 2020-01-02T05:49:17.048Z - 1.0 - - - https://roadmap.sh/frontend/senior-developer - monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.852Z 1.0 https://roadmap.sh/frontend/job-ready monthly - 2020-01-02T05:49:17.048Z + 2020-01-28T12:31:18.160Z 1.0 https://roadmap.sh/frontend/write-better-css monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/build-tools monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/modern-applications monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/automated-testing monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/static-type-checkers monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/server-side-rendering monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.853Z 1.0 https://roadmap.sh/frontend/go-beyond monthly - 2020-01-02T05:49:17.048Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend/summary monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend/summary monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend/junior monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend/intermediate monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.854Z 1.0 https://roadmap.sh/backend/senior monthly - 2020-01-02T05:49:17.049Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/devops monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/devops/summary monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/devops/junior monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/devops/intermediate monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/devops/senior monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.855Z 1.0 https://roadmap.sh/fullstack monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.856Z 1.0 https://roadmap.sh/fullstack/summary monthly - 2020-01-02T05:49:17.050Z + 2020-01-20T07:22:49.856Z 1.0 https://roadmap.sh/qa monthly - 2020-01-02T05:49:17.051Z + 2020-01-20T07:22:49.857Z 1.0 https://roadmap.sh/qa/summary monthly - 2020-01-02T05:49:17.051Z + 2020-01-20T07:22:49.857Z 1.0 @@ -231,13 +213,13 @@ https://roadmap.sh/about monthly - 2020-01-02T05:41:16.178Z + 2020-01-29T04:53:00.762Z 0.8 https://roadmap.sh/guides monthly - 2020-01-02T05:41:16.178Z + 2020-01-20T07:22:49.863Z 1.0 @@ -249,13 +231,19 @@ https://roadmap.sh/roadmaps monthly - 2020-01-02T05:41:16.179Z + 2020-01-28T12:48:07.715Z 1.0 https://roadmap.sh/signup monthly - 2020-01-02T05:41:16.179Z + 2020-01-29T04:57:31.022Z 0.9 + + https://roadmap.sh/sponsors + monthly + 2020-01-28T12:48:07.716Z + 0.5 + \ No newline at end of file diff --git a/scripts/sitemap.js b/scripts/sitemap.js index d88caebab..9f9f90e7e 100644 --- a/scripts/sitemap.js +++ b/scripts/sitemap.js @@ -8,7 +8,7 @@ const { getPageRoutes, getGuideRoutes } = require('./path-map'); const DOMAIN = 'https://roadmap.sh'; const PAGES_DIR = path.join(__dirname, '../pages'); const STORAGE_PATH = path.join(__dirname, '../content'); -const SITEMAP_PATH = 'static/sitemap.xml'; +const SITEMAP_PATH = 'public/sitemap.xml'; // Set the header const xmlHeader = ` From afcd11167504365c95eb1464a17c9296f57809b2 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 29 Jan 2020 11:14:34 +0500 Subject: [PATCH 4/6] SEO optimization through titles/descriptions --- components/about-header/index.js | 2 +- components/about-header/style.js | 2 +- components/helmet/index.js | 3 +-- content/pages/about.md | 14 +++++++------- content/roadmaps.json | 10 +++++----- content/roadmaps/1-frontend/0-About/1-Summary.md | 4 ++-- .../roadmaps/1-frontend/0-About/2-Basic-Skills.md | 4 ++-- .../roadmaps/1-frontend/0-About/3-Job-Titles.md | 2 +- content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md | 6 +++--- content/roadmaps/1-frontend/meta.json | 2 +- content/roadmaps/2-backend/meta.json | 2 +- content/roadmaps/3-devops/meta.json | 2 +- content/roadmaps/4-fullstack/meta.json | 2 +- content/roadmaps/5-qa/meta.json | 2 +- pages/privacy.js | 6 +++--- pages/terms.js | 2 +- 16 files changed, 32 insertions(+), 33 deletions(-) diff --git a/components/about-header/index.js b/components/about-header/index.js index e5d080316..277385a41 100644 --- a/components/about-header/index.js +++ b/components/about-header/index.js @@ -7,7 +7,7 @@ const AboutHeader = () => (
      -

      Hello, I'm Kamran Ahmed.

      +

      Hello, I'm Kamran Ahmed.

      I created roadmap.sh to help developers find their path if they are confused and help them grow in their career.

      @kamranahmedse diff --git a/components/about-header/style.js b/components/about-header/style.js index 0290780c2..d48260a9c 100644 --- a/components/about-header/style.js +++ b/components/about-header/style.js @@ -11,7 +11,7 @@ export const AboutHeaderWrap = styled.div` flex-direction: row; } - h2 { + h1 { font-weight: 700; } diff --git a/components/helmet/index.js b/components/helmet/index.js index 975ec4277..737f358ec 100644 --- a/components/helmet/index.js +++ b/components/helmet/index.js @@ -2,8 +2,7 @@ import NextHead from 'next/head'; import siteConfig from 'content/site'; const prepareTitle = (givenTitle) => { - givenTitle = givenTitle || siteConfig.title; - return `${givenTitle} - ${siteConfig.name}`; + return givenTitle || siteConfig.title; }; const prepareDescription = (givenDescription) => { diff --git a/content/pages/about.md b/content/pages/about.md index 74f3c0996..e44df20fd 100644 --- a/content/pages/about.md +++ b/content/pages/about.md @@ -1,22 +1,22 @@ -#### What is roadmap.sh? +## What is roadmap.sh? Roadmap.sh is the place containing community curated roadmaps, study plans, paths and resources for the budding developers. It started as a [set of charts to guide the developers](https://github.com/kamranahmedse/developer-roadmap) who are confused about what should they learn next but that alone wasn't enough so I expanded it into the website to get more contributors involved. -#### What are the plans for roadmap.sh? +## What are the plans for roadmap.sh? The website started off as a [simple repository containing a few charts](https://github.com/kamranahmedse/developer-roadmap) for developers and based on my personal opinions but it could have been much more than that so I decided to expand it to a website where people can contribute to study plans with their areas of expertise as well, add more roadmaps, write guides etc. We haven't opened up the sign ups for now but we will be doing. My long term plans for this website are to turn it into a goto place for the developers to seek guidance about their careers, help others, share their journeys, incentivize the learnings, get feedbacks on their projects etc. -#### How did you build roadmap.sh? +## How did you build roadmap.sh? The basic version of the website has been built with [Next.js](https://github.com/zeit/next.js/), is opensource and can be found on [github](https://github.com/kamranahmedse/roadmap.sh). It was hastily done to get it out in front of the people and get people to start contributing so it might be rough on the edges, but that is where we need your help. -#### How does it make money? +## How does it make money? It doesn't make any money. I have been using my personal time and budget to build it. I did not create this website with any intentions of monetization but as a good will, to help the people get out of the frustration that I was once in. Having said that, I love teaching and my future plans are to be able to work full-time on roadmap.sh for which it has to make enough money to pay for my rent, groceries, bills, travel expenses, etc but even if it doesn't it's likely I'll continue growing the site however I can. My focus at the moment is not making money from it and just add content that creates value for the people. > Sponsor the efforts by [paying as little as 3$ per month](http://gum.co/roadmap-sh) or with [one time payment via paypal](https://paypal.me/kamranahmedse). Alternatively, reach out to me at [kamran@roadmap.sh](mailto:kamran@roadmap.sh). -#### Can I contribute? +## Can I contribute? You definitely can, infact you are encouraged to do that. Even your minor contributions such as typo fixes count. The source code of the website can be [found on Github](https://github.com/kamranahmedse/roadmap.sh). Your contributions can be: * Adding a new roadmap @@ -31,9 +31,9 @@ You definitely can, infact you are encouraged to do that. Even your minor contri Just make sure to [follow the contribution guidelines](https://github.com/kamranahmedse/roadmap.sh/tree/master/contributing) when you decide to contribute. -#### Can I redistribute the content? +## Can I redistribute the content? No, the license of the content on this website does not allow you to redistribute any of the content on this website anywhere. You can use it for personal use or share the link to the content if you have to but redistribution is not allowed. -#### What is the best way to contact you? +## What is the best way to contact you? Tweet or send me a message [@kamranahmedse](https://twitter.com/kamranahmedse) or email me at [kamran@roadmap.sh](kamran@roadmap.sh). I get lots of messages so apologies in advance if you don't hear back from me soon but I do reply to everyone. diff --git a/content/roadmaps.json b/content/roadmaps.json index 72592fdcc..89503e9c4 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -1,7 +1,7 @@ [ { "seo": { - "title": "Frontend Roadmap: Learn to become a modern frontend developer", + "title": "Learn to become a modern frontend developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development. Learn to become a modern frontend developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", @@ -114,7 +114,7 @@ }, { "seo": { - "title": "Backend Roadmap: Learn to become a modern backend developer", + "title": "Learn to become a modern backend developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern backend development. Learn to become a modern backend developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", @@ -186,7 +186,7 @@ }, { "seo": { - "title": "DevOps Roadmap: Learn to become an SRE or for any other operations role", + "title": "DevOps Roadmap: Learn to become a DevOps Engineer or SRE", "description": "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a devops enginer", @@ -252,7 +252,7 @@ }, { "seo": { - "title": "Fullstack Roadmap: Learn to become a modern fullstack developer", + "title": "Fullstack Roadmap: Learn to become a fullstack developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern fullstack development. Learn to become a modern fullstack developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", @@ -302,7 +302,7 @@ }, { "seo": { - "title": "QA Engineer Roadmap: Learn to become a modern QA engineer", + "title": "QA Roadmap: Learn to become a modern QA engineer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a QA engineer", diff --git a/content/roadmaps/1-frontend/0-About/1-Summary.md b/content/roadmaps/1-frontend/0-About/1-Summary.md index ca31f1b85..94a28246a 100644 --- a/content/roadmaps/1-frontend/0-About/1-Summary.md +++ b/content/roadmaps/1-frontend/0-About/1-Summary.md @@ -1,4 +1,4 @@ -#### What is a Frontend Developer? +## What is a Frontend Developer? A frontend developer is someone who works on the side of the websites that the user interacts with i.e. front or the client side of the website. Whenever you visit a website, everything that you see is mainly developed by the frontend developers. They work with designers or UX teams to convert their mockups or wireframes to the actual website that the users can interact with. Also they work with [backend developers](/backend) who work with database and servers to get the data from and to display on the website. Wikipedia describes frontend development as follows @@ -7,7 +7,7 @@ They work with designers or UX teams to convert their mockups or wireframes to t > > Front-end web development is the practice of converting data to a graphical interface, through the use of HTML, CSS, and JavaScript, so that users can view and interact with that data. -#### Key Components of a Website +## Key Components of a Website If we talk about the frontend, all the websites are mainly built with three key technologies – **HTML**, **CSS** and **JavaScript**. If you know just these three, you can start building websites and be employable. Before we proceed, let me give you a brief overview of how **HTML**, **CSS** and **JavaScript** are used on the website. **HTML** provides the structure to a website i.e. all the text, headings, paragraphs, images etc that you see on the website, they have been created with HTML. HTML provides you just the structure, you need to put another layer on top of it to make the website pretty - this next layer is CSS. **CSS** helps make your websites pretty - the colors, backgrounds, font size, borders, shadows etc are controlled using CSS. And finally, the third layer is **JavaScript** which helps make the website interactive e.g. controlling the actions like showing a popup, switching slider images upon click etc is all controlled by JavaScript. diff --git a/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md b/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md index 5cbb96a93..01e031918 100644 --- a/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md +++ b/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md @@ -1,4 +1,4 @@ -#### Soft Skills +## Soft Skills Before we jump on to the technical skills there are few non-technical or soft skills that every employer is going to demand, so make sure to work on that side of the things as well when you are preparing yourself technically * **Communication skills** — Talking to your colleagues, writing emails, use of language @@ -8,7 +8,7 @@ Before we jump on to the technical skills there are few non-technical or soft sk * **Work Ethics and Integrity** — Being able to follow through on your duties in timely and quality manner. * **Be Curious** — Your curiosity is going to help you a great deal in evolving yourself. Don't just take things as they are, look at the reasoning behind the things. Look at the things that others are building, learn from them. Look at what community is most excited about these days. -#### Technical Skills +## Technical Skills In order to be a frontend developer, all you need is to learn HTML, CSS and JavaScript. Just learn these and you should be employable. I know a lot of developers who just know these and are working as frontend developers and are making decent money * HTML * CSS diff --git a/content/roadmaps/1-frontend/0-About/3-Job-Titles.md b/content/roadmaps/1-frontend/0-About/3-Job-Titles.md index 8fa136562..922f55ff8 100644 --- a/content/roadmaps/1-frontend/0-About/3-Job-Titles.md +++ b/content/roadmaps/1-frontend/0-About/3-Job-Titles.md @@ -1,4 +1,4 @@ -#### Common Job Titles +## Common Job Titles If you know frontend development, there are jobs with different titles that you can apply to. Here is the list of different job titles with almost same responsibilities * Frontend Developer / Engineer diff --git a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md b/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md index 9099ea8b0..885594503 100644 --- a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md +++ b/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md @@ -1,7 +1,7 @@ -#### Technical Skills +## Technical Skills The sections below describe different steps required to become a frontend developer -#### Learning How Things Work +## Learning How Things Work As a web developer, frontend, backend or fullstack, you should have a good understanding of how the internet works ![](/roadmaps/frontend/beginner-1.png) @@ -14,5 +14,5 @@ Learn the below listed in the order given below * What's in a domain name? What is an IP Address? * What is Web Hosting? -#### Writing Some Code +## Writing Some Code Now that you understand how things work, next step is getting your hands dirty and start actual coding diff --git a/content/roadmaps/1-frontend/meta.json b/content/roadmaps/1-frontend/meta.json index b8200359c..3c662dc96 100644 --- a/content/roadmaps/1-frontend/meta.json +++ b/content/roadmaps/1-frontend/meta.json @@ -1,6 +1,6 @@ { "seo": { - "title": "Frontend Roadmap: Learn to become a modern frontend developer", + "title": "Learn to become a modern frontend developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development. Learn to become a modern frontend developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", diff --git a/content/roadmaps/2-backend/meta.json b/content/roadmaps/2-backend/meta.json index 64f1fce6a..2f5546336 100644 --- a/content/roadmaps/2-backend/meta.json +++ b/content/roadmaps/2-backend/meta.json @@ -1,6 +1,6 @@ { "seo": { - "title": "Backend Roadmap: Learn to become a modern backend developer", + "title": "Learn to become a modern backend developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern backend development. Learn to become a modern backend developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", diff --git a/content/roadmaps/3-devops/meta.json b/content/roadmaps/3-devops/meta.json index b6d7d7fee..c0aeff23f 100644 --- a/content/roadmaps/3-devops/meta.json +++ b/content/roadmaps/3-devops/meta.json @@ -1,6 +1,6 @@ { "seo": { - "title": "DevOps Roadmap: Learn to become an SRE or for any other operations role", + "title": "DevOps Roadmap: Learn to become a DevOps Engineer or SRE", "description": "Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a devops enginer", diff --git a/content/roadmaps/4-fullstack/meta.json b/content/roadmaps/4-fullstack/meta.json index cd912679d..a8f20c400 100644 --- a/content/roadmaps/4-fullstack/meta.json +++ b/content/roadmaps/4-fullstack/meta.json @@ -1,6 +1,6 @@ { "seo": { - "title": "Fullstack Roadmap: Learn to become a modern fullstack developer", + "title": "Fullstack Roadmap: Learn to become a fullstack developer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern fullstack development. Learn to become a modern fullstack developer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a developer", diff --git a/content/roadmaps/5-qa/meta.json b/content/roadmaps/5-qa/meta.json index 89ed488c7..515e46f11 100644 --- a/content/roadmaps/5-qa/meta.json +++ b/content/roadmaps/5-qa/meta.json @@ -1,6 +1,6 @@ { "seo": { - "title": "QA Engineer Roadmap: Learn to become a modern QA engineer", + "title": "QA Roadmap: Learn to become a modern QA engineer", "description": "Community driven, articles, resources, guides, interview questions, quizzes for modern QA development. Learn to become a modern QA engineer by following the steps, skills, resources and guides listed in this roadmap.", "keywords": [ "guide to becoming a QA engineer", diff --git a/pages/privacy.js b/pages/privacy.js index 9404142a7..2d0961c5a 100644 --- a/pages/privacy.js +++ b/pages/privacy.js @@ -6,12 +6,12 @@ import Helmet from 'components/helmet'; const Privacy = () => ( - + - +
      -

      Privacy Policy

      +

      Privacy Policy

      By using or accessing the Services in any manner, you acknowledge that you accept the practices and policies outlined in this Privacy Policy, and you hereby consent that we will collect, use, and share your information in the following ways. Remember that your use of roadmap.sh’s Services is at all times subject to the Terms of Use, which incorporates this Privacy Policy. Any terms we use in this Policy without defining them have the definitions given to them in the Terms of Use.

      diff --git a/pages/terms.js b/pages/terms.js index 2240bd8b5..d8590214a 100644 --- a/pages/terms.js +++ b/pages/terms.js @@ -11,7 +11,7 @@ const Terms = () => (
      -

      Terms of Service

      +

      Terms of Service

      Please note that your use of and access to our services (defined below) are subject to the following terms; if you do not agree to all of the following, you may not use or access the services in any manner.

      From c9a6734f39bb1f172f10ff01e09dc9d19ad10f47 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 29 Jan 2020 11:28:20 +0500 Subject: [PATCH 5/6] Use on heading per page --- content/guides/design-patterns-for-humans.md | 2 +- content/guides/torrent-client.md | 32 ++++++++++---------- pages/privacy.js | 18 +++++------ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/content/guides/design-patterns-for-humans.md b/content/guides/design-patterns-for-humans.md index d4618c2b7..b5598e70a 100644 --- a/content/guides/design-patterns-for-humans.md +++ b/content/guides/design-patterns-for-humans.md @@ -1595,7 +1595,7 @@ $stationList->removeStation(new RadioStation(89)); // Will remove station 89 ``` 👽 Mediator -======== +-------- Real world example > A general example would be when you talk to someone on your mobile phone, there is a network provider sitting between you and them and your conversation goes through it instead of being directly sent. In this case network provider is mediator. diff --git a/content/guides/torrent-client.md b/content/guides/torrent-client.md index 89667c545..9dd2553c8 100644 --- a/content/guides/torrent-client.md +++ b/content/guides/torrent-client.md @@ -6,14 +6,14 @@ The protocol evolved organically over the past 20 years, and various people and I'll be using a [Debian ISO](https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/#indexlist) file as my guinea pig because it's big, but not huge, at 350MB. As a popular Linux distribution, there will be lots of fast and cooperative peers for us to connect to. And we'll avoid the legal and ethical issues related to downloading pirated content. -# Finding peers +## Finding peers Here’s a problem: we want to download a file with BitTorrent, but it’s a peer-to-peer protocol and we have no idea where to find peers to download it from. This is a lot like moving to a new city and trying to make friends—maybe we’ll hit up a local pub or a meetup group! Centralized locations like these are the big idea behind trackers, which are central servers that introduce peers to each other. They’re just web servers running over HTTP, and you can find Debian’s at http://bttracker.debian.org:6969/ ![illustration of a desktop computer and laptop sitting at a pub](/guides/torrent-client/trackers.png) Of course, these central servers are liable to get raided by the feds if they facilitate peers exchanging illegal content. You may remember reading about trackers like TorrentSpy, Popcorn Time, and KickassTorrents getting seized and shut down. New methods cut out the middleman by making even **peer discovery** a distributed process. We won't be implementing them, but if you're interested, some terms you can research are **DHT**, **PEX**, and **magnet links**. -## Parsing a .torrent file +### Parsing a .torrent file A .torrent file describes the contents of a torrentable file and information for connecting to a tracker. It's all we need in order to kickstart the process of downloading a torrent. Debian's .torrent file looks like this: ```markdown @@ -106,7 +106,7 @@ func (bto *bencodeTorrent) toTorrentFile() (*TorrentFile, error) { } ``` -## Retrieving peers from the tracker +### Retrieving peers from the tracker Now that we have information about the file and its tracker, let's talk to the tracker to **announce** our presence as a peer and to retrieve a list of other peers. We just need to make a GET request to the `announce` URL supplied in the .torrent file, with a few query parameters: ```go @@ -136,7 +136,7 @@ The important ones: ![a file with a name tag saying 'info_hash' and a person with a name tag 'peer_id'](/guides/torrent-client/info-hash-peer-id.png) -## Parsing the tracker response +### Parsing the tracker response We get back a bencoded response: ```markdown @@ -179,7 +179,7 @@ func Unmarshal(peersBin []byte) ([]Peer, error) { } ``` -# Downloading from peers +## Downloading from peers Now that we have a list of peers, it's time to connect with them and start downloading pieces! We can break down the process into a few steps. For each peer, we want to: 1. Start a TCP connection with the peer. This is like starting a phone call. @@ -196,7 +196,7 @@ if err != nil { I set a timeout so that I don't waste too much time on peers that aren't going to let me connect. For the most part, it's a pretty standard TCP connection. -## Complete the handshake +### Complete the handshake We've just set up a connection with a peer, but we want do a handshake to validate our assumptions that the peer * can communicate using the BitTorrent protocol @@ -250,14 +250,14 @@ func Read(r io.Reader) (*Handshake, error) { } ``` -## Send and receive messages +### Send and receive messages Once we've completed the initial handshake, we can send and receive **messages**. Well, not quite—if the other peer isn't ready to accept messages, we can't send any until they tell us they're ready. In this state, we're considered **choked** by the other peer. They'll send us an **unchoke** message to let us know that we can begin asking them for data. By default, we assume that we're choked until proven otherwise. Once we've been unchoked, we can then begin sending **requests** for pieces, and they can send us messages back containing pieces. !["A cartoon in which person 1 says 'hello I would like piece number—' and person 2 grabs him by the neck and says '00 00 00 01 00 (choke)'](/guides/torrent-client/choke.png) -### Interpreting messages +#### Interpreting messages A message has a length, an **ID** and a **payload**. On the wire, it looks like: ![A message with 4 byte for the length, 1 byte for ID, and an optional payload](/guides/torrent-client/message.png) @@ -333,7 +333,7 @@ func Read(r io.Reader) (*Message, error) { } ``` -### Bitfields +#### Bitfields One of the most interesting types of message is the **bitfield**, which is a data structure that peers use to efficiently encode which pieces they are able to send us. A bitfield looks like a byte array, and to check which pieces they have, we just need to look at the positions of the *bits* set to 1. You can think of it like the digital equivalent of a coffee shop loyalty card. We start with a blank card of all `0`, and flip bits to `1` to mark their positions as "stamped." ![a coffee shop loyalty card with eight slots, with stamps on the first four slots and a stamp on the second to last slot, represented as 11110010](/guides/torrent-client/bitfield.png) @@ -359,10 +359,10 @@ func (bf Bitfield) SetPiece(index int) { } ``` -## Putting it all together +### Putting it all together We now have all the tools we need to download a torrent: we have a list of peers obtained from the tracker, and we can communicate with them by dialing a TCP connection, initiating a handshake, and sending and receiving messages. Our last big problems are handling the **concurrency** involved in talking to multiple peers at once, and managing the **state** of our peers as we interact with them. These are both classically Hard problems. -### Managing concurrency: channels as queues +#### Managing concurrency: channels as queues In Go, we [share memory by communicating](https://blog.golang.org/share-memory-by-communicating), and we can think of a Go channel as a cheap thread-safe queue. We'll set up two channels to synchronize our concurrent workers: one for dishing out work (pieces to download) between peers, and another for collecting downloaded pieces. As downloaded pieces come in through the results channel, we can copy them into a buffer to start assembling our complete file. @@ -437,7 +437,7 @@ func (t *Torrent) startDownloadWorker(peer peers.Peer, workQueue chan *pieceWork } ``` -### Managing state +#### Managing state We'll keep track of each peer in a struct, and modify that struct as we read messages. It'll include data like how much we've downloaded from the peer, how much we've requested from them, and whether we're choked. If we wanted to scale this further, we could formalize this as a finite state machine. But a struct and a switch are good enough for now. ```go @@ -469,12 +469,12 @@ func (state *pieceProgress) readMessage() error { } ``` -### Time to make requests! +#### Time to make requests! Files, pieces, and piece hashes aren't the full story—we can go further by breaking down pieces into **blocks**. A block is a part of a piece, and we can fully define a block by the **index** of the piece it's part of, its byte **offset** within the piece, and its **length**. When we make requests for data from peers, we are actually requesting *blocks*. A block is usually 16KB large, meaning that a single 256 KB piece might actually require 16 requests. A peer is supposed to sever the connection if they receive a request for a block larger than 16KB. However, based on my experience, they're often perfectly happy to satisfy requests up to 128KB. I only got moderate gains in overall speed with larger block sizes, so it's probably better to stick with the spec. -### Pipelining +#### Pipelining Network round-trips are expensive, and requesting each block one by one will absolutely tank the performance of our download. Therefore, it's important to **pipeline** our requests such that we keep up a constant pressure of some number of unfulfilled requests. This can increase the throughput of our connection by an order of magnitude. ![Two email threads simulating peer connections. The thread on the left shows a request followed by a reply, repeated three times. The thread on the left sends three requests, and receives three replies in quick succession.](/guides/torrent-client/pipelining.png) @@ -529,7 +529,7 @@ func attemptDownloadPiece(c *client.Client, pw *pieceWork) ([]byte, error) { } ``` -### main.go +#### main.go This is a short one. We're almost there. ```go @@ -560,5 +560,5 @@ func main() { -# This isn't the full story +## This isn't the full story For brevity, I included only a few of the important snippets of code. Notably, I left out all the glue code, parsing, unit tests, and the boring parts that build character. View my [full implementation](https://github.com/veggiedefender/torrent-client) if you're interested. diff --git a/pages/privacy.js b/pages/privacy.js index 2d0961c5a..78fe49c32 100644 --- a/pages/privacy.js +++ b/pages/privacy.js @@ -15,7 +15,7 @@ const Privacy = () => (

      By using or accessing the Services in any manner, you acknowledge that you accept the practices and policies outlined in this Privacy Policy, and you hereby consent that we will collect, use, and share your information in the following ways. Remember that your use of roadmap.sh’s Services is at all times subject to the Terms of Use, which incorporates this Privacy Policy. Any terms we use in this Policy without defining them have the definitions given to them in the Terms of Use.

      -

      What does this Privacy Policy cover?

      +

      What does this Privacy Policy cover?

      This Privacy Policy covers our treatment of personally identifiable information ("Personal Information") that we gather when you are accessing or using our Services, but not to the practices of companies we don’t own or control, or people that we don’t manage. We gather various types of Personal Information from our users, as explained in more detail below, and we use this Personal Information internally in connection with our Services, including to personalize, provide, and improve our services, to allow you to set up a user account and profile, to contact you and allow other users to contact you, to fulfill your requests for certain products and services, and to analyze how you use the Services. In certain cases, we may also share some Personal Information with third parties, but only as described below.

      @@ -23,13 +23,13 @@ const Privacy = () => ( age 13, we will delete that information as quickly as possible. If you believe that a child under 13 may have provided us personal information, please contact us at kamran@roadmap.sh.

      -

      Will roadmap.sh ever change this Privacy Policy?

      +

      Will roadmap.sh ever change this Privacy Policy?

      We’re constantly trying to improve our Services, so we may need to change this Privacy Policy from time to time as well, but we will alert you to changes by updating the services on the website, placing a notice on the Services, by sending you an email, and/or by some other means. Please note that if you’ve opted not to receive legal notice emails from us (or you haven’t provided us with your email address), those legal notices will still govern your use of the Services, and you are still responsible for reading and understanding them. If you use the Services after any changes to the Privacy Policy have been posted, that means you agree to all of the changes. Use of information we collect now is subject to the Privacy Policy in effect at the time such information is used or collected.

      -

      What Information does roadmap.sh Collect?

      +

      What Information does roadmap.sh Collect?

      Information You Provide to Us:

      We receive and store any information you knowingly provide to us. For example, through the registration process and/or through your account settings, we may collect Personal Information such as your name, title, email address, phone number, and third-party account credentials (for example, your log-in credentials for Twitter or @@ -38,7 +38,7 @@ const Privacy = () => (

      We may communicate with you if you’ve provided us the means to do so. For example, if you’ve given us your email address, we may send you promotional email offers on behalf of other businesses, or email you about your use of the Services. Also, we may receive a confirmation when you open an email from us. This confirmation helps us make our communications with you more interesting and improve our services. If you do not want to receive communications from us, please email us at kamran@roadmap.sh.

      -

      Information Collected Automatically

      +

      Information Collected Automatically

      Whenever you interact with our Services, we automatically receive and record information on our server logs from your browser or device, which may include your IP address, geolocation data, device identification, “cookie” information, the type of browser and/or device you’re using to access our Services, and the page or feature you requested. “Cookies” are identifiers we transfer to your browser or device that allow us to recognize your browser or device and tell us how and when pages and features in our Services are visited and by how many people. You may be able to change the preferences on your browser or device to prevent or limit your device’s @@ -48,7 +48,7 @@ const Privacy = () => ( many users as possible.

      -

      Will roadmap.sh Share Any of the Personal Information it Receives?

      +

      Will roadmap.sh Share Any of the Personal Information it Receives?

      We may share your Personal Information with third parties as described in this section:

      Information that’s no longer personally identifiable. We may anonymize your Personal Information so that you are not individually identified, and provide that information to our partners. We may also provide aggregate usage information to our partners, who may use such information to understand how often and in what ways people @@ -77,12 +77,12 @@ const Privacy = () => ( users, or others.

      -

      Is Personal Information about me secure?

      +

      Is Personal Information about me secure?

      Your account is protected by a password for your privacy and security. If you access your account via a third party site or service, you may have additional or different sign-on protections via that third party site or service. You must prevent unauthorized access to your account and Personal Information by selecting and protecting your password and/or other sign-on mechanism appropriately and limiting access to your computer or device and browser by signing off after you have finished accessing your account. We endeavor to protect the privacy of your account and other Personal Information we hold in our records, but unfortunately, we cannot guarantee complete security. Unauthorized entry or use, hardware or software failure, and other factors, may compromise the security of user information at any time.

      -

      What Personal Information can I access?

      +

      What Personal Information can I access?

      Through your account settings, you may access, and, in some cases, edit or delete the following information you’ve provided to us:

      • first and last name
      • @@ -95,14 +95,14 @@ const Privacy = () => ( are a California resident and would like a copy of this notice, please submit a written request to: kamran@roadmap.sh.

        -

        What choices do I have?

        +

        What choices do I have?

        You can always opt not to disclose information to us, but keep in mind some information may be needed to register with us or to take advantage of some of our features.

        You may be able to add, update, or delete information as explained above. When you update information, however, we may maintain a copy of the unrevised information in our records. You may request deletion of your account by contacting us at kamran@roadmap.sh and we will disassociate our email address and Twitter account from any content or other information provided to us. Some information may remain in our records after your deletion of such information from your account. We may use any aggregated data derived from or incorporating your Personal Information after you update or delete it, but not in a manner that would identify you personally.

        -

        What if I have questions about this policy?

        +

        What if I have questions about this policy?

        If you have any questions or concerns regarding our privacy policies, please send us a detailed message to kamran@roadmap.sh, and we will try to resolve your concerns.

      From 597d27d6f7fd30c0679c15a5d4a6423df9c010b9 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 29 Jan 2020 12:48:18 +0500 Subject: [PATCH 6/6] Add detailed version for frontend roadmap --- components/detailed-roadmap/index.js | 17 +++++++--- components/detailed-roadmap/style.js | 16 ++++++++++ content/roadmaps.json | 32 +++++++++---------- .../0-About/{1-Summary.md => 0-Summary.md} | 0 .../{2-Basic-Skills.md => 1-Basic-Skills.md} | 7 ++-- .../{0-Landscape.md => 2-Landscape.md} | 0 .../{2-Learn => 1-Learn}/1-Job-Ready.md | 3 -- .../2-Write-Better-CSS.md | 0 .../{2-Learn => 1-Learn}/3-Build-Tools.md | 0 .../4-Modern-Applications.md | 0 .../5-Automated-Testing.md | 0 .../6-Static-Type-Checkers.md | 0 .../7-Server-Side-Rendering.md | 0 .../{2-Learn => 1-Learn}/8-Go-Beyond.md | 0 content/roadmaps/1-frontend/meta.json | 2 +- public/sitemap.xml | 32 +++++++++---------- 16 files changed, 64 insertions(+), 45 deletions(-) rename content/roadmaps/1-frontend/0-About/{1-Summary.md => 0-Summary.md} (100%) rename content/roadmaps/1-frontend/0-About/{2-Basic-Skills.md => 1-Basic-Skills.md} (75%) rename content/roadmaps/1-frontend/0-About/{0-Landscape.md => 2-Landscape.md} (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/1-Job-Ready.md (83%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/2-Write-Better-CSS.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/3-Build-Tools.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/4-Modern-Applications.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/5-Automated-Testing.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/6-Static-Type-Checkers.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/7-Server-Side-Rendering.md (100%) rename content/roadmaps/1-frontend/{2-Learn => 1-Learn}/8-Go-Beyond.md (100%) diff --git a/components/detailed-roadmap/index.js b/components/detailed-roadmap/index.js index f5f341c81..cd3dfc566 100644 --- a/components/detailed-roadmap/index.js +++ b/components/detailed-roadmap/index.js @@ -32,19 +32,25 @@ const DetailedRoadmap = ({ roadmap }) => { author = {} } = roadmap; - const roadmapPages = Object.keys(sidebar || {}).map(groupTitle => { + const roadmapPages = Object.keys(sidebar || {}).map((groupTitle, groupCounter) => { if (groupTitle.startsWith('_')) { return; } + // @todo remove it after completing the frontend roadmap + const isInProgress = groupCounter !== 0; + return ( -
      -

      { groupTitle }

      +
      +

      + { groupTitle } + { isInProgress && In Progress } +

        { sidebar[groupTitle].map(page => { const isActivePage = page.url === currentPage.url; // e.g. /frontend should mark `/frontend/landscape` as active - const isSummaryPage = page.url === `${currentPage.url}/landscape`; + const isSummaryPage = page.url === `${currentPage.url}/summary`; return (
      • @@ -71,7 +77,8 @@ const DetailedRoadmap = ({ roadmap }) => {

        { roadmap.title }

        Roadmap contributed by { author.name } - { roadmap.contributorsCount > 1 && ` and ${roadmap.contributorsCount} others`}

        + { roadmap.contributorsCount > 1 && ` and ${roadmap.contributorsCount} others`} +

        diff --git a/components/detailed-roadmap/style.js b/components/detailed-roadmap/style.js index b68e6ffb5..2d1b66aef 100644 --- a/components/detailed-roadmap/style.js +++ b/components/detailed-roadmap/style.js @@ -113,6 +113,16 @@ export const Sidebar = styled.div` } } + .progress-badge { + position: relative; + top: -2px; + margin-left: 5px; + } + + .links-group.in-progress { + opacity: 0.3; + } + .links-group li { list-style: none; margin: 7px 0; @@ -180,4 +190,10 @@ export const MobileSidebar = styled(Sidebar)` .links-group { width: auto; } + + .progress-badge { + position: relative; + top: -2px; + margin-left: 5px; + } `; diff --git a/content/roadmaps.json b/content/roadmaps.json index 89503e9c4..2e3f0d5d5 100644 --- a/content/roadmaps.json +++ b/content/roadmaps.json @@ -35,7 +35,7 @@ "url": "https://twitter.com/kamranahmedse" }, "featured": true, - "path": "/roadmaps/1-frontend/0-About/0-Landscape.md", + "path": "/roadmaps/1-frontend/0-About/0-Summary.md", "detailed": true, "versions": [ "latest", @@ -47,20 +47,20 @@ "url": "/frontend", "sidebar": { "About": [ - { - "url": "/frontend/landscape", - "title": "Landscape", - "path": "/roadmaps/1-frontend/0-About/0-Landscape.md" - }, { "url": "/frontend/summary", "title": "Summary", - "path": "/roadmaps/1-frontend/0-About/1-Summary.md" + "path": "/roadmaps/1-frontend/0-About/0-Summary.md" }, { "url": "/frontend/basic-skills", "title": "Basic Skills", - "path": "/roadmaps/1-frontend/0-About/2-Basic-Skills.md" + "path": "/roadmaps/1-frontend/0-About/1-Basic-Skills.md" + }, + { + "url": "/frontend/landscape", + "title": "Landscape", + "path": "/roadmaps/1-frontend/0-About/2-Landscape.md" }, { "url": "/frontend/job-titles", @@ -72,42 +72,42 @@ { "url": "/frontend/job-ready", "title": "Job Ready", - "path": "/roadmaps/1-frontend/2-Learn/1-Job-Ready.md" + "path": "/roadmaps/1-frontend/1-Learn/1-Job-Ready.md" }, { "url": "/frontend/write-better-css", "title": "Write Better CSS", - "path": "/roadmaps/1-frontend/2-Learn/2-Write-Better-CSS.md" + "path": "/roadmaps/1-frontend/1-Learn/2-Write-Better-CSS.md" }, { "url": "/frontend/build-tools", "title": "Build Tools", - "path": "/roadmaps/1-frontend/2-Learn/3-Build-Tools.md" + "path": "/roadmaps/1-frontend/1-Learn/3-Build-Tools.md" }, { "url": "/frontend/modern-applications", "title": "Modern Applications", - "path": "/roadmaps/1-frontend/2-Learn/4-Modern-Applications.md" + "path": "/roadmaps/1-frontend/1-Learn/4-Modern-Applications.md" }, { "url": "/frontend/automated-testing", "title": "Automated Testing", - "path": "/roadmaps/1-frontend/2-Learn/5-Automated-Testing.md" + "path": "/roadmaps/1-frontend/1-Learn/5-Automated-Testing.md" }, { "url": "/frontend/static-type-checkers", "title": "Static Type Checkers", - "path": "/roadmaps/1-frontend/2-Learn/6-Static-Type-Checkers.md" + "path": "/roadmaps/1-frontend/1-Learn/6-Static-Type-Checkers.md" }, { "url": "/frontend/server-side-rendering", "title": "Server Side Rendering", - "path": "/roadmaps/1-frontend/2-Learn/7-Server-Side-Rendering.md" + "path": "/roadmaps/1-frontend/1-Learn/7-Server-Side-Rendering.md" }, { "url": "/frontend/go-beyond", "title": "Go Beyond", - "path": "/roadmaps/1-frontend/2-Learn/8-Go-Beyond.md" + "path": "/roadmaps/1-frontend/1-Learn/8-Go-Beyond.md" } ] } diff --git a/content/roadmaps/1-frontend/0-About/1-Summary.md b/content/roadmaps/1-frontend/0-About/0-Summary.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/1-Summary.md rename to content/roadmaps/1-frontend/0-About/0-Summary.md diff --git a/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md b/content/roadmaps/1-frontend/0-About/1-Basic-Skills.md similarity index 75% rename from content/roadmaps/1-frontend/0-About/2-Basic-Skills.md rename to content/roadmaps/1-frontend/0-About/1-Basic-Skills.md index 01e031918..6ca3feacc 100644 --- a/content/roadmaps/1-frontend/0-About/2-Basic-Skills.md +++ b/content/roadmaps/1-frontend/0-About/1-Basic-Skills.md @@ -10,12 +10,11 @@ Before we jump on to the technical skills there are few non-technical or soft sk ## Technical Skills In order to be a frontend developer, all you need is to learn HTML, CSS and JavaScript. Just learn these and you should be employable. I know a lot of developers who just know these and are working as frontend developers and are making decent money + * HTML * CSS * JavaScript -Frontend development is broad and there are further skills that are in play but those can be gained over time. All you need is to learn the above three and start making projects ...lots of them. This is how you will hone your skillset and continue to grow. Having said that, the skills and the relevant expertise in those skills varies from the job level, follow the links below to get an idea of the skills required for each of the role levels. +Frontend development is broad and there are further skills that are in play but those can be gained over time. All you need is to learn the above three and start making projects ..lots of them. This is how you will hone your skillset and continue to grow. -* [Entry Level Developer](/frontend/junior-developer) -* [Mid Level Developer](/frontend/mid-level-developer) -* [Senior Developer](/frontend/senior-developer) +Having said that, the skills and the relevant expertise in those skills varies from the job level, have a look at the landscape to get an idea about everything that is there in Frontend Development. diff --git a/content/roadmaps/1-frontend/0-About/0-Landscape.md b/content/roadmaps/1-frontend/0-About/2-Landscape.md similarity index 100% rename from content/roadmaps/1-frontend/0-About/0-Landscape.md rename to content/roadmaps/1-frontend/0-About/2-Landscape.md diff --git a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md b/content/roadmaps/1-frontend/1-Learn/1-Job-Ready.md similarity index 83% rename from content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md rename to content/roadmaps/1-frontend/1-Learn/1-Job-Ready.md index 885594503..de0f77e1f 100644 --- a/content/roadmaps/1-frontend/2-Learn/1-Job-Ready.md +++ b/content/roadmaps/1-frontend/1-Learn/1-Job-Ready.md @@ -13,6 +13,3 @@ Learn the below listed in the order given below * What is DNS? How a website is found on the internet? * What's in a domain name? What is an IP Address? * What is Web Hosting? - -## Writing Some Code -Now that you understand how things work, next step is getting your hands dirty and start actual coding diff --git a/content/roadmaps/1-frontend/2-Learn/2-Write-Better-CSS.md b/content/roadmaps/1-frontend/1-Learn/2-Write-Better-CSS.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/2-Write-Better-CSS.md rename to content/roadmaps/1-frontend/1-Learn/2-Write-Better-CSS.md diff --git a/content/roadmaps/1-frontend/2-Learn/3-Build-Tools.md b/content/roadmaps/1-frontend/1-Learn/3-Build-Tools.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/3-Build-Tools.md rename to content/roadmaps/1-frontend/1-Learn/3-Build-Tools.md diff --git a/content/roadmaps/1-frontend/2-Learn/4-Modern-Applications.md b/content/roadmaps/1-frontend/1-Learn/4-Modern-Applications.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/4-Modern-Applications.md rename to content/roadmaps/1-frontend/1-Learn/4-Modern-Applications.md diff --git a/content/roadmaps/1-frontend/2-Learn/5-Automated-Testing.md b/content/roadmaps/1-frontend/1-Learn/5-Automated-Testing.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/5-Automated-Testing.md rename to content/roadmaps/1-frontend/1-Learn/5-Automated-Testing.md diff --git a/content/roadmaps/1-frontend/2-Learn/6-Static-Type-Checkers.md b/content/roadmaps/1-frontend/1-Learn/6-Static-Type-Checkers.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/6-Static-Type-Checkers.md rename to content/roadmaps/1-frontend/1-Learn/6-Static-Type-Checkers.md diff --git a/content/roadmaps/1-frontend/2-Learn/7-Server-Side-Rendering.md b/content/roadmaps/1-frontend/1-Learn/7-Server-Side-Rendering.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/7-Server-Side-Rendering.md rename to content/roadmaps/1-frontend/1-Learn/7-Server-Side-Rendering.md diff --git a/content/roadmaps/1-frontend/2-Learn/8-Go-Beyond.md b/content/roadmaps/1-frontend/1-Learn/8-Go-Beyond.md similarity index 100% rename from content/roadmaps/1-frontend/2-Learn/8-Go-Beyond.md rename to content/roadmaps/1-frontend/1-Learn/8-Go-Beyond.md diff --git a/content/roadmaps/1-frontend/meta.json b/content/roadmaps/1-frontend/meta.json index 3c662dc96..665938838 100644 --- a/content/roadmaps/1-frontend/meta.json +++ b/content/roadmaps/1-frontend/meta.json @@ -34,7 +34,7 @@ "url": "https://twitter.com/kamranahmedse" }, "featured": true, - "path": "./0-About/0-Landscape.md", + "path": "./0-About/0-Summary.md", "detailed": true, "versions": [ "latest", diff --git a/public/sitemap.xml b/public/sitemap.xml index 0e7088abc..e2224eb27 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -3,23 +3,23 @@ https://roadmap.sh/frontend monthly - 2020-01-20T07:22:49.852Z + 2020-01-29T06:08:22.238Z 1.0 - https://roadmap.sh/frontend/landscape + https://roadmap.sh/frontend/summary monthly - 2020-01-20T07:22:49.852Z + 2020-01-29T06:08:22.238Z 1.0 - https://roadmap.sh/frontend/summary + https://roadmap.sh/frontend/basic-skills monthly - 2020-01-20T07:22:49.852Z + 2020-01-29T07:33:57.619Z 1.0 - https://roadmap.sh/frontend/basic-skills + https://roadmap.sh/frontend/landscape monthly 2020-01-20T07:22:49.852Z 1.0 @@ -27,55 +27,55 @@ https://roadmap.sh/frontend/job-titles monthly - 2020-01-20T07:22:49.852Z + 2020-01-29T07:30:19.876Z 1.0 https://roadmap.sh/frontend/job-ready monthly - 2020-01-28T12:31:18.160Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/write-better-css monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/build-tools monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/modern-applications monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/automated-testing monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/static-type-checkers monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/server-side-rendering monthly - 2020-01-20T07:22:49.853Z + 2020-01-29T07:27:26.467Z 1.0 https://roadmap.sh/frontend/go-beyond monthly - 2020-01-20T07:22:49.854Z + 2020-01-29T07:27:26.467Z 1.0 @@ -231,7 +231,7 @@ https://roadmap.sh/roadmaps monthly - 2020-01-28T12:48:07.715Z + 2020-01-29T07:15:48.617Z 1.0