mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-02-24 19:42:51 +01:00
Add roadmaps meta generator
This commit is contained in:
parent
9b5f23f6f7
commit
998ddbe7ec
@ -1,93 +1,71 @@
|
||||
import Link from 'next/link';
|
||||
import classNames from 'classnames';
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||
import { faEnvelope, faClock, faHandshake, faArrowLeft } from '@fortawesome/free-solid-svg-icons';
|
||||
import {
|
||||
SummaryContainer,
|
||||
Title,
|
||||
Description,
|
||||
Image,
|
||||
Header,
|
||||
Summary,
|
||||
VersionLink,
|
||||
VersionList,
|
||||
} from './style';
|
||||
import { faArrowLeft, faClock, faEnvelope, faHandshake } from '@fortawesome/free-solid-svg-icons';
|
||||
import { Description, Header, Summary, SummaryContainer, Title, VersionList } from './style';
|
||||
import SharePage from 'components/share-page';
|
||||
import { BadgeLink, BadgesList, PrimaryBadge, SecondaryBadge, DarkBadge } from 'components/badges';
|
||||
import { BadgeLink, BadgesList, DarkBadge, PrimaryBadge, SecondaryBadge } from 'components/badges';
|
||||
import GuideBody from 'components/guide-body';
|
||||
import siteConfig from "storage/site";
|
||||
|
||||
const isActiveRoadmap = (loadedVersion, roadmapVersion) => (
|
||||
(loadedVersion === roadmapVersion) ||
|
||||
(loadedVersion === 'latest' && parseInt(roadmapVersion, 10) === (new Date()).getFullYear())
|
||||
);
|
||||
|
||||
const UpcomingGuide = require(`../../storage/guides/upcoming.md`).default;
|
||||
|
||||
const RoadmapSummary = ({ roadmap }) => (
|
||||
<SummaryContainer>
|
||||
<Header>
|
||||
<Title>{ roadmap.title }</Title>
|
||||
<Description>{ roadmap.description }</Description>
|
||||
const RoadmapSummary = ({ roadmap }) => {
|
||||
return (
|
||||
<SummaryContainer>
|
||||
<Header>
|
||||
<Title>{ roadmap.title }</Title>
|
||||
<Description>{ roadmap.description }</Description>
|
||||
|
||||
<BadgesList className="mt-4">
|
||||
<BadgeLink href="/roadmaps">
|
||||
<DarkBadge>
|
||||
<FontAwesomeIcon icon={faArrowLeft}/>
|
||||
Other Roadmaps
|
||||
</DarkBadge>
|
||||
</BadgeLink>
|
||||
{ roadmap.upcoming && (
|
||||
<SecondaryBadge>
|
||||
<FontAwesomeIcon icon={faClock}/>
|
||||
Upcoming Roadmap
|
||||
</SecondaryBadge>
|
||||
) }
|
||||
{ !roadmap.upcoming && (
|
||||
<BadgeLink href={`${siteConfig.url.issue}?title=[${roadmap.title}] - Title Here`} target="_blank">
|
||||
<SecondaryBadge>
|
||||
<FontAwesomeIcon icon={faHandshake}/>
|
||||
Suggest Changes
|
||||
</SecondaryBadge>
|
||||
<BadgesList className="mt-4">
|
||||
<BadgeLink href="/roadmaps">
|
||||
<DarkBadge>
|
||||
<FontAwesomeIcon icon={ faArrowLeft } />
|
||||
Other Roadmaps
|
||||
</DarkBadge>
|
||||
</BadgeLink>
|
||||
) }
|
||||
{ roadmap.upcoming && (
|
||||
<SecondaryBadge>
|
||||
<FontAwesomeIcon icon={ faClock } />
|
||||
Upcoming Roadmap
|
||||
</SecondaryBadge>
|
||||
) }
|
||||
{ !roadmap.upcoming && (
|
||||
<BadgeLink href={ `${siteConfig.url.issue}?title=[${roadmap.title}] - Title Here` } target="_blank">
|
||||
<SecondaryBadge>
|
||||
<FontAwesomeIcon icon={ faHandshake } />
|
||||
Suggest Changes
|
||||
</SecondaryBadge>
|
||||
</BadgeLink>
|
||||
) }
|
||||
|
||||
<BadgeLink href="/signup">
|
||||
<PrimaryBadge>
|
||||
<FontAwesomeIcon icon={faEnvelope}/>
|
||||
Send me Updates
|
||||
</PrimaryBadge>
|
||||
</BadgeLink>
|
||||
</BadgesList>
|
||||
<BadgeLink href="/signup">
|
||||
<PrimaryBadge>
|
||||
<FontAwesomeIcon icon={ faEnvelope } />
|
||||
Send me Updates
|
||||
</PrimaryBadge>
|
||||
</BadgeLink>
|
||||
</BadgesList>
|
||||
|
||||
<VersionList className="border-bottom">
|
||||
{ (roadmap.versions || []).map(versionItem => (
|
||||
<Link href={ `${roadmap.url}/${versionItem}` } passHref key={ versionItem }>
|
||||
<VersionLink className={ classNames({
|
||||
active: isActiveRoadmap(versionItem, roadmap.version),
|
||||
}) }>{ versionItem } Version</VersionLink>
|
||||
</Link>
|
||||
)) }
|
||||
</VersionList>
|
||||
</Header>
|
||||
<Summary>
|
||||
{
|
||||
roadmap.upcoming && (
|
||||
<GuideBody>
|
||||
<UpcomingGuide />
|
||||
</GuideBody>
|
||||
)
|
||||
}
|
||||
{
|
||||
!roadmap.upcoming && (
|
||||
<div className="container">
|
||||
<Image src={ roadmap.picture } />
|
||||
<SharePage title={ roadmap.description } url={ roadmap.url } />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</Summary>
|
||||
</SummaryContainer>
|
||||
);
|
||||
<VersionList className="border-bottom" />
|
||||
</Header>
|
||||
<Summary>
|
||||
{
|
||||
roadmap.upcoming && (
|
||||
<GuideBody>
|
||||
<UpcomingGuide />
|
||||
</GuideBody>
|
||||
)
|
||||
}
|
||||
{
|
||||
!roadmap.upcoming && (
|
||||
<div className="container">
|
||||
<p>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?</p>
|
||||
<SharePage title={ roadmap.description } url={ roadmap.url } />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</Summary>
|
||||
</SummaryContainer>
|
||||
)
|
||||
};
|
||||
|
||||
export default RoadmapSummary;
|
||||
|
@ -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",
|
||||
|
@ -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');
|
||||
|
76
scripts/roadmaps-meta.js
Normal file
76
scripts/roadmaps-meta.js
Normal file
@ -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));
|
@ -1,87 +1,201 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
<url>
|
||||
<loc>https://roadmap.sh/frontend</loc>
|
||||
<loc>https://roadmap.sh/1-frontend</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.372Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.144Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/frontend/latest</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/junior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.372Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.144Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/frontend/2018</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/intermediate</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.349Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/frontend/2017</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/senior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.335Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/backend</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/job-ready</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.367Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/backend/latest</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/write-better-css</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.367Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/backend/2018</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/build-tools</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.341Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/backend/2017</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/modern-frontend-applications</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.331Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/devops</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/automated-testing</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.369Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.145Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/devops/latest</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/static-type-checkers</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.369Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.146Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/devops/2018</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/server-side-rendering</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.343Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.146Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/devops/2017</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/go-beyond</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T09:32:19.333Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.146Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/fullstack</loc>
|
||||
<loc>https://roadmap.sh/1-frontend/summary</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T12:14:26.816Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.146Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/qa-engineer</loc>
|
||||
<loc>https://roadmap.sh/2-backend</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-16T12:14:26.817Z</lastmod>
|
||||
<lastmod>2019-11-27T20:16:53.146Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/2-backend/junior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/2-backend/intermediate</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/2-backend/senior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/2-backend/summary</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/3-devops</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/3-devops/junior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/3-devops/intermediate</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/3-devops/senior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/3-devops/summary</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.148Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/4-fullstack</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/4-fullstack/junior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/4-fullstack/intermediate</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/4-fullstack/senior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/4-fullstack/summary</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/5-qa</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/5-qa/junior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/5-qa/intermediate</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/5-qa/senior</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://roadmap.sh/5-qa/summary</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<lastmod>2019-11-27T20:16:53.149Z</lastmod>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
@ -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",
|
0
storage/roadmaps/2-backend/landscape/1-Junior.md
Normal file
0
storage/roadmaps/2-backend/landscape/1-Junior.md
Normal file
0
storage/roadmaps/2-backend/landscape/3-Senior.md
Normal file
0
storage/roadmaps/2-backend/landscape/3-Senior.md
Normal file
6
storage/roadmaps/2-backend/meta.json
Normal file
6
storage/roadmaps/2-backend/meta.json
Normal file
@ -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
|
||||
}
|
2
storage/roadmaps/2-backend/summary.md
Normal file
2
storage/roadmaps/2-backend/summary.md
Normal file
@ -0,0 +1,2 @@
|
||||
## Backend Developer
|
||||
How to become a backend frontend developer
|
0
storage/roadmaps/3-devops/landscape/1-Junior.md
Normal file
0
storage/roadmaps/3-devops/landscape/1-Junior.md
Normal file
0
storage/roadmaps/3-devops/landscape/3-Senior.md
Normal file
0
storage/roadmaps/3-devops/landscape/3-Senior.md
Normal file
11
storage/roadmaps/3-devops/meta.json
Normal file
11
storage/roadmaps/3-devops/meta.json
Normal file
@ -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"
|
||||
]
|
||||
}
|
2
storage/roadmaps/3-devops/summary.md
Normal file
2
storage/roadmaps/3-devops/summary.md
Normal file
@ -0,0 +1,2 @@
|
||||
## DevOps Roadmap
|
||||
Roadmap for any operations role
|
0
storage/roadmaps/4-fullstack/landscape/1-Junior.md
Normal file
0
storage/roadmaps/4-fullstack/landscape/1-Junior.md
Normal file
0
storage/roadmaps/4-fullstack/landscape/3-Senior.md
Normal file
0
storage/roadmaps/4-fullstack/landscape/3-Senior.md
Normal file
6
storage/roadmaps/4-fullstack/meta.json
Normal file
6
storage/roadmaps/4-fullstack/meta.json
Normal file
@ -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
|
||||
}
|
2
storage/roadmaps/4-fullstack/summary.md
Normal file
2
storage/roadmaps/4-fullstack/summary.md
Normal file
@ -0,0 +1,2 @@
|
||||
## Fullstack Roadmap
|
||||
Roadmap to becoming a fullstack developer
|
0
storage/roadmaps/5-qa/landscape/1-Junior.md
Normal file
0
storage/roadmaps/5-qa/landscape/1-Junior.md
Normal file
0
storage/roadmaps/5-qa/landscape/2-Intermediate.md
Normal file
0
storage/roadmaps/5-qa/landscape/2-Intermediate.md
Normal file
0
storage/roadmaps/5-qa/landscape/3-Senior.md
Normal file
0
storage/roadmaps/5-qa/landscape/3-Senior.md
Normal file
6
storage/roadmaps/5-qa/meta.json
Normal file
6
storage/roadmaps/5-qa/meta.json
Normal file
@ -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
|
||||
}
|
2
storage/roadmaps/5-qa/summary.md
Normal file
2
storage/roadmaps/5-qa/summary.md
Normal file
@ -0,0 +1,2 @@
|
||||
## QA Roadmap
|
||||
Roadmap to becoming a QA Engineer
|
Loading…
x
Reference in New Issue
Block a user