Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut beatae blanditiis commodi, consequatur, dicta distinctio esse et id, ipsa labore libero nisi odit placeat possimus saepe sed vel vitae voluptate?
+
+
+ )
+ }
+
+
+ )
+};
export default RoadmapSummary;
diff --git a/package.json b/package.json
index f39b3ba4b..7ca085a45 100644
--- a/package.json
+++ b/package.json
@@ -6,11 +6,12 @@
"scripts": {
"dev": "NODE_ENV=dev next",
"serve:out": "serve out",
- "sitemap": "node scripts/sitemap.js",
"build": "./scripts/build.sh",
"deploy": "NODE_DEBUG=gh-pages gh-pages -d out -t",
"test": "jest",
- "test:watch": "jest --watch"
+ "test:watch": "jest --watch",
+ "meta:sitemap": "node scripts/sitemap.js",
+ "meta:roadmaps": "node scripts/roadmaps-meta.js"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.22",
diff --git a/scripts/path-map.js b/scripts/path-map.js
index d2210dad5..085e4eebb 100644
--- a/scripts/path-map.js
+++ b/scripts/path-map.js
@@ -3,7 +3,6 @@ const glob = require('glob');
const fs = require('fs');
const guides = require('../storage/guides.json');
-const roadmaps = require('../storage/roadmaps');
const PAGES_PATH = path.join(__dirname, '../pages');
const ROADMAPS_PATH = path.join(__dirname, '../storage/roadmaps');
diff --git a/scripts/roadmaps-meta.js b/scripts/roadmaps-meta.js
new file mode 100644
index 000000000..3ce2c4f70
--- /dev/null
+++ b/scripts/roadmaps-meta.js
@@ -0,0 +1,76 @@
+const fs = require('fs');
+const path = require('path');
+
+const STORAGE_PATH = path.join(__dirname, '../storage');
+const ROADMAPS_PATH = path.join(__dirname, '../storage/roadmaps');
+const META_FILE_PATH = path.join(__dirname, '../storage/roadmaps.json');
+
+const roadmapDirs = fs.readdirSync(ROADMAPS_PATH);
+console.log(`[x] ${roadmapDirs.length} roadmaps found`);
+
+const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => {
+ const roadmapSlug = roadmapDirName.replace(/^\d+-/, '');
+ const roadmapDir = path.join(ROADMAPS_PATH, roadmapDirName);
+ const roadmapMeta = require(path.join(roadmapDir, 'meta.json'));
+
+ console.log(`----------------------------`);
+ console.log(`[#] Roadmap: ${roadmapMeta.title}`);
+ console.log(`[x] Generating sidebar`);
+
+ // Get all the directories in the roadmap dir
+ // these are going to be the parent menu items
+ const menuDirs = fs.readdirSync(roadmapDir)
+ .map(dirPath => path.join(roadmapDir, dirPath))
+ .filter(dirPath => fs.lstatSync(dirPath).isDirectory());
+
+ // Read the files inside each of the menu dirs and prepare menu items
+ // for the sidebar i.e. of the format below
+ // {
+ // landscape: [{ title: "Junior", path: "/path/to/file.md"}, ...],
+ // learn: [{ title: "Job Ready", path: "/path/to/file.md"}, ...],
+ // }
+ const sidebar = menuDirs.reduce((menus, menuDir) => {
+ const menuItemName = path.basename(menuDir);
+ const pageFiles = fs.readdirSync(menuDir)
+ .filter(pageFileName => pageFileName.endsWith('.md'))
+ // Sort by the titles `1-something.md, 2-another.md`
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
+
+ return {
+ ...menus,
+ [menuItemName]: [
+ ...(menus[menuItemName] || []),
+ ...pageFiles.map(pageFile => {
+ const pageFileName = path.basename(pageFile, '.md');
+ const pageSlug = pageFileName.replace(/^\d+-/, '').toLowerCase();
+
+ return {
+ // Use the filename and remove the number from the beginning to generate slug
+ url: `/${roadmapSlug}/${pageSlug}`,
+ // Remove the number and replace the dashes to generate title
+ title: pageFileName.replace(/^\d+-/, '').replace(/-/g, ' '),
+ // Remove "STORAGE_PATH" because we don't want to push the absolute path while development
+ path: path.join(menuDir, pageFile).replace(STORAGE_PATH, ''),
+ }
+ }),
+ ],
+ };
+ }, {});
+
+ return [
+ ...metaAcc,
+ {
+ ...roadmapMeta,
+ url: `/${roadmapSlug}`,
+ path: path.join(roadmapDir.replace(STORAGE_PATH, ''), '/summary.md'),
+ sidebar,
+ },
+ ];
+}, []);
+
+console.log(`----------------------------`);
+console.log(`[x] Meta generated for ${roadmapsMeta.length} roadmaps`);
+console.log(`[x] Writing file ${META_FILE_PATH}`);
+fs.writeFileSync(META_FILE_PATH, JSON.stringify(roadmapsMeta, null, 2));
+console.log(`[x] Wrote file with content`);
+console.log(JSON.stringify(roadmapsMeta, null, 2));
diff --git a/static/sitemap.xml b/static/sitemap.xml
index 7f308e870..de78a6ab6 100644
--- a/static/sitemap.xml
+++ b/static/sitemap.xml
@@ -1,87 +1,201 @@
- https://roadmap.sh/frontend
+ https://roadmap.sh/1-frontendmonthly
- 2019-11-16T09:32:19.372Z
+ 2019-11-27T20:16:53.144Z1.0
- https://roadmap.sh/frontend/latest
+ https://roadmap.sh/1-frontend/juniormonthly
- 2019-11-16T09:32:19.372Z
+ 2019-11-27T20:16:53.144Z1.0
- https://roadmap.sh/frontend/2018
+ https://roadmap.sh/1-frontend/intermediatemonthly
- 2019-11-16T09:32:19.349Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/frontend/2017
+ https://roadmap.sh/1-frontend/seniormonthly
- 2019-11-16T09:32:19.335Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/backend
+ https://roadmap.sh/1-frontend/job-readymonthly
- 2019-11-16T09:32:19.367Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/backend/latest
+ https://roadmap.sh/1-frontend/write-better-cssmonthly
- 2019-11-16T09:32:19.367Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/backend/2018
+ https://roadmap.sh/1-frontend/build-toolsmonthly
- 2019-11-16T09:32:19.341Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/backend/2017
+ https://roadmap.sh/1-frontend/modern-frontend-applicationsmonthly
- 2019-11-16T09:32:19.331Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/devops
+ https://roadmap.sh/1-frontend/automated-testingmonthly
- 2019-11-16T09:32:19.369Z
+ 2019-11-27T20:16:53.145Z1.0
- https://roadmap.sh/devops/latest
+ https://roadmap.sh/1-frontend/static-type-checkersmonthly
- 2019-11-16T09:32:19.369Z
+ 2019-11-27T20:16:53.146Z1.0
- https://roadmap.sh/devops/2018
+ https://roadmap.sh/1-frontend/server-side-renderingmonthly
- 2019-11-16T09:32:19.343Z
+ 2019-11-27T20:16:53.146Z1.0
- https://roadmap.sh/devops/2017
+ https://roadmap.sh/1-frontend/go-beyondmonthly
- 2019-11-16T09:32:19.333Z
+ 2019-11-27T20:16:53.146Z1.0
- https://roadmap.sh/fullstack
+ https://roadmap.sh/1-frontend/summarymonthly
- 2019-11-16T12:14:26.816Z
+ 2019-11-27T20:16:53.146Z1.0
- https://roadmap.sh/qa-engineer
+ https://roadmap.sh/2-backendmonthly
- 2019-11-16T12:14:26.817Z
+ 2019-11-27T20:16:53.146Z
+ 1.0
+
+
+ https://roadmap.sh/2-backend/junior
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/2-backend/intermediate
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/2-backend/senior
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/2-backend/summary
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/3-devops
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/3-devops/junior
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/3-devops/intermediate
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/3-devops/senior
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/3-devops/summary
+ monthly
+ 2019-11-27T20:16:53.148Z
+ 1.0
+
+
+ https://roadmap.sh/4-fullstack
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/4-fullstack/junior
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/4-fullstack/intermediate
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/4-fullstack/senior
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/4-fullstack/summary
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/5-qa
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/5-qa/junior
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/5-qa/intermediate
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/5-qa/senior
+ monthly
+ 2019-11-27T20:16:53.149Z
+ 1.0
+
+
+ https://roadmap.sh/5-qa/summary
+ monthly
+ 2019-11-27T20:16:53.149Z1.0
diff --git a/storage/roadmaps.json b/storage/roadmaps.json
index 3bfb83eca..bdf4b84df 100644
--- a/storage/roadmaps.json
+++ b/storage/roadmaps.json
@@ -3,51 +3,187 @@
"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 2019",
- "url": "/frontend",
- "picture": "/static/roadmaps/{version}/frontend.png",
"featured": true,
"versions": [
"latest",
"2018",
"2017"
- ]
+ ],
+ "url": "/frontend",
+ "path": "/roadmaps/1-frontend/summary.md",
+ "sidebar": {
+ "landscape": [
+ {
+ "url": "/frontend/junior",
+ "title": "Junior",
+ "path": "/roadmaps/1-frontend/landscape/1-Junior.md"
+ },
+ {
+ "url": "/frontend/intermediate",
+ "title": "Intermediate",
+ "path": "/roadmaps/1-frontend/landscape/2-Intermediate.md"
+ },
+ {
+ "url": "/frontend/senior",
+ "title": "Senior",
+ "path": "/roadmaps/1-frontend/landscape/3-Senior.md"
+ }
+ ],
+ "learn": [
+ {
+ "url": "/frontend/job-ready",
+ "title": "Job Ready",
+ "path": "/roadmaps/1-frontend/learn/1-Job-Ready.md"
+ },
+ {
+ "url": "/frontend/write-better-css",
+ "title": "Write Better CSS",
+ "path": "/roadmaps/1-frontend/learn/2-Write-Better-CSS.md"
+ },
+ {
+ "url": "/frontend/build-tools",
+ "title": "Build Tools",
+ "path": "/roadmaps/1-frontend/learn/3-Build-Tools.md"
+ },
+ {
+ "url": "/frontend/modern-frontend-applications",
+ "title": "Modern Frontend Applications",
+ "path": "/roadmaps/1-frontend/learn/4-Modern-Frontend-Applications.md"
+ },
+ {
+ "url": "/frontend/automated-testing",
+ "title": "Automated Testing",
+ "path": "/roadmaps/1-frontend/learn/5-Automated-Testing.md"
+ },
+ {
+ "url": "/frontend/static-type-checkers",
+ "title": "Static Type Checkers",
+ "path": "/roadmaps/1-frontend/learn/6-Static-Type-Checkers.md"
+ },
+ {
+ "url": "/frontend/server-side-rendering",
+ "title": "Server Side Rendering",
+ "path": "/roadmaps/1-frontend/learn/7-Server-Side-Rendering.md"
+ },
+ {
+ "url": "/frontend/go-beyond",
+ "title": "Go Beyond",
+ "path": "/roadmaps/1-frontend/learn/8-Go-Beyond.md"
+ }
+ ]
+ }
},
{
"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 2019",
- "url": "/backend",
- "picture": "/static/roadmaps/{version}/backend.png",
"featured": true,
- "versions": [
- "latest",
- "2018",
- "2017"
- ]
+ "url": "/backend",
+ "path": "/roadmaps/2-backend/summary.md",
+ "sidebar": {
+ "landscape": [
+ {
+ "url": "/backend/junior",
+ "title": "Junior",
+ "path": "/roadmaps/2-backend/landscape/1-Junior.md"
+ },
+ {
+ "url": "/backend/intermediate",
+ "title": "Intermediate",
+ "path": "/roadmaps/2-backend/landscape/2-Intermediate.md"
+ },
+ {
+ "url": "/backend/senior",
+ "title": "Senior",
+ "path": "/roadmaps/2-backend/landscape/3-Senior.md"
+ }
+ ]
+ }
},
{
"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 2019",
- "url": "/devops",
- "picture": "/static/roadmaps/{version}/devops.png",
"featured": true,
"versions": [
"latest",
"2018",
"2017"
- ]
+ ],
+ "url": "/devops",
+ "path": "/roadmaps/3-devops/summary.md",
+ "sidebar": {
+ "landscape": [
+ {
+ "url": "/devops/junior",
+ "title": "Junior",
+ "path": "/roadmaps/3-devops/landscape/1-Junior.md"
+ },
+ {
+ "url": "/devops/intermediate",
+ "title": "Intermediate",
+ "path": "/roadmaps/3-devops/landscape/2-Intermediate.md"
+ },
+ {
+ "url": "/devops/senior",
+ "title": "Senior",
+ "path": "/roadmaps/3-devops/landscape/3-Senior.md"
+ }
+ ]
+ }
},
{
"title": "Full Stack Developer",
- "description": "Step by step guide to becoming a modern full stack developer in 2019",
+ "description": "Step by step guide to becoming a modern fullstack developer in 2019",
+ "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
+ "upcoming": true,
"url": "/fullstack",
- "upcoming": true
+ "path": "/roadmaps/4-fullstack/summary.md",
+ "sidebar": {
+ "landscape": [
+ {
+ "url": "/fullstack/junior",
+ "title": "Junior",
+ "path": "/roadmaps/4-fullstack/landscape/1-Junior.md"
+ },
+ {
+ "url": "/fullstack/intermediate",
+ "title": "Intermediate",
+ "path": "/roadmaps/4-fullstack/landscape/2-Intermediate.md"
+ },
+ {
+ "url": "/fullstack/senior",
+ "title": "Senior",
+ "path": "/roadmaps/4-fullstack/landscape/3-Senior.md"
+ }
+ ]
+ }
},
{
"title": "QA Engineer",
"description": "Steps to follow in order to become a modern QA Engineer in 2019",
- "url": "/qa-engineer",
- "upcoming": true
+ "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
+ "upcoming": true,
+ "url": "/qa",
+ "path": "/roadmaps/5-qa/summary.md",
+ "sidebar": {
+ "landscape": [
+ {
+ "url": "/qa/junior",
+ "title": "Junior",
+ "path": "/roadmaps/5-qa/landscape/1-Junior.md"
+ },
+ {
+ "url": "/qa/intermediate",
+ "title": "Intermediate",
+ "path": "/roadmaps/5-qa/landscape/2-Intermediate.md"
+ },
+ {
+ "url": "/qa/senior",
+ "title": "Senior",
+ "path": "/roadmaps/5-qa/landscape/3-Senior.md"
+ }
+ ]
+ }
}
-]
+]
\ No newline at end of file
diff --git a/storage/roadmaps/frontend/landscape/1-Junior.md b/storage/roadmaps/1-frontend/landscape/1-Junior.md
similarity index 100%
rename from storage/roadmaps/frontend/landscape/1-Junior.md
rename to storage/roadmaps/1-frontend/landscape/1-Junior.md
diff --git a/storage/roadmaps/frontend/landscape/2-Intermediate.md b/storage/roadmaps/1-frontend/landscape/2-Intermediate.md
similarity index 100%
rename from storage/roadmaps/frontend/landscape/2-Intermediate.md
rename to storage/roadmaps/1-frontend/landscape/2-Intermediate.md
diff --git a/storage/roadmaps/frontend/landscape/3-Senior.md b/storage/roadmaps/1-frontend/landscape/3-Senior.md
similarity index 100%
rename from storage/roadmaps/frontend/landscape/3-Senior.md
rename to storage/roadmaps/1-frontend/landscape/3-Senior.md
diff --git a/storage/roadmaps/frontend/learn/1-Job-Ready.md b/storage/roadmaps/1-frontend/learn/1-Job-Ready.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/1-Job-Ready.md
rename to storage/roadmaps/1-frontend/learn/1-Job-Ready.md
diff --git a/storage/roadmaps/frontend/learn/2-Write-Better-CSS.md b/storage/roadmaps/1-frontend/learn/2-Write-Better-CSS.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/2-Write-Better-CSS.md
rename to storage/roadmaps/1-frontend/learn/2-Write-Better-CSS.md
diff --git a/storage/roadmaps/frontend/learn/3-Build-Tools.md b/storage/roadmaps/1-frontend/learn/3-Build-Tools.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/3-Build-Tools.md
rename to storage/roadmaps/1-frontend/learn/3-Build-Tools.md
diff --git a/storage/roadmaps/frontend/learn/4-Modern-Frontend-Applications.md b/storage/roadmaps/1-frontend/learn/4-Modern-Frontend-Applications.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/4-Modern-Frontend-Applications.md
rename to storage/roadmaps/1-frontend/learn/4-Modern-Frontend-Applications.md
diff --git a/storage/roadmaps/frontend/learn/5-Automated-Testing.md b/storage/roadmaps/1-frontend/learn/5-Automated-Testing.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/5-Automated-Testing.md
rename to storage/roadmaps/1-frontend/learn/5-Automated-Testing.md
diff --git a/storage/roadmaps/frontend/learn/6-Static-Type-Checkers.md b/storage/roadmaps/1-frontend/learn/6-Static-Type-Checkers.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/6-Static-Type-Checkers.md
rename to storage/roadmaps/1-frontend/learn/6-Static-Type-Checkers.md
diff --git a/storage/roadmaps/frontend/learn/7-Server-Side-Rendering.md b/storage/roadmaps/1-frontend/learn/7-Server-Side-Rendering.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/7-Server-Side-Rendering.md
rename to storage/roadmaps/1-frontend/learn/7-Server-Side-Rendering.md
diff --git a/storage/roadmaps/frontend/learn/8-Go-Beyond.md b/storage/roadmaps/1-frontend/learn/8-Go-Beyond.md
similarity index 100%
rename from storage/roadmaps/frontend/learn/8-Go-Beyond.md
rename to storage/roadmaps/1-frontend/learn/8-Go-Beyond.md
diff --git a/storage/roadmaps/frontend/meta.json b/storage/roadmaps/1-frontend/meta.json
similarity index 83%
rename from storage/roadmaps/frontend/meta.json
rename to storage/roadmaps/1-frontend/meta.json
index 33068885b..ea517ea6b 100644
--- a/storage/roadmaps/frontend/meta.json
+++ b/storage/roadmaps/1-frontend/meta.json
@@ -2,7 +2,6 @@
"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 2019",
- "picture": "/static/roadmaps/{version}/frontend.png",
"featured": true,
"versions": [
"latest",
diff --git a/storage/roadmaps/frontend/summary.md b/storage/roadmaps/1-frontend/summary.md
similarity index 100%
rename from storage/roadmaps/frontend/summary.md
rename to storage/roadmaps/1-frontend/summary.md
diff --git a/storage/roadmaps/2-backend/landscape/1-Junior.md b/storage/roadmaps/2-backend/landscape/1-Junior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/2-backend/landscape/2-Intermediate.md b/storage/roadmaps/2-backend/landscape/2-Intermediate.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/2-backend/landscape/3-Senior.md b/storage/roadmaps/2-backend/landscape/3-Senior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/2-backend/meta.json b/storage/roadmaps/2-backend/meta.json
new file mode 100644
index 000000000..883478bb2
--- /dev/null
+++ b/storage/roadmaps/2-backend/meta.json
@@ -0,0 +1,6 @@
+{
+ "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 2019",
+ "featured": true
+}
diff --git a/storage/roadmaps/2-backend/summary.md b/storage/roadmaps/2-backend/summary.md
new file mode 100644
index 000000000..4f1dae73f
--- /dev/null
+++ b/storage/roadmaps/2-backend/summary.md
@@ -0,0 +1,2 @@
+## Backend Developer
+How to become a backend frontend developer
diff --git a/storage/roadmaps/3-devops/landscape/1-Junior.md b/storage/roadmaps/3-devops/landscape/1-Junior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/3-devops/landscape/2-Intermediate.md b/storage/roadmaps/3-devops/landscape/2-Intermediate.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/3-devops/landscape/3-Senior.md b/storage/roadmaps/3-devops/landscape/3-Senior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/3-devops/meta.json b/storage/roadmaps/3-devops/meta.json
new file mode 100644
index 000000000..f037c2f53
--- /dev/null
+++ b/storage/roadmaps/3-devops/meta.json
@@ -0,0 +1,11 @@
+{
+ "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 2019",
+ "featured": true,
+ "versions": [
+ "latest",
+ "2018",
+ "2017"
+ ]
+}
diff --git a/storage/roadmaps/3-devops/summary.md b/storage/roadmaps/3-devops/summary.md
new file mode 100644
index 000000000..05ab94903
--- /dev/null
+++ b/storage/roadmaps/3-devops/summary.md
@@ -0,0 +1,2 @@
+## DevOps Roadmap
+Roadmap for any operations role
diff --git a/storage/roadmaps/4-fullstack/landscape/1-Junior.md b/storage/roadmaps/4-fullstack/landscape/1-Junior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/4-fullstack/landscape/2-Intermediate.md b/storage/roadmaps/4-fullstack/landscape/2-Intermediate.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/4-fullstack/landscape/3-Senior.md b/storage/roadmaps/4-fullstack/landscape/3-Senior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/4-fullstack/meta.json b/storage/roadmaps/4-fullstack/meta.json
new file mode 100644
index 000000000..55bc00f4c
--- /dev/null
+++ b/storage/roadmaps/4-fullstack/meta.json
@@ -0,0 +1,6 @@
+{
+ "title": "Full Stack Developer",
+ "description": "Step by step guide to becoming a modern fullstack developer in 2019",
+ "featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
+ "upcoming": true
+}
diff --git a/storage/roadmaps/4-fullstack/summary.md b/storage/roadmaps/4-fullstack/summary.md
new file mode 100644
index 000000000..92ab71046
--- /dev/null
+++ b/storage/roadmaps/4-fullstack/summary.md
@@ -0,0 +1,2 @@
+## Fullstack Roadmap
+Roadmap to becoming a fullstack developer
diff --git a/storage/roadmaps/5-qa/landscape/1-Junior.md b/storage/roadmaps/5-qa/landscape/1-Junior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/5-qa/landscape/2-Intermediate.md b/storage/roadmaps/5-qa/landscape/2-Intermediate.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/5-qa/landscape/3-Senior.md b/storage/roadmaps/5-qa/landscape/3-Senior.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/storage/roadmaps/5-qa/meta.json b/storage/roadmaps/5-qa/meta.json
new file mode 100644
index 000000000..27367b04d
--- /dev/null
+++ b/storage/roadmaps/5-qa/meta.json
@@ -0,0 +1,6 @@
+{
+ "title": "QA Engineer",
+ "description": "Steps to follow in order to become a modern QA Engineer in 2019",
+ "featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
+ "upcoming": true
+}
diff --git a/storage/roadmaps/5-qa/summary.md b/storage/roadmaps/5-qa/summary.md
new file mode 100644
index 000000000..540cb46c0
--- /dev/null
+++ b/storage/roadmaps/5-qa/summary.md
@@ -0,0 +1,2 @@
+## QA Roadmap
+Roadmap to becoming a QA Engineer