feat(curriculum): add content to the 4 new certs (#62659)

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
Co-authored-by: moT01 <20648924+moT01@users.noreply.github.com>
This commit is contained in:
Huyen Nguyen
2025-10-27 08:43:04 -05:00
committed by GitHub
co-authored by Oliver Eyton-Williams moT01
parent 6bab524f2c
commit 26976b1d81
10 changed files with 1582 additions and 22 deletions
+4 -10
View File
@@ -5,6 +5,7 @@ const uniq = require('lodash/uniq');
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
const webpack = require('webpack');
const { SuperBlocks } = require('../shared-dist/config/curriculum');
const env = require('./config/env.json');
const {
createChallengePages,
@@ -182,15 +183,8 @@ exports.createPages = async function createPages({
)
);
const superBlocks = uniq(
result.data.allChallengeNode.edges.map(
({
node: {
challenge: { superBlock }
}
}) => superBlock
)
);
// Includes upcoming superBlocks
const allSuperBlocks = Object.values(SuperBlocks);
// Create intro pages
// TODO: Remove allMarkdownRemark (populate from elsewhere)
@@ -210,7 +204,7 @@ exports.createPages = async function createPages({
if (!blocks.includes(frontmatter.block)) {
return;
}
} else if (!superBlocks.includes(frontmatter.superBlock)) {
} else if (!allSuperBlocks.includes(frontmatter.superBlock)) {
return;
}
File diff suppressed because it is too large Load Diff
@@ -279,10 +279,7 @@ export const SuperBlockAccordion = ({
>
{chapter.modules.map(module => {
if (module.comingSoon && !showUpcomingChanges) {
if (
module.moduleType === 'review' ||
module.moduleType === 'exam'
) {
if (module.moduleType === 'review') {
return null;
}
+4 -1
View File
@@ -480,6 +480,9 @@ export function transformSuperBlock(
{ showComingSoon } = { showComingSoon: false }
) {
let blocks: BlockInfo[] = [];
const shouldAllowEmptyBlocks =
!showComingSoon &&
superblockData.chapters?.every(chapter => chapter.comingSoon);
// Handle simple blocks array format
if (superblockData.blocks) {
@@ -514,7 +517,7 @@ export function transformSuperBlock(
}
}
if (isEmpty(blocks)) {
if (isEmpty(blocks) && !shouldAllowEmptyBlocks) {
throw Error(`No blocks found in superblock data`);
}
@@ -2,9 +2,59 @@
"chapters": [
{
"dashedName": "back-end-development-and-apis",
"comingSoon": true,
"modules": [
{
"dashedName": "nodejs-core-libraries",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "node-package-manager",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "http-and-the-web-standards-model",
"comingSoon": true,
"blocks": ["lecture-understanding-the-http-request-response-model"]
},
{
"dashedName": "rest-api-and-web-services",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "introduction-to-express",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "express-middleware",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "error-handling-in-express",
"comingSoon": true,
"blocks": []
},
{ "dashedName": "websockets", "comingSoon": true, "blocks": [] },
{ "dashedName": "node-and-sql", "comingSoon": true, "blocks": [] },
{
"dashedName": "security-and-privacy",
"comingSoon": true,
"blocks": []
},
{ "dashedName": "authentication", "comingSoon": true, "blocks": [] },
{
"dashedName": "tooling-and-deployment",
"comingSoon": true,
"blocks": []
},
{
"moduleType": "exam",
"comingSoon": true,
"dashedName": "back-end-development-and-apis-certification-exam",
"blocks": ["exam-back-end-development-and-apis-certification"]
}
@@ -3,8 +3,97 @@
{
"dashedName": "front-end-development-libraries",
"modules": [
{
"dashedName": "react-fundamentals",
"blocks": [
"lecture-introduction-to-javascript-libraries-and-frameworks",
"workshop-reusable-mega-navbar",
"lab-reusable-footer",
"lecture-working-with-data-in-react",
"workshop-reusable-profile-card-component",
"lab-mood-board",
"review-react-basics",
"quiz-react-basics"
]
},
{
"dashedName": "react-state-hooks-and-routing",
"blocks": [
"lecture-working-with-state-and-responding-to-events-in-react",
"workshop-toggle-text-app",
"lab-color-picker",
"lecture-understanding-effects-and-referencing-values-in-react",
"workshop-fruit-search-app",
"lab-one-time-password-generator",
"review-react-state-and-hooks",
"quiz-react-state-and-hooks",
"lecture-working-with-forms-in-react",
"workshop-superhero-application-form",
"lab-event-rsvp",
"lecture-working-with-data-fetching-and-memoization-in-react",
"workshop-shopping-list-app",
"lab-currency-converter",
"lecture-routing-react-frameworks-and-dependency-management-tools",
"lab-tic-tac-toe",
"lecture-react-strategies-and-debugging",
"review-react-forms-data-fetching-and-routing",
"quiz-react-forms-data-fetching-and-routing"
]
},
{
"dashedName": "performance",
"blocks": [
"lecture-understanding-performance-in-web-applications",
"review-web-performance",
"quiz-web-performance"
]
},
{
"dashedName": "testing",
"blocks": [
"lecture-understanding-the-different-types-of-testing",
"review-testing",
"quiz-testing"
]
},
{
"dashedName": "css-libraries-and-frameworks",
"blocks": [
"lecture-working-with-css-libraries-and-frameworks",
"workshop-error-message-component",
"workshop-tailwind-cta-component",
"workshop-tailwind-pricing-component",
"lab-music-shopping-cart-page",
"lab-photography-exhibit",
"review-css-libraries-and-frameworks",
"quiz-css-libraries-and-frameworks"
]
},
{
"dashedName": "data-visualization",
"comingSoon": true,
"blocks": []
},
{
"dashedName": "typescript-fundamentals",
"comingSoon": true,
"blocks": [
"lecture-introduction-to-typescript",
"lecture-working-with-generics-and-type-narrowing",
"lecture-working-with-typescript-configuration-files",
"review-typescript",
"quiz-typescript"
]
},
{
"moduleType": "review",
"comingSoon": true,
"dashedName": "review-front-end-libraries",
"blocks": ["review-front-end-libraries"]
},
{
"moduleType": "exam",
"comingSoon": true,
"dashedName": "front-end-development-libraries-certification-exam",
"blocks": ["exam-front-end-development-libraries-certification"]
}
@@ -7,6 +7,8 @@
"dashedName": "javascript-variables-and-strings",
"blocks": [
"lecture-introduction-to-javascript",
"lecture-introduction-to-strings",
"lecture-understanding-code-clarity",
"workshop-greeting-bot",
"lab-javascript-trivia-bot",
"lab-sentence-maker",
@@ -19,6 +21,7 @@
"lecture-working-with-string-search-and-slice-methods",
"lecture-working-with-string-formatting-methods",
"lecture-working-with-string-modification-methods",
"workshop-string-transformer",
"review-javascript-strings",
"quiz-javascript-strings"
]
@@ -95,6 +98,7 @@
"lab-chunky-monkey",
"lab-profile-lookup",
"lab-repeat-a-string",
"lab-missing-letter-detector",
"review-javascript-loops",
"quiz-javascript-loops"
]
@@ -111,12 +115,18 @@
"lab-pyramid-generator",
"lab-gradebook-app",
"lecture-the-var-keyword-and-hoisting",
"lab-title-case-converter",
"lab-falsy-remover",
"lab-inventory-management-program",
"lecture-understanding-modules-imports-and-exports",
"lecture-working-with-the-arguments-object-and-rest-parameters",
"lab-unique-sorted-union",
"lab-password-generator",
"lab-sum-all-numbers-algorithm",
"lab-dna-pair-generator",
"lab-html-entitiy-converter",
"lab-odd-fibonacci-sum-calculator",
"lab-element-skipper",
"lab-optional-arguments-sum-function",
"review-javascript-fundamentals",
"quiz-javascript-fundamentals"
@@ -130,6 +140,12 @@
"lab-book-organizer",
"lab-sorted-index-finder",
"lab-symmetric-difference",
"lab-value-remover-function",
"lab-matching-object-filter",
"lab-prime-number-sum-calculator",
"lab-range-based-lcm-calculator",
"lab-deep-flattening-tool",
"lab-all-true-property-validator",
"review-javascript-higher-order-functions",
"quiz-javascript-higher-order-functions"
]
@@ -139,6 +155,7 @@
"blocks": [
"lecture-working-with-the-dom-click-events-and-web-apis",
"workshop-storytelling-app",
"workshop-emoji-reactor",
"lab-favorite-icon-toggler",
"lecture-understanding-the-event-object-and-event-delegation",
"workshop-music-instrument-filter",
@@ -177,6 +194,9 @@
"workshop-spam-filter",
"lab-palindrome-checker",
"lab-regex-sandbox",
"lab-spinal-case-converter",
"lab-pig-latin",
"lab-smart-word-replacement",
"review-javascript-regular-expressions",
"quiz-javascript-regular-expressions"
]
@@ -295,6 +315,7 @@
"blocks": ["review-javascript"]
},
{
"moduleType": "exam",
"dashedName": "javascript-certification-exam",
"comingSoon": true,
"blocks": ["exam-javascript-certification"]
@@ -3,8 +3,135 @@
{
"dashedName": "python",
"modules": [
{
"dashedName": "python-basics",
"comingSoon": false,
"blocks": [
"lecture-introduction-to-python",
"workshop-caesar-cipher",
"lab-rpg-character",
"review-python-basics",
"quiz-python-basics"
]
},
{
"dashedName": "python-loops-and-sequences",
"comingSoon": false,
"blocks": [
"lecture-working-with-loops-and-sequences",
"workshop-pin-extractor",
"lab-number-pattern-generator",
"review-loops-and-sequences",
"quiz-loops-and-sequences"
]
},
{
"dashedName": "python-dictionaries-and-sets",
"comingSoon": false,
"blocks": [
"lecture-working-with-dictionaries-and-sets",
"lecture-working-with-modules",
"workshop-medical-data-validator",
"lab-user-configuration-manager",
"review-dictionaries-and-sets",
"quiz-dictionaries-and-sets"
]
},
{
"dashedName": "python-error-handling",
"comingSoon": false,
"blocks": [
"lecture-understanding-error-handling",
"lab-isbn-validator",
"review-error-handling",
"quiz-error-handling"
]
},
{
"dashedName": "python-classes-and-objects",
"comingSoon": true,
"blocks": [
"lecture-classes-and-objects",
"workshop-musical-instrument-inventory",
"workshop-email-simulator",
"lab-budget-app",
"review-classes-and-objects",
"quiz-classes-and-objects"
]
},
{
"dashedName": "python-object-oriented-programming",
"comingSoon": true,
"blocks": [
"lecture-understanding-object-oriented-programming-and-encapsulation",
"workshop-salary-tracker",
"lecture-understanding-inheritance-and-polymorphism",
"workshop-media-catalogue",
"lab-polygon-area-calculator",
"lecture-understanding-abstraction",
"review-object-oriented-programming",
"quiz-object-oriented-programming"
]
},
{
"dashedName": "python-linear-data-structures",
"comingSoon": true,
"blocks": [
"lecture-working-with-common-data-structures",
"workshop-linked-list-class",
"lab-hash-table",
"review-data-structures",
"quiz-data-structures"
]
},
{
"dashedName": "python-algorithms",
"comingSoon": true,
"blocks": [
"lecture-searching-and-sorting-algorithms",
"workshop-binary-search",
"lab-bisection-method",
"workshop-merge-sort",
"lab-quicksort",
"lab-selection-sort",
"lab-luhn-algorithm",
"lab-tower-of-hanoi",
"review-searching-and-sorting-algorithms",
"quiz-searching-and-sorting-algorithms"
]
},
{
"dashedName": "python-graphs-and-trees",
"comingSoon": true,
"blocks": [
"lecture-understanding-graphs-and-trees",
"lab-adjacency-list-to-matrix-converter",
"workshop-breadth-first-search",
"lab-depth-first-search",
"lab-n-queens-problem",
"review-graphs-and-trees",
"quiz-graphs-and-trees"
]
},
{
"dashedName": "python-dynamic-programming",
"comingSoon": true,
"blocks": [
"lecture-understanding-dynamic-programming",
"lab-nth-fibonacci-number",
"review-dynamic-programming",
"quiz-dynamic-programming"
]
},
{
"comingSoon": true,
"moduleType": "review",
"dashedName": "review-python",
"blocks": ["review-python"]
},
{
"moduleType": "exam",
"comingSoon": true,
"dashedName": "python-certification-exam",
"blocks": ["exam-python-certification"]
}
@@ -3,8 +3,89 @@
{
"dashedName": "relational-databases",
"modules": [
{
"dashedName": "code-editors",
"blocks": ["lecture-working-with-code-editors-and-ides"]
},
{
"dashedName": "bash-fundamentals",
"blocks": [
"lecture-understanding-the-command-line-and-working-with-bash",
"workshop-bash-boilerplate",
"review-bash-commands",
"quiz-bash-commands"
]
},
{
"dashedName": "sql-and-postgresql",
"blocks": [
"lecture-working-with-relational-databases",
"workshop-database-of-video-game-characters",
"review-sql-and-postgresql",
"quiz-sql-and-postgresql"
]
},
{
"dashedName": "lab-celestial-bodies-database",
"blocks": ["lab-celestial-bodies-database"]
},
{
"dashedName": "bash-scripting",
"blocks": [
"lecture-understanding-bash-scripting",
"workshop-bash-five-programs",
"review-bash-scripting",
"quiz-bash-scripting"
]
},
{
"dashedName": "sql-and-bash",
"blocks": [
"lecture-working-with-sql",
"workshop-sql-student-database-part-1",
"workshop-sql-student-database-part-2",
"workshop-kitty-ipsum-translator",
"workshop-bike-rental-shop",
"review-bash-and-sql",
"quiz-bash-and-sql"
]
},
{
"dashedName": "lab-world-cup-database",
"blocks": ["lab-world-cup-database"]
},
{
"dashedName": "lab-salon-appointment-scheduler",
"blocks": ["lab-salon-appointment-scheduler"]
},
{
"dashedName": "git",
"blocks": [
"lecture-working-with-nano",
"workshop-castle",
"lecture-introduction-to-git-and-github",
"lecture-working-with-code-reviews-branching-deployment-and-ci-cd",
"workshop-sql-reference-object",
"review-git",
"quiz-git"
]
},
{
"dashedName": "lab-periodic-table-database",
"blocks": ["lab-periodic-table-database"]
},
{
"dashedName": "lab-number-guessing-game",
"blocks": ["lab-number-guessing-game"]
},
{
"moduleType": "review",
"dashedName": "review-relational-databases",
"blocks": ["review-relational-databases"]
},
{
"moduleType": "exam",
"comingSoon": true,
"dashedName": "relational-databases-certification-exam",
"blocks": ["exam-relational-databases-certification"]
}
@@ -17,9 +17,11 @@
"lecture-understanding-how-html-affects-seo",
"lab-travel-agency-page",
"lecture-working-with-audio-and-video-elements",
"lab-html-audio-and-video-player",
"lecture-working-with-images-and-svgs",
"workshop-build-a-heart-icon",
"lecture-working-with-media",
"workshop-build-a-video-display-using-iframe",
"lab-video-compilation-page",
"lecture-working-with-links",
"review-basic-html",
@@ -60,7 +62,9 @@
"dashedName": "html-and-accessibility",
"blocks": [
"lecture-importance-of-accessibility-and-good-html-structure",
"workshop-debug-coding-journey-blog-page",
"lecture-accessible-tables-forms",
"workshop-tech-conference-schedule",
"lecture-introduction-to-aria",
"lecture-accessible-media-elements",
"lab-checkout-page",
@@ -152,6 +156,7 @@
"lecture-best-practices-for-styling-forms",
"workshop-registration-form",
"lab-contact-form",
"lab-feature-selection",
"review-styling-forms",
"quiz-styling-forms"
]