mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-08-19 23:53:24 +02:00
wip
This commit is contained in:
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-career-path';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'career-path';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/career-path`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-lifecycle';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'lifecycle';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/lifecycle`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'skills';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/skills`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-tools';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'tools';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/tools`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-ai';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-ai';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-ai`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-business-analytics';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-business-analytics';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-business-analytics`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,28 +1,28 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-computer-science';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-computer-science';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-computer-science`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-cyber-security';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-cyber-security';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-cyber-security`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-data-analytics';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-data-analytics';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-data-analytics`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-data-engineering';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-data-engineering';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-data-engineering`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-machine-learning';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-machine-learning';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-machine-learning`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-software-engineering';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-software-engineering';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-software-engineering`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'ai-data-scientist-vs-statistics';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-statistics';
|
||||
const roadmapId = 'ai-data-scientist';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/ai-data-scientist/vs-statistics`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-developer-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'developer-skills';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/backend/developer-skills`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-developer-tools';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'developer-tools';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/backend/developer-tools`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,33 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-frameworks';
|
||||
const guide = await getGuideById(guideId).catch(() => null);
|
||||
if (!guide) {
|
||||
return Astro.redirect('/404');
|
||||
}
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'frameworks';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/backend/frameworks`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,29 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-job-description';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo?.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={replaceVariables(guideData?.seo?.title)}
|
||||
description={replaceVariables(guideData?.seo?.description)}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
</BaseLayout>
|
||||
|
@@ -1,33 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-languages';
|
||||
const guide = await getGuideById(guideId).catch(() => null);
|
||||
if (!guide) {
|
||||
return Astro.redirect('/404');
|
||||
}
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'languages';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/backend/languages`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-project-ideas';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'project-ideas';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/backend/project-ideas`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,33 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'backend-technologies';
|
||||
const guide = await getGuideById(guideId).catch(() => null);
|
||||
if (!guide) {
|
||||
return Astro.redirect('/404');
|
||||
}
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'technologies';
|
||||
const roadmapId = 'backend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -5,7 +5,8 @@ import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'career-path';
|
||||
const guide = await getOfficialGuide(guideId, 'data-analyst');
|
||||
const roadmapId = 'data-analyst';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guide?.seo?.ogImageUrl ||
|
||||
@@ -13,13 +14,15 @@ const ogImageUrl =
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={`/data-analyst/career-path`}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl || ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} client:load />
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'data-analyst-how-to-become';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'how-to-become';
|
||||
const roadmapId = 'data-analyst';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/data-analyst/how-to-become`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'data-analyst-vs-data-engineer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-data-engineer';
|
||||
const roadmapId = 'data-analyst';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/data-analyst/vs-data-engineer`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-automation-tools';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'automation-tools';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-automation';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'automation';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-best-practices';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'best-practices';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-career-path';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'career-path';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={replaceVariables(guideData.seo.title)}
|
||||
description={replaceVariables(guideData.seo.description)}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,32 +1,32 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
export const prerender = false;
|
||||
|
||||
const guideId = 'devops-engineer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-vs-sre';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'how-to-become-devops-engineer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-job-description';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'job-description';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-lifecycle';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'lifecycle';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-principles';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'principles';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-shift-left-testing';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'shift-left-testing';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'skills';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-test-automation';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'test-automation';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-tools';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'tools';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-vs-agile';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-agile';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-vs-developer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-developer';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={replaceVariables(guideData.seo.title)}
|
||||
description={replaceVariables(guideData.seo.description)}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-vs-devsecops';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-devsecops';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'devops-vs-full-stack';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-full-stack';
|
||||
const roadmapId = 'devops';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-developer-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'developer-skills';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-frameworks';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'frameworks';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'how-to-become-frontend-developer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-job-description';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'job-description';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo?.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={replaceVariables(guideData?.seo?.title)}
|
||||
description={replaceVariables(guideData?.seo?.description)}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-languages';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'languages';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,32 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-technologies';
|
||||
const guide = await getGuideById(guideId).catch(() => null);
|
||||
if (!guide) {
|
||||
return Astro.redirect('/404');
|
||||
}
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'technologies';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'frontend-web-developer-portfolio';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'web-developer-portfolio';
|
||||
const roadmapId = 'frontend';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'full-stack-developer-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'developer-skills';
|
||||
const roadmapId = 'full-stack';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'full-stack-how-to-become';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'how-to-become';
|
||||
const roadmapId = 'full-stack';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'full-stack-job-description';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'job-description';
|
||||
const roadmapId = 'full-stack';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'full-stack-vs-backend';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-backend';
|
||||
const roadmapId = 'full-stack';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'full-stack-vs-software-engineer';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-software-engineer';
|
||||
const roadmapId = 'full-stack';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,30 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'golang-rest-api';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'rest-api';
|
||||
const roadmapId = 'golang';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl ?? ''}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'go-vs-java';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-java';
|
||||
const roadmapId = 'golang';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl ?? ''}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,47 +0,0 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getAllGuides, type GuideFileType } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { replaceVariables } from '../../lib/markdown';
|
||||
|
||||
export const prerender = true;
|
||||
|
||||
export interface Props {
|
||||
guide: GuideFileType;
|
||||
}
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const guides = (await getAllGuides()).filter(
|
||||
(guide) => !guide.frontmatter.excludedBySlug,
|
||||
);
|
||||
|
||||
return guides.map((guide) => ({
|
||||
params: { guideId: guide.id },
|
||||
props: { guide },
|
||||
}));
|
||||
}
|
||||
|
||||
const { guideId } = Astro.params;
|
||||
const { guide } = Astro.props;
|
||||
const { frontmatter: guideData, author } = guide;
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/guides/${guideId}`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
|
||||
<div slot="changelog-banner" />
|
||||
</BaseLayout>
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'java-developer-skills';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'developer-skills';
|
||||
const roadmapId = 'java';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'java-vs-javascript';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-javascript';
|
||||
const roadmapId = 'java';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'java-vs-python';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-python';
|
||||
const roadmapId = 'java';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={guideData.excludedBySlug}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner" />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'javascript-vs-typescript';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-typescript';
|
||||
const roadmapId = 'javascript';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/javascript/vs-typescript`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'sql-hard-to-learn';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'hard-to-learn';
|
||||
const roadmapId = 'sql';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/sql/hard-to-learn`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner"></div>
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'sql-how-long-to-learn';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'how-long-to-learn';
|
||||
const roadmapId = 'sql';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/sql/how-long-to-learn`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<div slot="changelog-banner"></div>
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
@@ -1,29 +1,30 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'sql-vs-mysql';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-mysql';
|
||||
const roadmapId = 'sql';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/sql/vs-mysql`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
@@ -1,29 +1,31 @@
|
||||
---
|
||||
import GuideContent from '../../components/Guide/GuideContent.astro';
|
||||
import { GuideContent } from '../../components/Guide/GuideContent';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import { getGuideById } from '../../lib/guide';
|
||||
import { getOpenGraphImageUrl } from '../../lib/open-graph';
|
||||
import { getOfficialGuide } from '../../queries/official-guide';
|
||||
|
||||
const guideId = 'sql-vs-python';
|
||||
const guide = await getGuideById(guideId);
|
||||
|
||||
const { frontmatter: guideData } = guide!;
|
||||
const guideId = 'vs-python';
|
||||
const roadmapId = 'sql';
|
||||
const guide = await getOfficialGuide(guideId, roadmapId);
|
||||
|
||||
const ogImageUrl =
|
||||
guideData.seo.ogImageUrl ||
|
||||
guide?.seo?.ogImageUrl ||
|
||||
getOpenGraphImageUrl({
|
||||
group: 'guide',
|
||||
resourceId: guideId,
|
||||
});
|
||||
|
||||
const permalink = `/${roadmapId}/${guideId}`;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={guideData.seo.title}
|
||||
description={guideData.seo.description}
|
||||
permalink={`/sql/vs-python`}
|
||||
canonicalUrl={guideData.canonicalUrl}
|
||||
title={guide?.seo?.metaTitle ?? guide?.title ?? ''}
|
||||
description={guide?.seo?.metaDescription ?? guide?.description ?? ''}
|
||||
permalink={permalink}
|
||||
canonicalUrl={guide?.seo?.canonicalUrl}
|
||||
ogImageUrl={ogImageUrl}
|
||||
>
|
||||
<GuideContent guide={guide!} />
|
||||
<GuideContent guide={guide!} client:load />
|
||||
<div slot='changelog-banner'></div>
|
||||
</BaseLayout>
|
||||
|
||||
|
Reference in New Issue
Block a user