diff --git a/src/pages/ai-data-scientist/career-path.astro b/src/pages/ai-data-scientist/career-path.astro
index bca35672d..aa3a97c6f 100644
--- a/src/pages/ai-data-scientist/career-path.astro
+++ b/src/pages/ai-data-scientist/career-path.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/lifecycle.astro b/src/pages/ai-data-scientist/lifecycle.astro
index 9347bca71..dfebe1135 100644
--- a/src/pages/ai-data-scientist/lifecycle.astro
+++ b/src/pages/ai-data-scientist/lifecycle.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/skills.astro b/src/pages/ai-data-scientist/skills.astro
index bc3e50c76..7451f5750 100644
--- a/src/pages/ai-data-scientist/skills.astro
+++ b/src/pages/ai-data-scientist/skills.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/tools.astro b/src/pages/ai-data-scientist/tools.astro
index 433b6a9fe..fe6c3dc98 100644
--- a/src/pages/ai-data-scientist/tools.astro
+++ b/src/pages/ai-data-scientist/tools.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-ai.astro b/src/pages/ai-data-scientist/vs-ai.astro
index fa7a21766..d17ad2c6e 100644
--- a/src/pages/ai-data-scientist/vs-ai.astro
+++ b/src/pages/ai-data-scientist/vs-ai.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-business-analytics.astro b/src/pages/ai-data-scientist/vs-business-analytics.astro
index a1fc61f66..e2d899091 100644
--- a/src/pages/ai-data-scientist/vs-business-analytics.astro
+++ b/src/pages/ai-data-scientist/vs-business-analytics.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-computer-science.astro b/src/pages/ai-data-scientist/vs-computer-science.astro
index 6df46bde1..7d633397d 100644
--- a/src/pages/ai-data-scientist/vs-computer-science.astro
+++ b/src/pages/ai-data-scientist/vs-computer-science.astro
@@ -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}`;
---
diff --git a/src/pages/ai-data-scientist/vs-cyber-security.astro b/src/pages/ai-data-scientist/vs-cyber-security.astro
index 216ef2390..2cf17a29c 100644
--- a/src/pages/ai-data-scientist/vs-cyber-security.astro
+++ b/src/pages/ai-data-scientist/vs-cyber-security.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-data-analytics.astro b/src/pages/ai-data-scientist/vs-data-analytics.astro
index 1df2ac4b9..9b09c0b52 100644
--- a/src/pages/ai-data-scientist/vs-data-analytics.astro
+++ b/src/pages/ai-data-scientist/vs-data-analytics.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-data-engineering.astro b/src/pages/ai-data-scientist/vs-data-engineering.astro
index abd369879..3d23de45b 100644
--- a/src/pages/ai-data-scientist/vs-data-engineering.astro
+++ b/src/pages/ai-data-scientist/vs-data-engineering.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-machine-learning.astro b/src/pages/ai-data-scientist/vs-machine-learning.astro
index b9f38bbcf..e492f5850 100644
--- a/src/pages/ai-data-scientist/vs-machine-learning.astro
+++ b/src/pages/ai-data-scientist/vs-machine-learning.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-software-engineering.astro b/src/pages/ai-data-scientist/vs-software-engineering.astro
index 385b72467..6248d6be6 100644
--- a/src/pages/ai-data-scientist/vs-software-engineering.astro
+++ b/src/pages/ai-data-scientist/vs-software-engineering.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/ai-data-scientist/vs-statistics.astro b/src/pages/ai-data-scientist/vs-statistics.astro
index f67188ee0..c99b09fa8 100644
--- a/src/pages/ai-data-scientist/vs-statistics.astro
+++ b/src/pages/ai-data-scientist/vs-statistics.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/backend/developer-skills.astro b/src/pages/backend/developer-skills.astro
index 3010e657e..63ca4b875 100644
--- a/src/pages/backend/developer-skills.astro
+++ b/src/pages/backend/developer-skills.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/backend/developer-tools.astro b/src/pages/backend/developer-tools.astro
index d00f49ca1..b71d34920 100644
--- a/src/pages/backend/developer-tools.astro
+++ b/src/pages/backend/developer-tools.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/backend/frameworks.astro b/src/pages/backend/frameworks.astro
index aef48f7cb..64f7cb2f6 100644
--- a/src/pages/backend/frameworks.astro
+++ b/src/pages/backend/frameworks.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/backend/job-description.astro b/src/pages/backend/job-description.astro
index 61af69fca..b1d2c0e28 100644
--- a/src/pages/backend/job-description.astro
+++ b/src/pages/backend/job-description.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/backend/languages.astro b/src/pages/backend/languages.astro
index cd00a4719..5111c4249 100644
--- a/src/pages/backend/languages.astro
+++ b/src/pages/backend/languages.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/backend/project-ideas.astro b/src/pages/backend/project-ideas.astro
index c9d714942..b3f0e0009 100644
--- a/src/pages/backend/project-ideas.astro
+++ b/src/pages/backend/project-ideas.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/backend/technologies.astro b/src/pages/backend/technologies.astro
index 0efcd5018..b0a12759f 100644
--- a/src/pages/backend/technologies.astro
+++ b/src/pages/backend/technologies.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/data-analyst/career-path.astro b/src/pages/data-analyst/career-path.astro
index a14f15e8a..e5d06342f 100644
--- a/src/pages/data-analyst/career-path.astro
+++ b/src/pages/data-analyst/career-path.astro
@@ -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}`;
---
diff --git a/src/pages/data-analyst/how-to-become.astro b/src/pages/data-analyst/how-to-become.astro
index 2d4e2fac6..9e6e9b5b1 100644
--- a/src/pages/data-analyst/how-to-become.astro
+++ b/src/pages/data-analyst/how-to-become.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/data-analyst/vs-data-engineer.astro b/src/pages/data-analyst/vs-data-engineer.astro
index 71b7f9452..2cca00cb3 100644
--- a/src/pages/data-analyst/vs-data-engineer.astro
+++ b/src/pages/data-analyst/vs-data-engineer.astro
@@ -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}`;
---
-
+
-
\ No newline at end of file
+
diff --git a/src/pages/devops/automation-tools.astro b/src/pages/devops/automation-tools.astro
index e1b18f847..f6a2c2507 100644
--- a/src/pages/devops/automation-tools.astro
+++ b/src/pages/devops/automation-tools.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/automation.astro b/src/pages/devops/automation.astro
index c6f1a3d36..1fda13d5a 100644
--- a/src/pages/devops/automation.astro
+++ b/src/pages/devops/automation.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/best-practices.astro b/src/pages/devops/best-practices.astro
index e0ce7f19f..c12bdd063 100644
--- a/src/pages/devops/best-practices.astro
+++ b/src/pages/devops/best-practices.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/career-path.astro b/src/pages/devops/career-path.astro
index 592f9ea57..3a9678945 100644
--- a/src/pages/devops/career-path.astro
+++ b/src/pages/devops/career-path.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/devops-engineer.astro b/src/pages/devops/devops-engineer.astro
index abf33c5a8..f5eea49e3 100644
--- a/src/pages/devops/devops-engineer.astro
+++ b/src/pages/devops/devops-engineer.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/devops-vs-sre.astro b/src/pages/devops/devops-vs-sre.astro
index b8a83f091..ff7c00687 100644
--- a/src/pages/devops/devops-vs-sre.astro
+++ b/src/pages/devops/devops-vs-sre.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/how-to-become-devops-engineer.astro b/src/pages/devops/how-to-become-devops-engineer.astro
index e0d333c09..60b34e7c9 100644
--- a/src/pages/devops/how-to-become-devops-engineer.astro
+++ b/src/pages/devops/how-to-become-devops-engineer.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/job-description.astro b/src/pages/devops/job-description.astro
index e6455932d..266f08903 100644
--- a/src/pages/devops/job-description.astro
+++ b/src/pages/devops/job-description.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/devops/lifecycle.astro b/src/pages/devops/lifecycle.astro
index cdf5c514d..20e5a512c 100644
--- a/src/pages/devops/lifecycle.astro
+++ b/src/pages/devops/lifecycle.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/principles.astro b/src/pages/devops/principles.astro
index 6bad64ced..0ff7ae8b8 100644
--- a/src/pages/devops/principles.astro
+++ b/src/pages/devops/principles.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/shift-left-testing.astro b/src/pages/devops/shift-left-testing.astro
index 439e7ffb5..3b8a15b99 100644
--- a/src/pages/devops/shift-left-testing.astro
+++ b/src/pages/devops/shift-left-testing.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/skills.astro b/src/pages/devops/skills.astro
index b067817a8..3ce2c1df9 100644
--- a/src/pages/devops/skills.astro
+++ b/src/pages/devops/skills.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/test-automation.astro b/src/pages/devops/test-automation.astro
index b03226944..9ec30b444 100644
--- a/src/pages/devops/test-automation.astro
+++ b/src/pages/devops/test-automation.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/devops/tools.astro b/src/pages/devops/tools.astro
index 2d4be2ac2..cbab7c78a 100644
--- a/src/pages/devops/tools.astro
+++ b/src/pages/devops/tools.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/vs-agile.astro b/src/pages/devops/vs-agile.astro
index fa497f10b..7353d5c77 100644
--- a/src/pages/devops/vs-agile.astro
+++ b/src/pages/devops/vs-agile.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/devops/vs-developer.astro b/src/pages/devops/vs-developer.astro
index 08c31adf0..6b2b51be8 100644
--- a/src/pages/devops/vs-developer.astro
+++ b/src/pages/devops/vs-developer.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/devops/vs-devsecops.astro b/src/pages/devops/vs-devsecops.astro
index c4047865b..4fd5c9c6d 100644
--- a/src/pages/devops/vs-devsecops.astro
+++ b/src/pages/devops/vs-devsecops.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/devops/vs-full-stack.astro b/src/pages/devops/vs-full-stack.astro
index 0cff40988..c1bee0320 100644
--- a/src/pages/devops/vs-full-stack.astro
+++ b/src/pages/devops/vs-full-stack.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/developer-skills.astro b/src/pages/frontend/developer-skills.astro
index dd7c0b5e7..a87e1178f 100644
--- a/src/pages/frontend/developer-skills.astro
+++ b/src/pages/frontend/developer-skills.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/frameworks.astro b/src/pages/frontend/frameworks.astro
index fd535680e..db4814399 100644
--- a/src/pages/frontend/frameworks.astro
+++ b/src/pages/frontend/frameworks.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/how-to-become-frontend-developer.astro b/src/pages/frontend/how-to-become-frontend-developer.astro
index 353f86660..3f027263c 100644
--- a/src/pages/frontend/how-to-become-frontend-developer.astro
+++ b/src/pages/frontend/how-to-become-frontend-developer.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/job-description.astro b/src/pages/frontend/job-description.astro
index 5aaa73729..dd2f09e67 100644
--- a/src/pages/frontend/job-description.astro
+++ b/src/pages/frontend/job-description.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/languages.astro b/src/pages/frontend/languages.astro
index ee1ada208..bc2b0cbca 100644
--- a/src/pages/frontend/languages.astro
+++ b/src/pages/frontend/languages.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/technologies.astro b/src/pages/frontend/technologies.astro
index 4477e9304..d984361fa 100644
--- a/src/pages/frontend/technologies.astro
+++ b/src/pages/frontend/technologies.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/frontend/web-developer-portfolio.astro b/src/pages/frontend/web-developer-portfolio.astro
index 63fe99b9e..6678df95a 100644
--- a/src/pages/frontend/web-developer-portfolio.astro
+++ b/src/pages/frontend/web-developer-portfolio.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/full-stack/developer-skills.astro b/src/pages/full-stack/developer-skills.astro
index d48ecd76d..334447526 100644
--- a/src/pages/full-stack/developer-skills.astro
+++ b/src/pages/full-stack/developer-skills.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/full-stack/how-to-become.astro b/src/pages/full-stack/how-to-become.astro
index e23b2b38c..b9b9e3c4d 100644
--- a/src/pages/full-stack/how-to-become.astro
+++ b/src/pages/full-stack/how-to-become.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/full-stack/job-description.astro b/src/pages/full-stack/job-description.astro
index d963039fa..29f189793 100644
--- a/src/pages/full-stack/job-description.astro
+++ b/src/pages/full-stack/job-description.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/full-stack/vs-backend.astro b/src/pages/full-stack/vs-backend.astro
index 617918749..c4819a680 100644
--- a/src/pages/full-stack/vs-backend.astro
+++ b/src/pages/full-stack/vs-backend.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/full-stack/vs-software-engineer.astro b/src/pages/full-stack/vs-software-engineer.astro
index 6d04fa25d..df3eda974 100644
--- a/src/pages/full-stack/vs-software-engineer.astro
+++ b/src/pages/full-stack/vs-software-engineer.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/golang/rest-api.astro b/src/pages/golang/rest-api.astro
index 90acda95e..606408e0e 100644
--- a/src/pages/golang/rest-api.astro
+++ b/src/pages/golang/rest-api.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/golang/vs-java.astro b/src/pages/golang/vs-java.astro
index c8ced7e9d..20016ffed 100644
--- a/src/pages/golang/vs-java.astro
+++ b/src/pages/golang/vs-java.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/guides/[guideId].astro b/src/pages/guides/[guideId].astro
deleted file mode 100644
index c6a7f28c7..000000000
--- a/src/pages/guides/[guideId].astro
+++ /dev/null
@@ -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,
- });
----
-
-
-
-
-
-
diff --git a/src/pages/java/developer-skills.astro b/src/pages/java/developer-skills.astro
index 28d0b714f..06dbcc625 100644
--- a/src/pages/java/developer-skills.astro
+++ b/src/pages/java/developer-skills.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/java/vs-javascript.astro b/src/pages/java/vs-javascript.astro
index 46343ae44..7bcc471bf 100644
--- a/src/pages/java/vs-javascript.astro
+++ b/src/pages/java/vs-javascript.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/java/vs-python.astro b/src/pages/java/vs-python.astro
index 7f8632aa5..5dd4b271a 100644
--- a/src/pages/java/vs-python.astro
+++ b/src/pages/java/vs-python.astro
@@ -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}`;
---
-
-
+
+
diff --git a/src/pages/javascript/vs-typescript.astro b/src/pages/javascript/vs-typescript.astro
index 46351390a..b7d74e8e7 100644
--- a/src/pages/javascript/vs-typescript.astro
+++ b/src/pages/javascript/vs-typescript.astro
@@ -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}`;
---
-
+
diff --git a/src/pages/sql/hard-to-learn.astro b/src/pages/sql/hard-to-learn.astro
index 75fdeab5d..e33652363 100644
--- a/src/pages/sql/hard-to-learn.astro
+++ b/src/pages/sql/hard-to-learn.astro
@@ -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}`;
---
-
-
-
\ No newline at end of file
+
+
+
diff --git a/src/pages/sql/how-long-to-learn.astro b/src/pages/sql/how-long-to-learn.astro
index bcae6a815..47cfa82e6 100644
--- a/src/pages/sql/how-long-to-learn.astro
+++ b/src/pages/sql/how-long-to-learn.astro
@@ -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}`;
---
-
-
-
\ No newline at end of file
+
+
+
diff --git a/src/pages/sql/vs-mysql.astro b/src/pages/sql/vs-mysql.astro
index 8076683e8..4e6f39ce7 100644
--- a/src/pages/sql/vs-mysql.astro
+++ b/src/pages/sql/vs-mysql.astro
@@ -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}`;
---
-
+
-
\ No newline at end of file
+
diff --git a/src/pages/sql/vs-python.astro b/src/pages/sql/vs-python.astro
index cec52ad78..6aebf61c0 100644
--- a/src/pages/sql/vs-python.astro
+++ b/src/pages/sql/vs-python.astro
@@ -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}`;
---
-
+
-
\ No newline at end of file
+
+