diff --git a/client/gatsby-node.js b/client/gatsby-node.js
index 2923d8b7e55..a74e33482b8 100644
--- a/client/gatsby-node.js
+++ b/client/gatsby-node.js
@@ -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;
}
diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 4cf455caa71..42155a57b75 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -1997,7 +1997,7 @@
]
},
"security-and-privacy": {
- "note": "Coming Fall 2025",
+ "note": "Coming Late 2026",
"intro": [
"In this module, you will learn about the differences between security and privacy as well as other concepts including CSPs, Permissions-Policies, PII, working with CORS, and more. Then you will take a short quiz to test your knowledge."
]
@@ -5041,6 +5041,18 @@
"In these lectures, you will learn the fundamentals of JavaScript. Topics covered include, but are not limited to, variables, data types, how JavaScript interacts with HTML and CSS, strings, and much more."
]
},
+ "lecture-introduction-to-strings": {
+ "title": "Introduction to Strings",
+ "intro": [
+ "In these lessons, you will learn how to work with strings and string concatenation."
+ ]
+ },
+ "lecture-understanding-code-clarity": {
+ "title": "Understanding Code Clarity",
+ "intro": [
+ "In these lessons, you will learn about comments in JavaScript and the role of semicolons in programming."
+ ]
+ },
"workshop-greeting-bot": {
"title": "Build a Greeting Bot",
"intro": [
@@ -5116,6 +5128,12 @@
"In this lecture you will learn how to modify strings by replacing parts of them using the replace() method and how to repeat strings multiple times using the repeat() method."
]
},
+ "workshop-string-transformer": {
+ "title": "Build a String Transformer",
+ "intro": [
+ "In this workshop, you will practice working with the replace(), replaceAll() and repeat() methods."
+ ]
+ },
"review-javascript-strings": {
"title": "JavaScript Strings Review",
"intro": [
@@ -5424,6 +5442,12 @@
"In this lab, you will implement loops to repeat a string a specified number of times."
]
},
+ "lab-missing-letter-detector": {
+ "title": "Build a Missing Letter Detector",
+ "intro": [
+ "In this lab, you will build a function that finds the missing letter in a given range of consecutive letters and returns it."
+ ]
+ },
"review-javascript-loops": {
"title": "JavaScript Loops Review",
"intro": [
@@ -5491,6 +5515,12 @@
"In these lectures, you will learn about the var keyword and why it is not recommended for use anymore. You will also learn about hoisting in JavaScript so you can avoid subtle bugs in your code."
]
},
+ "lab-title-case-converter": {
+ "title": "Build a Title Case Converter",
+ "intro": [
+ "In this lab, you will build a function that converts a string to title case."
+ ]
+ },
"lab-falsy-remover": {
"title": "Implement a Falsy Remover",
"intro": [
@@ -5510,6 +5540,18 @@
"In this lecture, you will learn about modules, imports, and exports in JavaScript."
]
},
+ "lecture-working-with-the-arguments-object-and-rest-parameters": {
+ "title": "Working With the Arguments Object and Rest Parameters",
+ "intro": [
+ "In these lessons, you will learn how to work with the arguments object and rest parameter syntax."
+ ]
+ },
+ "lab-unique-sorted-union": {
+ "title": "Implement a Unique Sorted Union",
+ "intro": [
+ "In this lab, you will create a function that takes two or more arrays and returns a new array of unique values in the order of the original provided arrays."
+ ]
+ },
"lab-password-generator": {
"title": "Build a Password Generator App",
"intro": [
@@ -5522,12 +5564,30 @@
"In this lab, you will design a sum all numbers algorithm. This algorithm takes an array of two numbers and returns the sum of those two numbers plus the sum of all the numbers between them."
]
},
+ "lab-dna-pair-generator": {
+ "title": "Implement a DNA Pair Generator",
+ "intro": [
+ "In this lab you will implement a DNA base pairing algorithm that converts a single DNA strand into complementary base pairs."
+ ]
+ },
"lab-html-entitiy-converter": {
"title": "Implement an HTML Entity Converter",
"intro": [
"In this lab, you will convert special characters in a string to their corresponding HTML entities."
]
},
+ "lab-odd-fibonacci-sum-calculator": {
+ "title": "Build an Odd Fibonacci Sum Calculator",
+ "intro": [
+ "In this lab you will build an odd Fibonacci sum calculator that takes a number and returns the sum of all odd Fibonacci numbers that are less than or equal to that number."
+ ]
+ },
+ "lab-element-skipper": {
+ "title": "Implement an Element Skipper",
+ "intro": [
+ "In this lab you will create a function that skips elements in an array based on a specified step value."
+ ]
+ },
"lab-optional-arguments-sum-function": {
"title": "Build an Optional Arguments Sum Function",
"intro": [
@@ -5577,6 +5637,42 @@
"In this lab, you will practice using higher order functions to find the symmetric difference between two arrays."
]
},
+ "lab-value-remover-function": {
+ "title": "Implement a Value Remover Function",
+ "intro": [
+ "In this lab, you will create a function that removes all instances of a specified value from an array."
+ ]
+ },
+ "lab-matching-object-filter": {
+ "title": "Implement a Matching Object Filter",
+ "intro": [
+ "In this lab, you will create a function that looks through an array of objects and returns an array of all objects that have matching property and value pairs."
+ ]
+ },
+ "lab-prime-number-sum-calculator": {
+ "title": "Build a Prime Number Sum Calculator",
+ "intro": [
+ "In this lab you will build a prime number sum calculator that takes a number and returns the sum of all prime numbers that are less than or equal to that number."
+ ]
+ },
+ "lab-range-based-lcm-calculator": {
+ "title": "Implement a Range-Based LCM Calculator",
+ "intro": [
+ "In this lab, you will create a function that takes an array of two numbers and returns the least common multiple (LCM) of those two numbers and all the numbers between them."
+ ]
+ },
+ "lab-deep-flattening-tool": {
+ "title": "Create a Deep Flattening Tool",
+ "intro": [
+ "In this lab you will create a function that can flatten deeply nested arrays, handling any level of nesting without using built-in flat methods."
+ ]
+ },
+ "lab-all-true-property-validator": {
+ "title": "Build an All-True Property Validator",
+ "intro": [
+ "In this lab you will build a function that checks if all objects in an array have a truthy value for a specific property."
+ ]
+ },
"review-javascript-higher-order-functions": {
"title": "JavaScript Higher Order Functions Review",
"intro": [
@@ -5602,6 +5698,12 @@
"In this workshop, you will build a storytelling app that will allow you to list different stories based on genre."
]
},
+ "workshop-emoji-reactor": {
+ "title": "Build an Emoji Reactor",
+ "intro": [
+ "In this workshop, you will build an emoji reactor to practice querySelector and querySelectorAll."
+ ]
+ },
"lab-favorite-icon-toggler": {
"title": "Build a Favorite Icon Toggler",
"intro": [
@@ -5750,6 +5852,25 @@
"title": "Build a RegEx Sandbox",
"intro": ["In this lab you'll build a regex sandbox."]
},
+ "lab-spinal-case-converter": {
+ "title": "Implement a Spinal Case Converter",
+ "intro": [
+ "In this lab, you will create a function that converts a given string to spinal case which is a style of writing where all letters are lowercase and separated by hyphens."
+ ]
+ },
+ "lab-pig-latin": {
+ "title": "Implement a Pig Latin Translator",
+ "intro": [
+ "In this lab, you'll implement a Pig Latin translator using JavaScript.",
+ "You'll practice string manipulation, conditional logic, and regular expressions."
+ ]
+ },
+ "lab-smart-word-replacement": {
+ "title": "Build a Smart Word Replacement Function",
+ "intro": [
+ "In this lab, you will use regex to create a function that performs a search and replace operation on a given string."
+ ]
+ },
"review-javascript-regular-expressions": {
"title": "JavaScript Regular Expressions Review",
"intro": [
@@ -6082,9 +6203,326 @@
"front-end-development-libraries": "Front End Development Libraries"
},
"modules": {
+ "react-fundamentals": "React Fundamentals",
+ "react-state-hooks-and-routing": "React State, Hooks, and Routing",
+ "performance": "Performance",
+ "testing": "Testing",
+ "css-libraries-and-frameworks": "CSS Libraries and Frameworks",
+ "data-visualization": "Data Visualization and D3",
+ "typescript-fundamentals": "TypeScript Fundamentals",
+ "review-front-end-libraries": "Front End Libraries Review",
"front-end-development-libraries-certification-exam": "Front End Development Libraries Certification Exam"
},
+ "module-intros": {
+ "data-visualization": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will be introduced to data visualization and learn how to work with the D3 library."
+ ]
+ },
+ "typescript-fundamentals": {
+ "note": "Coming Fall 2025",
+ "intro": [
+ "In this module, you will be introduced to TypeScript, which is a superset of JavaScript that allows you to add static typing to your JavaScript code. You will build several workshops and labs that will give you practice in working with generics, type narrowing, TSX, and more. Then you will test your knowledge of TypeScript fundamentals with a short quiz."
+ ]
+ },
+ "front-end-development-libraries-certification-exam": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "Pass this exam to earn your Front End Development Libraries Certification."
+ ]
+ }
+ },
"blocks": {
+ "lecture-introduction-to-javascript-libraries-and-frameworks": {
+ "title": "Introduction to JavaScript Libraries and Frameworks",
+ "intro": [
+ "In these lessons, you will get an introduction to JavaScript libraries and frameworks. You will learn about the roles of JavaScript libraries and frameworks, single page applications (SPAs) and the issue surrounding them, and React, the most popular frontend JavaScript library."
+ ]
+ },
+ "workshop-reusable-mega-navbar": {
+ "title": "Build a Reusable Mega Navbar",
+ "intro": [
+ "In the previous lessons, you learned how to work with components in React.",
+ "In this workshop, you will build a reusable Navbar component using React."
+ ]
+ },
+ "lab-reusable-footer": {
+ "title": "Build a Reusable Footer",
+ "intro": ["In this lab, you'll use React to build a reusable footer."]
+ },
+ "lecture-working-with-data-in-react": {
+ "title": "Working with Data in React",
+ "intro": [
+ "In these lessons, you will learn how to work with data in React. You will learn about props and how to pass them around, conditional rendering, how to render lists, and how to use inline styles."
+ ]
+ },
+ "workshop-reusable-profile-card-component": {
+ "title": "Build a Reusable Profile Card Component",
+ "intro": [
+ "In this workshop, you will learn how to work with props by building a reusable profile card component."
+ ]
+ },
+ "lab-mood-board": {
+ "title": "Build a Mood Board",
+ "intro": [
+ "In this lab, you'll create a mood board using React.",
+ "You'll practice how to pass data from a parent component to a child component using props."
+ ]
+ },
+ "review-react-basics": {
+ "title": "React Basics Review",
+ "intro": [
+ "Review basic React concepts to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-react-basics": {
+ "title": "React Basics Quiz",
+ "intro": ["Test your knowledge of React basics with this quiz."]
+ },
+ "lecture-working-with-state-and-responding-to-events-in-react": {
+ "title": "Working with State and Responding to Events in React",
+ "intro": [
+ "In these lessons, you will learn about working with state and responding to events with React."
+ ]
+ },
+ "workshop-toggle-text-app": {
+ "title": "Toggle Text App",
+ "intro": [
+ "In this workshop, you will continue to learn about the useState() hook by building an application that hides and shows a piece of text on the screen."
+ ]
+ },
+ "lab-color-picker": {
+ "title": "Build a Color Picker App",
+ "intro": [
+ "In this lab you'll build a Color Picker.",
+ "You'll practice using state and hooks to manage the properties of an element."
+ ]
+ },
+ "lecture-understanding-effects-and-referencing-values-in-react": {
+ "title": "Understanding Effects and Referencing Values in React",
+ "intro": [
+ "In these lessons, you will learn about effects and referencing values with React."
+ ]
+ },
+ "workshop-fruit-search-app": {
+ "title": "Build a Fruit Search App",
+ "intro": [
+ "In this workshop, you will continue to learn about the useEffect() hook by building an application that fetches fruit data from an API based on user input and displays the results dynamically."
+ ]
+ },
+ "lab-one-time-password-generator": {
+ "title": "Build a One-Time Password Generator",
+ "intro": [
+ "In this lab you'll build a one-time password generator.",
+ "You'll practice using the useEffect hooks to create a timer and generate a random OTP."
+ ]
+ },
+ "review-react-state-and-hooks": {
+ "title": "React State and Hooks Review",
+ "intro": [
+ "Before you're quizzed on React state and hooks, you should review what you've learned.",
+ "Open up this page to review working with state, custom hooks and more."
+ ]
+ },
+ "quiz-react-state-and-hooks": {
+ "title": "React State and Hooks Quiz",
+ "intro": [
+ "Test what you've learned about React's useState and useEffect hooks with this quiz."
+ ]
+ },
+ "lecture-working-with-forms-in-react": {
+ "title": "Working with Forms in React",
+ "intro": [
+ "In these lessons, you will learn about working with forms in React."
+ ]
+ },
+ "workshop-superhero-application-form": {
+ "title": "Build a Superhero Application Form",
+ "intro": [
+ "In this workshop, you will build a superhero application form."
+ ]
+ },
+ "lab-event-rsvp": {
+ "title": "Build an Event RSVP",
+ "intro": [
+ "In this lab, you'll build an Event RSVP form using React.",
+ "You'll practice using the useState hook to manage form input and display user responses."
+ ]
+ },
+ "lecture-working-with-data-fetching-and-memoization-in-react": {
+ "title": "Working with Data Fetching and Memoization in React",
+ "intro": [
+ "In these lessons, you will learn about data fetching and memoization in React."
+ ]
+ },
+ "workshop-shopping-list-app": {
+ "title": "Build a Shopping List App",
+ "intro": [
+ "In this workshop, you'll use the useMemo() and useCallback() hooks in React to build a simple shopping list app. You'll learn more about state and the lifecycle of React components, and how to use memoization to reduce re-renders and make your apps more efficient."
+ ]
+ },
+ "lab-currency-converter": {
+ "title": "Build a Currency Converter",
+ "intro": [
+ "For this lab, you'll build a currency converter app.",
+ "You'll use React state, memoization, and controlled components to convert between currencies."
+ ]
+ },
+ "lecture-routing-react-frameworks-and-dependency-management-tools": {
+ "title": "Routing, React Frameworks, and Dependency Management Tools",
+ "intro": [
+ "In these lessons, you will learn about routing in React, React frameworks, and dependency management tools."
+ ]
+ },
+ "lab-tic-tac-toe": {
+ "title": "Build a Tic-Tac-Toe Game",
+ "intro": [
+ "In this lab, you'll build a Tic-Tac-Toe game using React.",
+ "You'll practice managing state, handling user interactions, and updating the UI dynamically."
+ ]
+ },
+ "lecture-react-strategies-and-debugging": {
+ "title": "React Strategies and Debugging",
+ "intro": [
+ "In these lessons, you will learn about different strategies and debugging in React."
+ ]
+ },
+ "review-react-forms-data-fetching-and-routing": {
+ "title": "React Forms, Data Fetching and Routing Review",
+ "intro": [
+ "Before you take the React forms, data fetching and routing quiz, you should review everything you've learned so far.",
+ "Open up this page, to review all of the concepts taught including routing, forms, state management, prop drilling, data fetching and more."
+ ]
+ },
+ "quiz-react-forms-data-fetching-and-routing": {
+ "title": "React Forms, Data Fetching and Routing Quiz",
+ "intro": [
+ "Test what you've learned about routing, forms, and data fetching with this quiz."
+ ]
+ },
+ "lecture-understanding-performance-in-web-applications": {
+ "title": "Understanding Performance in Web Applications",
+ "intro": [
+ "In these lessons, you will learn performance in web applications."
+ ]
+ },
+ "review-web-performance": {
+ "title": "Web Performance Review",
+ "intro": [
+ "Before you take the web performance quiz, you should review everything you've learned so far.",
+ "Open up this page to review all of the concepts taught including INP, key metrics for measuring performance, Performance Web APIs and more."
+ ]
+ },
+ "quiz-web-performance": {
+ "title": "Web Performance Quiz",
+ "intro": [
+ "Test what you've learned about Web Performance with this quiz."
+ ]
+ },
+ "lecture-understanding-the-different-types-of-testing": {
+ "title": "Understanding the Different Types of Testing",
+ "intro": [
+ "In these lessons, you will learn about the different types of testing."
+ ]
+ },
+ "review-testing": {
+ "title": "Testing Review",
+ "intro": [
+ "Before you take the testing quiz, you should review everything you've learned so far.",
+ "Open up this page to review all of the concepts taught including unit testing, end-to-end testing, functional testing and more."
+ ]
+ },
+ "quiz-testing": {
+ "title": "Testing Quiz",
+ "intro": ["Test what you've learned on testing with this quiz."]
+ },
+ "lecture-working-with-css-libraries-and-frameworks": {
+ "title": "Working with CSS Libraries and Frameworks",
+ "intro": [
+ "In these lessons, you will learn how to work with CSS libraries and frameworks."
+ ]
+ },
+ "workshop-error-message-component": {
+ "title": "Build an Error Message Component",
+ "intro": [
+ "In this workshop, you will learn the basics of Tailwind CSS by building out an error message component."
+ ]
+ },
+ "workshop-tailwind-cta-component": {
+ "title": "Build a CTA Component",
+ "intro": [
+ "In this workshop, you will build a call to action (CTA) component using Tailwind CSS."
+ ]
+ },
+ "workshop-tailwind-pricing-component": {
+ "title": "Build a Pricing Component",
+ "intro": [
+ "In this workshop, you will build a pricing component using Tailwind CSS.",
+ "You will practice working with Tailwind CSS grid utility classes."
+ ]
+ },
+ "lab-music-shopping-cart-page": {
+ "title": "Build a Music Shopping Cart Page",
+ "intro": [
+ "In this lab, you will build a music shopping cart page with Tailwind CSS.",
+ "You will practice working with Tailwind CSS utility classes for flexbox layouts, colors, breakpoints and more."
+ ]
+ },
+ "lab-photography-exhibit": {
+ "title": "Design a Photography Exhibit",
+ "intro": [
+ "In this lab, you will practice working with Tailwind CSS by designing a photography exhibit webpage."
+ ]
+ },
+ "review-css-libraries-and-frameworks": {
+ "title": "CSS Libraries and Frameworks Review",
+ "intro": [
+ "Before you take the CSS libraries and frameworks quiz, you should review everything you've learned so far.",
+ "Open up this page to review all of the concepts taught including CSS frameworks, CSS preprocessors, Sass and more."
+ ]
+ },
+ "quiz-css-libraries-and-frameworks": {
+ "title": "CSS Libraries and Frameworks Quiz",
+ "intro": [
+ "Test what you've learned about CSS Libraries and Frameworks with this quiz."
+ ]
+ },
+ "lecture-introduction-to-typescript": {
+ "title": "Introduction to TypeScript",
+ "intro": [
+ "In these lessons, you will learn what TypeScript is and how to use it."
+ ]
+ },
+ "lecture-working-with-generics-and-type-narrowing": {
+ "title": "Working with Generics and Type Narrowing",
+ "intro": [
+ "In these lessons, you will learn about generics and type narrowing in TypeScript."
+ ]
+ },
+ "lecture-working-with-typescript-configuration-files": {
+ "title": "Working with TypeScript Configuration Files",
+ "intro": [
+ "In this lesson, you will learn about TypeScript configuration files and how to use them."
+ ]
+ },
+ "review-typescript": {
+ "title": "Typescript Review",
+ "intro": [
+ "Before you take the TypeScript quiz, you should review everything you've learned so far.",
+ "Open up this page to review all of the concepts taught including data types in TypeScript, generics, type narrowing and more."
+ ]
+ },
+ "quiz-typescript": {
+ "title": "TypeScript Quiz",
+ "intro": ["Test what you've learned on Typescript with this quiz."]
+ },
+ "review-front-end-libraries": {
+ "title": "Front End Libraries Review",
+ "intro": [
+ "Review the Front End Libraries concepts to prepare for the upcoming quiz."
+ ]
+ },
"exam-front-end-development-libraries-certification": {
"title": "Front End Development Libraries Certification Exam",
"intro": [
@@ -6101,9 +6539,431 @@
"- Complete the five required projects to qualify for the certification exam.",
"- Pass the Python Certification exam."
],
- "chapters": { "python": "Python" },
- "modules": { "python-certification-exam": "Python Certification Exam" },
+ "chapters": {
+ "python": "Python"
+ },
+ "modules": {
+ "python-basics": "Python Basics",
+ "python-loops-and-sequences": "Loops and Sequences",
+ "python-dictionaries-and-sets": "Dictionaries and Sets",
+ "python-error-handling": "Error Handling",
+ "python-classes-and-objects": "Classes and Objects",
+ "python-object-oriented-programming": "Object-Oriented Programming (OOP)",
+ "python-linear-data-structures": "Linear Data Structures",
+ "python-algorithms": "Algorithms",
+ "python-graphs-and-trees": "Graphs and Trees",
+ "python-dynamic-programming": "Dynamic Programming",
+ "review-python": "Python Review",
+ "python-certification-exam": "Python Certification Exam"
+ },
+ "module-intros": {
+ "python-classes-and-objects": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn how to work with classes, methods, attributes and properties. Then, you will build out workshops and labs to practice these concepts and take a short quiz to test your knowledge."
+ ]
+ },
+ "python-object-oriented-programming": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn about Object-oriented programming concepts like encapsulation, inheritance, polymorphism, and more. You will build out workshops and labs to practice these concepts and take a short quiz to test your knowledge."
+ ]
+ },
+ "python-linear-data-structures": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn about data structures including stacks, queues, linked lists, and more. You will build out a workshop and lab to practice these concepts and take a short quiz to test your knowledge."
+ ]
+ },
+ "python-algorithms": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn about common algorithms including binary search, merge sort, selection sort, and more. You will build workshops and labs to practice these concepts and take a short quiz to test your knowledge."
+ ]
+ },
+ "python-graphs-and-trees": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn about graphs in computer science as well as adjacency lists, trees, tries, and more. You will build workshops and labs to practice these concepts and take a short quiz to test your knowledge."
+ ]
+ },
+ "python-dynamic-programming": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "In this module, you will learn about dynamic programming and practice these concepts by building a fibonacci sequence lab. Then you will take a short quiz to test your knowledge."
+ ]
+ },
+ "python-certification-exam": {
+ "note": "Coming Winter 2025",
+ "intro": ["Pass this exam to earn your Python Certification."]
+ }
+ },
"blocks": {
+ "lecture-introduction-to-python": {
+ "title": "Introduction to Python",
+ "intro": [
+ "In these lessons, you will learn the fundamentals of Python. You'll learn about variables, data types, operators, control flow, functions, and more."
+ ]
+ },
+ "workshop-caesar-cipher": {
+ "title": "Build a Caesar Cipher",
+ "intro": [
+ "In this workshop, you'll build a Caesar cipher using basic Python concepts such as strings, conditionals, functions, and more."
+ ]
+ },
+ "lab-rpg-character": {
+ "title": "Build an RPG character",
+ "intro": [
+ "In this lab you will practice basic python by building an RPG character."
+ ]
+ },
+ "review-python-basics": {
+ "title": "Python Basics Review",
+ "intro": [
+ "Before you're quizzed on Python basics, you should review what you've learned about it.",
+ "In this review page, you will review working with strings, functions, comparison operators and more."
+ ]
+ },
+ "quiz-python-basics": {
+ "title": "Python Basics Quiz",
+ "intro": [
+ "Test what you've learned about Python basics with this quiz."
+ ]
+ },
+ "lecture-working-with-loops-and-sequences": {
+ "title": "Working with Loops and Sequences",
+ "intro": [
+ "Learn about Working with Loops and Sequences in these lessons."
+ ]
+ },
+ "workshop-pin-extractor": {
+ "title": "Build a Pin Extractor",
+ "intro": [
+ "In this workshop you will build a function to extract secret pins hidden in poems."
+ ]
+ },
+ "lab-number-pattern-generator": {
+ "title": "Build a Number Pattern Generator",
+ "intro": ["In this lab you will build a number pattern generator."]
+ },
+ "review-loops-and-sequences": {
+ "title": "Loops and Sequences Review",
+ "intro": [
+ "Before you're quizzed on loops and sequences, you should review what you've learned about them.",
+ "Open up this page to review concepts around loops, lists, tuples and some of their common methods."
+ ]
+ },
+ "quiz-loops-and-sequences": {
+ "title": "Loops and Sequences Quiz",
+ "intro": [
+ "Test what you've learned about loops and sequences in Python with this quiz."
+ ]
+ },
+ "lecture-working-with-dictionaries-and-sets": {
+ "title": "Working with Dictionaries and Sets",
+ "intro": [
+ "Learn about working with dictionaries and sets in these lessons."
+ ]
+ },
+ "lecture-working-with-modules": {
+ "title": "Working with Modules",
+ "intro": ["Learn about working with modules in these lessons."]
+ },
+ "workshop-medical-data-validator": {
+ "title": "Build a Medical Data Validator",
+ "intro": [
+ "In this workshop, you'll practice working with dictionaries and sets while validating a collection of medical data."
+ ]
+ },
+ "lab-user-configuration-manager": {
+ "title": "Build a User Configuration Manager",
+ "intro": [
+ "In this lab, you will practice working with dictionaries in Python."
+ ]
+ },
+ "review-dictionaries-and-sets": {
+ "title": "Dictionaries and Sets review",
+ "intro": [
+ "Before you're quizzed on dictionaries and sets, you should review what you've learned about them.",
+ "Open up this page to review concepts around dictionaries, sets, and how to import modules."
+ ]
+ },
+ "quiz-dictionaries-and-sets": {
+ "title": "Dictionaries and Sets Quiz",
+ "intro": [
+ "Test what you've learned about dictionaries and sets in Python with this quiz."
+ ]
+ },
+ "lecture-understanding-error-handling": {
+ "title": "Understanding Error Handling",
+ "intro": [
+ "In these lessons, you will learn about error handling in Python. You will learn about the different types of errors, some good debugging practices, what exceptions are, and how to handle them."
+ ]
+ },
+ "lab-isbn-validator": {
+ "title": "Debug an ISBN Validator",
+ "intro": [
+ "In this lab, you will start with a bugged app, and you will need to debug and fix the bugs until it is working properly."
+ ]
+ },
+ "review-error-handling": {
+ "title": "Error Handling Review",
+ "intro": [
+ "Before you're quizzed on error handling, you should review what you've learned about it."
+ ]
+ },
+ "quiz-error-handling": {
+ "title": "Error Handling Quiz",
+ "intro": [
+ "Test what you've learned about Error Handling in Python with this quiz."
+ ]
+ },
+ "lecture-classes-and-objects": {
+ "title": "Classes and Objects",
+ "intro": ["Learn about Classes and Objects in these lessons."]
+ },
+ "workshop-musical-instrument-inventory": {
+ "title": "Build a Musical Instrument Inventory",
+ "intro": [
+ "In this workshop, you will learn about classes, objects, and methods in Python by building a simple musical instrument inventory."
+ ]
+ },
+ "workshop-email-simulator": {
+ "title": "Build an Email Simulator",
+ "intro": [
+ "In this workshop you will implement classes and objects by building an email simulator that simulates sending, receiving, and managing emails between different users."
+ ]
+ },
+ "lab-budget-app": {
+ "title": "Build a Budget App",
+ "intro": [
+ "In this lab you will build a budget app and practice creating a class and methods for that class."
+ ]
+ },
+ "review-classes-and-objects": {
+ "title": "Classes and Objects Review",
+ "intro": [
+ "Before you're quizzed on classes and objects, you should review what you've learned about them.",
+ "Open up this page to review concepts like how classes work, what are objects, methods, attributes, special methods and more."
+ ]
+ },
+ "quiz-classes-and-objects": {
+ "title": "Classes and Objects Quiz",
+ "intro": [
+ "Test what you've learned about classes and objects in Python with this quiz."
+ ]
+ },
+ "lecture-understanding-object-oriented-programming-and-encapsulation": {
+ "title": "Understanding Object Oriented Programming and Encapsulation",
+ "intro": [
+ "Learn about Understanding Object Oriented Programming and Encapsulation in these lessons."
+ ]
+ },
+ "workshop-salary-tracker": {
+ "title": "Build a Salary Tracker",
+ "intro": [
+ "In this workshop, you'll practice encapsulation, properties, and other OOP concepts by building a salary tracking system for employees."
+ ]
+ },
+ "lecture-understanding-inheritance-and-polymorphism": {
+ "title": "Understanding Inheritance and Polymorphism",
+ "intro": [
+ "Learn about Understanding Inheritance and Polymorphism in these lessons."
+ ]
+ },
+ "workshop-media-catalogue": {
+ "title": "Build a Media Catalogue",
+ "intro": [
+ "In this workshop, you will create a media catalogue application using object-oriented programming principles."
+ ]
+ },
+ "lab-polygon-area-calculator": {
+ "title": "Build a Polygon Area Calculator",
+ "intro": [
+ "In this lab, you will use object-oriented programming to calculate the areas of different polygons like squares and rectangles."
+ ]
+ },
+ "lecture-understanding-abstraction": {
+ "title": "Understanding Abstraction",
+ "intro": ["Learn about Understanding Abstraction in these lessons."]
+ },
+ "review-object-oriented-programming": {
+ "title": "Object Oriented Programming Review",
+ "intro": [
+ "Before you're quizzed on object oriented programming, you should review what you've learned about it."
+ ]
+ },
+ "quiz-object-oriented-programming": {
+ "title": "Object Oriented Programming Quiz",
+ "intro": [
+ "Test what you've learned about object oriented programming in python with this quiz."
+ ]
+ },
+ "lecture-working-with-common-data-structures": {
+ "title": "Working with Common Data Structures",
+ "intro": [
+ "Learn about Working with Common Data Structures in these lessons."
+ ]
+ },
+ "workshop-linked-list-class": {
+ "title": "Build a Linked List",
+ "intro": [
+ "In this workshop, you'll practice working with data structures by building a linked list."
+ ]
+ },
+ "lab-hash-table": {
+ "title": "Build a Hash Table",
+ "intro": [
+ "A hash table is a data structure that is used to store key-value pairs and is optimized for quick lookups.",
+ "In this lab, you will use your knowledge about data structures to build a hash table."
+ ]
+ },
+ "review-data-structures": {
+ "title": "Data Structures Review",
+ "intro": [
+ "Before you're quizzed on data structures, you should review what you've learned about them.",
+ "Open up this page to review concepts like the different data structures, algorithms, time and space complexity, and big O notation."
+ ]
+ },
+ "quiz-data-structures": {
+ "title": "Data Structures Quiz",
+ "intro": [
+ "Test what you've learned about data structures in Python with this quiz."
+ ]
+ },
+ "lecture-searching-and-sorting-algorithms": {
+ "title": "Searching and Sorting Algorithms",
+ "intro": [
+ "Learn about fundamental searching and sorting algorithms, including linear search, binary search, and merge sort.",
+ "These lessons cover algorithm implementations, time and space complexity analysis, and the divide and conquer programming paradigm."
+ ]
+ },
+ "workshop-binary-search": {
+ "title": "Implement the Binary Search Algorithm",
+ "intro": [
+ "The binary search algorithm is a searching algorithm used to find a target item in a sorted list.",
+ "In this workshop, you'll implement the binary search algorithm and return the path it took to find the target or return 'Value not found'."
+ ]
+ },
+ "lab-bisection-method": {
+ "title": "Implement the Bisection Method",
+ "intro": [
+ "In this lab, you will implement the bisection method to find the square root of a number."
+ ]
+ },
+ "workshop-merge-sort": {
+ "title": "Implement the Merge Sort Algorithm",
+ "intro": [
+ "The merge sort algorithm is a sorting algorithm based on the divide and conquer principle.",
+ "In this workshop, you'll implement the merge sort algorithm to sort a list of random numbers."
+ ]
+ },
+ "lab-quicksort": {
+ "title": "Implement the Quicksort Algorithm",
+ "intro": [
+ "In this lab you will implement the quicksort algorithm to sort a list of integers."
+ ]
+ },
+ "lab-selection-sort": {
+ "title": "Implement the Selection Sort Algorithm",
+ "intro": [
+ "In this lab you will implement the selection sort algorithm."
+ ]
+ },
+ "lab-luhn-algorithm": {
+ "title": "Implement the Luhn Algorithm",
+ "intro": [
+ "In this lab, you will implement the Luhn algorithm to validate identification numbers such as credit card numbers."
+ ]
+ },
+ "lab-tower-of-hanoi": {
+ "title": "Implement the Tower of Hanoi Algorithm",
+ "intro": [
+ "In this lab, you will implement an algorithm to solve the Tower of Hanoi puzzle."
+ ]
+ },
+ "review-searching-and-sorting-algorithms": {
+ "title": "Searching and Sorting Algorithms Review",
+ "intro": [
+ "Before you're quizzed on searching and sorting algorithms, you should review what you've learned about them."
+ ]
+ },
+ "quiz-searching-and-sorting-algorithms": {
+ "title": "Searching and Sorting Algorithms Quiz",
+ "intro": [
+ "Test what you've learned about searching and sorting algorithms in Python with this quiz."
+ ]
+ },
+ "lecture-understanding-graphs-and-trees": {
+ "title": "Understanding Graphs and Trees",
+ "intro": [
+ "In this lesson, you will learn about fundamental data structures like graphs, trees, and their practical applications in computer science."
+ ]
+ },
+ "lab-adjacency-list-to-matrix-converter": {
+ "title": "Build an Adjacency List to Matrix Converter",
+ "intro": [
+ "In this lab, you will implement a function that converts an adjacency list representation of a graph into an adjacency matrix representation."
+ ]
+ },
+ "workshop-breadth-first-search": {
+ "title": "Implement the Breadth-First Search Algorithm",
+ "intro": [
+ "In this workshop, you will use the bread-first search algorithm to generate all valid combinations of parentheses."
+ ]
+ },
+ "lab-depth-first-search": {
+ "title": "Implement the Depth-First Search Algorithm",
+ "intro": [
+ "In this lab, you will implement the Depth-First Search Algorithm."
+ ]
+ },
+ "lab-n-queens-problem": {
+ "title": "Implement the N-Queens Problem",
+ "intro": [
+ "In this lab, you will implement a solution for the N-Queens problem."
+ ]
+ },
+ "review-graphs-and-trees": {
+ "title": "Graphs and Trees Review",
+ "intro": [
+ "Before you're quizzed on graphs and trees, you should review what you've learned about them."
+ ]
+ },
+ "quiz-graphs-and-trees": {
+ "title": "Graphs and Trees Quiz",
+ "intro": [
+ "Test what you've learned about graphs and trees in Python with this quiz."
+ ]
+ },
+ "lecture-understanding-dynamic-programming": {
+ "title": "Understanding Dynamic Programming",
+ "intro": [
+ "In this lesson, you will learn about dynamic programming, an algorithmic technique used to solve complex problems efficiently by breaking them down into simpler subproblems."
+ ]
+ },
+ "lab-nth-fibonacci-number": {
+ "title": "Build an Nth Fibonacci Number Calculator",
+ "intro": [
+ "In this lab you will implement a Fibonacci sequence calculator using a dynamic programming approach."
+ ]
+ },
+ "review-dynamic-programming": {
+ "title": "Dynamic Programming Review",
+ "intro": [
+ "Before you're quizzed on dynamic programming, you should review what you've learned about it."
+ ]
+ },
+ "quiz-dynamic-programming": {
+ "title": "Dynamic Programming Quiz",
+ "intro": [
+ "Test what you've learned about dynamic programming in python with this quiz."
+ ]
+ },
+ "review-python": {
+ "title": "Python Review",
+ "intro": ["Review Python concepts to prepare for the upcoming exam."]
+ },
"exam-python-certification": {
"title": "Python Certification Exam",
"intro": ["Pass this exam to earn your Python Certification"]
@@ -6120,9 +6980,219 @@
],
"chapters": { "relational-databases": "Relational Databases" },
"modules": {
+ "code-editors": "Code Editors",
+ "bash-fundamentals": "Bash Fundamentals",
+ "sql-and-postgresql": "SQL and PostgreSQL",
+ "bash-scripting": "Bash Scripting",
+ "sql-and-bash": "SQL and Bash",
+ "git": "Git",
+ "review-relational-databases": "Relational Databases Review",
+ "lab-celestial-bodies-database": "Build a Celestial Bodies Database",
+ "lab-world-cup-database": "Build a World Cup Database",
+ "lab-salon-appointment-scheduler": "Build a Salon Appointment Scheduler",
+ "lab-periodic-table-database": "Build a Periodic Table Database",
+ "lab-number-guessing-game": "Build a Number Guessing Game",
"relational-databases-certification-exam": "Relational Databases Certification Exam"
},
+ "module-intros": {
+ "relational-databases-certification-exam": {
+ "note": "Coming Winter 2025",
+ "intro": [
+ "Pass this exam to earn your Relational Databases Certification."
+ ]
+ }
+ },
"blocks": {
+ "lecture-working-with-code-editors-and-ides": {
+ "title": "Working with Code Editors and IDEs",
+ "intro": [
+ "In these lessons, you will learn how to work with code editors and IDEs. You will learn various concepts about the most popular code editor, VS Code such as its installation, how to create a project in it, keyboard shortcuts, and extensions."
+ ]
+ },
+ "lecture-understanding-the-command-line-and-working-with-bash": {
+ "title": "Understanding the Command Line and Working with Bash",
+ "intro": [
+ "Learn about the Command Line and Working with Bash in these lessons."
+ ]
+ },
+ "workshop-bash-boilerplate": {
+ "title": "Build a Boilerplate",
+ "intro": [
+ "The terminal allows you to send text commands to your computer that can manipulate the file system, run programs, automate tasks, and much more.",
+ "In this 170-lesson workshop, you will learn terminal commands by creating a website boilerplate using only the command line."
+ ]
+ },
+ "review-bash-commands": {
+ "title": "Bash Commands Review",
+ "intro": [
+ "Review the Bash Commands concepts to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-bash-commands": {
+ "title": "Bash Commands Quiz",
+ "intro": ["Test what you've learned bash commands with this quiz."]
+ },
+ "lecture-working-with-relational-databases": {
+ "title": "Working with Relational Databases",
+ "intro": [
+ "Learn how to work with Relational Databases in these lessons."
+ ]
+ },
+ "workshop-database-of-video-game-characters": {
+ "title": "Build a Database of Video Game Characters",
+ "intro": [
+ "A relational database organizes data into tables that are linked together through relationships.",
+ "In this 165-lesson workshop, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
+ ]
+ },
+ "lab-celestial-bodies-database": {
+ "title": "Build a Celestial Bodies Database",
+ "intro": [
+ "For this project, you will build a database of celestial bodies using PostgreSQL."
+ ]
+ },
+ "review-sql-and-postgresql": {
+ "title": "SQL and PostgreSQL Review",
+ "intro": [
+ "Review SQL and PostgreSQL concepts to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-sql-and-postgresql": {
+ "title": "SQL and PostgreSQL Quiz",
+ "intro": [
+ "Test what you've learned about SQL and PostgreSQL with this quiz."
+ ]
+ },
+ "lecture-understanding-bash-scripting": {
+ "title": "Understanding Bash Scripting",
+ "intro": ["Learn about Bash Scripting in these lessons."]
+ },
+ "workshop-bash-five-programs": {
+ "title": "Build Five Programs",
+ "intro": [
+ "Bash scripts combine terminal commands and logic into programs that can execute or automate tasks, and much more.",
+ "In this 220-lesson workshop, you will learn more terminal commands and how to use them within Bash scripts by creating five small programs."
+ ]
+ },
+ "review-bash-scripting": {
+ "title": "Bash Scripting Review",
+ "intro": [
+ "Review the bash scripting concepts you've learned to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-bash-scripting": {
+ "title": "Bash Scripting Quiz",
+ "intro": ["Test what you've learned on bash scripting in this quiz."]
+ },
+ "lecture-working-with-sql": {
+ "title": "Working With SQL",
+ "intro": [
+ "In these lessons, you will learn about SQL injection, normalization, and the N+1 problem."
+ ]
+ },
+ "workshop-sql-student-database-part-1": {
+ "title": "Build a Student Database: Part 1",
+ "intro": [
+ "SQL, or Structured Query Language, is the language for communicating with a relational database.",
+ "In this 140-lesson workshop, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
+ ]
+ },
+ "workshop-sql-student-database-part-2": {
+ "title": "Build a Student Database: Part 2",
+ "intro": [
+ "SQL join commands are used to combine information from multiple tables in a relational database",
+ "In this 140-lesson workshop, you will complete your student database while diving deeper into SQL commands."
+ ]
+ },
+ "lab-world-cup-database": {
+ "title": "Build a World Cup Database",
+ "intro": [
+ "For this project, you will create a Bash script that enters information from World Cup games into PostgreSQL, then query the database for useful statistics."
+ ]
+ },
+ "workshop-kitty-ipsum-translator": {
+ "title": "Build a Kitty Ipsum Translator",
+ "intro": [
+ "There's more to Bash commands than you might think.",
+ "In this 140-lesson workshop, you will learn some more complex commands, and the details of how commands work."
+ ]
+ },
+ "workshop-bike-rental-shop": {
+ "title": "Build a Bike Rental Shop",
+ "intro": [
+ "In this 210-lesson workshop, you will build an interactive Bash program that stores rental information for your bike rental shop using PostgreSQL."
+ ]
+ },
+ "lab-salon-appointment-scheduler": {
+ "title": "Build a Salon Appointment Scheduler",
+ "intro": [
+ "For this lab, you will create an interactive Bash program that uses PostgreSQL to track the customers and appointments for your salon."
+ ]
+ },
+ "review-bash-and-sql": {
+ "title": "Bash and SQL Review",
+ "intro": [
+ "Review the Bash and SQL concepts to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-bash-and-sql": {
+ "title": "Bash and SQL Quiz",
+ "intro": ["Test what you've learned in this quiz on Bash and SQL."]
+ },
+ "lecture-working-with-nano": {
+ "title": "Working With Nano",
+ "intro": ["Learn about Nano in this lesson."]
+ },
+ "workshop-castle": {
+ "title": "Build a Castle",
+ "intro": [
+ "Nano is a program that allows you to edit files right in the terminal.",
+ "In this 40-lesson workshop, you will learn how to edit files in the terminal with Nano while building a castle."
+ ]
+ },
+ "lecture-introduction-to-git-and-github": {
+ "title": "Introduction to Git and GitHub",
+ "intro": ["Learn how to work with Git and GitHub in these lessons."]
+ },
+ "lecture-working-with-code-reviews-branching-deployment-and-ci-cd": {
+ "title": "Working With Code Reviews, Branching, Deployment, and CI/CD",
+ "intro": [
+ "Learn about code reviews, branching, deployment, and CI/CD in these lessons."
+ ]
+ },
+ "workshop-sql-reference-object": {
+ "title": "Build an SQL Reference Object",
+ "intro": [
+ "Git is a version control system that keeps track of all the changes you make to your codebase.",
+ "In this 240-lesson workshop, you will learn how Git keeps track of your code by creating an object containing commonly used SQL commands."
+ ]
+ },
+ "lab-periodic-table-database": {
+ "title": "Build a Periodic Table Database",
+ "intro": [
+ "For this lab, you will create a Bash script to get information about chemical elements from a periodic table database."
+ ]
+ },
+ "lab-number-guessing-game": {
+ "title": "Build a Number Guessing Game",
+ "intro": [
+ "For this lab, you will use Bash scripting, PostgreSQL, and Git to create a number guessing game that runs in the terminal and saves user information."
+ ]
+ },
+ "review-git": {
+ "title": "Git Review",
+ "intro": ["Review Git concepts to prepare for the upcoming quiz."]
+ },
+ "quiz-git": {
+ "title": "Git Quiz",
+ "intro": ["Test what you've learned on Git with this quiz."]
+ },
+ "review-relational-databases": {
+ "title": "Relational Databases Review",
+ "intro": [
+ "Review relational databases concepts to prepare for the exam."
+ ]
+ },
"exam-relational-databases-certification": {
"title": "Relational Databases Certification Exam",
"intro": [
@@ -6143,13 +7213,105 @@
"back-end-development-and-apis": "Back End Development and APIs"
},
"modules": {
+ "nodejs-core-libraries": "Node.js Core Libraries",
+ "node-package-manager": "Node Package Manager",
+ "http-and-the-web-standards-model": "HTTP and the Web Standards Model",
+ "rest-api-and-web-services": "REST API and Web Services",
+ "introduction-to-express": "Introduction to Express",
+ "express-middleware": "Express Middleware",
+ "error-handling-in-express": "Error Handling in Express",
+ "websockets": "WebSockets",
+ "node-and-sql": "Node and SQL",
+ "security-and-privacy": "Security and Privacy",
+ "authentication": "Authentication",
+ "tooling-and-deployment": "Tooling and Deployment",
"back-end-development-and-apis-certification-exam": "Back End Development and APIs Certification Exam"
},
- "blocks": {
- "exam-back-end-development-and-apis-certification": {
- "title": "Back End Development and APIs Certification Exam",
+ "module-intros": {
+ "nodejs-core-libraries": {
+ "note": "Coming Late 2026",
"intro": [
- "Pass this exam to earn your Back End Development and APIs Certification"
+ "In this module, you will learn about common Node.js core libraries including the fs, os, path and more. Then you will get to practice what you have learned through workshops and labs and test your knowledge through a short quiz."
+ ]
+ },
+ "node-package-manager": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will be introduced to the Node Package Manager, which developers use to manage project dependencies and scripts. Then you will get to practice what you have learned through workshops and labs and test your knowledge with a short quiz."
+ ]
+ },
+ "http-and-the-web-standards-model": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about HTTP (Hypertext Transfer Protocol) and other important concepts including the request-response model, common response codes, DNS, TCP/IP, and more. Then you will get to practice what you have learned through a build your own web server workshop and test your knowledge with a short quiz."
+ ]
+ },
+ "rest-api-and-web-services": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about the REST API (Representational State Transfer Application Programming Interface) and how microservices work. Then you will take a short quiz to test your knowledge."
+ ]
+ },
+ "introduction-to-express": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will be introduced to Express.js, which is a framework used to build RESTful APIs. Then you will practice your skills through workshops and labs and test your knowledge with a short quiz."
+ ]
+ },
+ "express-middleware": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about middleware in Express.js, which is used to handle requests and responses between the client and server. You will then practice your skills through a workshop and lab and test your knowledge with a short quiz."
+ ]
+ },
+ "error-handling-in-express": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about how error handling, debugging, and health checks work in Express.js. You will then practice what you have learned in a lab and test your knowledge with a short quiz."
+ ]
+ },
+ "websockets": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will be introduced to websockets, which is a protocol used for real time communication with the client and server. You will then practice what you have learned in labs and workshops and test your knowledge with a short quiz."
+ ]
+ },
+ "node-and-sql": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will practice building applications with Node and SQL. Then you will take a short quiz to test your knowledge."
+ ]
+ },
+ "security-and-privacy": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about the differences between security and privacy as well as other concepts including CSPs, Permissions-Policies, PII, working with CORS, and more. Then you will take a short quiz to test your knowledge."
+ ]
+ },
+ "authentication": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about how authentication works in web applications along with other important concepts including JWTs, CSRFs, Passport, Helmet, cryptography and encryption, and more. You will then practice what you have learned in labs and workshops and test your knowledge with a short quiz."
+ ]
+ },
+ "tooling-and-deployment": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "In this module, you will learn about common tools used in the industry for deploying your full stack applications. Then you will take a short quiz to test your knowledge."
+ ]
+ },
+ "back-end-development-and-apis-certification-exam": {
+ "note": "Coming Late 2026",
+ "intro": [
+ "Pass this exam to earn your Back End Development and APIs Certification."
+ ]
+ }
+ },
+ "blocks": {
+ "lecture-understanding-the-http-request-response-model": {
+ "title": "Understanding the HTTP Request-Response Model",
+ "intro": [
+ "Learn the fundamentals of how web communication works through the HTTP request-response model, explore different types of web assets and responses, and understand how forms handle data submission using various HTTP methods."
]
}
}
@@ -6390,6 +7552,12 @@
"In these lectures, you will learn how to work with the audio and video elements."
]
},
+ "lab-html-audio-and-video-player": {
+ "title": "Build an HTML Audio and Video Player",
+ "intro": [
+ "In this lab, you will build an HTML audio and video player using the video and audio elements with controls and source attributes."
+ ]
+ },
"lecture-working-with-images-and-svgs": {
"title": "Working with Images and SVGs",
"intro": [
@@ -6408,6 +7576,12 @@
"In these lectures, you will learn how to work with the iframe element which is used to embed an external site on your web page."
]
},
+ "workshop-build-a-video-display-using-iframe": {
+ "title": "Build a Video Display Using iframe",
+ "intro": [
+ "In this workshop, you'll learn how to work with the iframe element by building a video display."
+ ]
+ },
"lab-video-compilation-page": {
"title": "Build a Video Compilation Page",
"intro": [
@@ -6549,12 +7723,24 @@
"In these lectures, you will learn about accessibility and its importance, assistive tools for people with disabilities, HTML attributes that let you create inclusive websites, accessibility best practices, and much more."
]
},
+ "workshop-debug-coding-journey-blog-page": {
+ "title": "Debug a Coding Journey Blog Page",
+ "intro": [
+ "In this workshop, you will debug and fix accessibility errors in a coding blog page."
+ ]
+ },
"lecture-accessible-tables-forms": {
"title": "Working with Accessible Tables and Forms",
"intro": [
"In these lectures, you will learn about how to create accessible tables and forms."
]
},
+ "workshop-tech-conference-schedule": {
+ "title": "Build a Tech Conference Schedule Table",
+ "intro": [
+ "In this workshop, you will build an accessible tech conference schedule table."
+ ]
+ },
"lecture-introduction-to-aria": {
"title": "Introduction to ARIA",
"intro": [
@@ -6854,6 +8040,13 @@
"In this lab, you'll design a contact form in HTML and style it using CSS."
]
},
+ "lab-feature-selection": {
+ "title": "Design a Feature Selection Page",
+ "intro": [
+ "In this lab, you'll build a feature selection page with custom-styled checkboxes.",
+ "You'll create feature cards with labels and checkboxes, then give custom styling to the checkboxes."
+ ]
+ },
"review-styling-forms": {
"title": "Styling Forms Review",
"intro": [
diff --git a/client/src/templates/Introduction/components/super-block-accordion.tsx b/client/src/templates/Introduction/components/super-block-accordion.tsx
index 782c437a2e1..b40dbf11334 100644
--- a/client/src/templates/Introduction/components/super-block-accordion.tsx
+++ b/client/src/templates/Introduction/components/super-block-accordion.tsx
@@ -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;
}
diff --git a/curriculum/src/build-superblock.ts b/curriculum/src/build-superblock.ts
index 7a387accff5..66ac01d1ac3 100644
--- a/curriculum/src/build-superblock.ts
+++ b/curriculum/src/build-superblock.ts
@@ -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`);
}
diff --git a/curriculum/structure/superblocks/back-end-development-and-apis-v9.json b/curriculum/structure/superblocks/back-end-development-and-apis-v9.json
index cc46fc15a02..3383272b221 100644
--- a/curriculum/structure/superblocks/back-end-development-and-apis-v9.json
+++ b/curriculum/structure/superblocks/back-end-development-and-apis-v9.json
@@ -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"]
}
diff --git a/curriculum/structure/superblocks/front-end-development-libraries-v9.json b/curriculum/structure/superblocks/front-end-development-libraries-v9.json
index 0b40002a78c..c3a0ce08246 100644
--- a/curriculum/structure/superblocks/front-end-development-libraries-v9.json
+++ b/curriculum/structure/superblocks/front-end-development-libraries-v9.json
@@ -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"]
}
diff --git a/curriculum/structure/superblocks/javascript-v9.json b/curriculum/structure/superblocks/javascript-v9.json
index 01a7f0e4646..666f5a4414c 100644
--- a/curriculum/structure/superblocks/javascript-v9.json
+++ b/curriculum/structure/superblocks/javascript-v9.json
@@ -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"]
diff --git a/curriculum/structure/superblocks/python-v9.json b/curriculum/structure/superblocks/python-v9.json
index e6583f1473b..f061983cfac 100644
--- a/curriculum/structure/superblocks/python-v9.json
+++ b/curriculum/structure/superblocks/python-v9.json
@@ -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"]
}
diff --git a/curriculum/structure/superblocks/relational-databases-v9.json b/curriculum/structure/superblocks/relational-databases-v9.json
index 398daacde81..4d224fdea90 100644
--- a/curriculum/structure/superblocks/relational-databases-v9.json
+++ b/curriculum/structure/superblocks/relational-databases-v9.json
@@ -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"]
}
diff --git a/curriculum/structure/superblocks/responsive-web-design-v9.json b/curriculum/structure/superblocks/responsive-web-design-v9.json
index 48f24d26d6f..59e43cb59b0 100644
--- a/curriculum/structure/superblocks/responsive-web-design-v9.json
+++ b/curriculum/structure/superblocks/responsive-web-design-v9.json
@@ -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"
]