diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index e3670ca4ba3..e2dcbcfa13c 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -2028,6 +2028,1379 @@
}
}
},
+ "introduction-to-variables-and-strings-in-javascript": {
+ "title": "Introduction to Variables and Strings in JavaScript",
+ "summary": ["Learn the basics of variables and strings in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn about variables and strings, which are fundamental concepts in JavaScript programming."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-introduction-to-javascript": {
+ "title": "Introduction to JavaScript",
+ "intro": [
+ "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": [
+ "In this workshop, you will learn JavaScript fundamentals by building a greeting bot.",
+ "You will learn about variables, let, const, console.log and basic string usage."
+ ]
+ },
+ "lab-javascript-trivia-bot": {
+ "title": "Build a JavaScript Trivia Bot",
+ "intro": [
+ "In this lab, you'll practice working with JavaScript variables and strings by building a trivia bot."
+ ]
+ },
+ "lab-sentence-maker": {
+ "title": "Build a Sentence Maker",
+ "intro": [
+ "In this lab, you will continue practicing with strings and concatenation by creating and customizing various stories."
+ ]
+ },
+ "lecture-working-with-data-types": {
+ "title": "Working with Data Types",
+ "intro": [
+ "In the following lectures, you will learn how to work with data types in JavaScript. You will also learn how dynamic typing differs from static typing, the typeof operator, and the typeof null bug."
+ ]
+ },
+ "review-javascript-variables-and-data-types": {
+ "title": "JavaScript Variables and Data Types Review",
+ "intro": [
+ "Before you are quizzed on JavaScript variables and data types you first need to review the concepts.",
+ "Open up this page to review variables, data types, logging and commenting."
+ ]
+ },
+ "quiz-javascript-variables-and-data-types": {
+ "title": "JavaScript Variables and Data Types Quiz",
+ "intro": [
+ "Test your knowledge of JavaScript variables and data types with this quiz."
+ ]
+ },
+ "lecture-working-with-strings-in-javascript": {
+ "title": "Working with Strings in JavaScript",
+ "intro": [
+ "In these lectures, you will learn how to work with strings in JavaScript. You will learn how to access characters from a string, how to use template literals and interpolation, how to create a new line in strings, and much more."
+ ]
+ },
+ "workshop-teacher-chatbot": {
+ "title": "Build a Teacher Chatbot",
+ "intro": [
+ "In this workshop, you will continue to learn more about JavaScript strings by building a chatbot.",
+ "You will learn how to work with template literals, and the indexOf method."
+ ]
+ },
+ "lecture-working-with-string-character-methods": {
+ "title": "Working with String Character Methods",
+ "intro": [
+ "In this lecture you will learn about ASCII character encoding and how to use JavaScript's charCodeAt() and fromCharCode() methods to convert between characters and their numerical ASCII values."
+ ]
+ },
+ "lecture-working-with-string-search-and-slice-methods": {
+ "title": "Working with String Search and Slice Methods",
+ "intro": [
+ "In this lecture you will learn how to search for substrings using the includes() method and how to extract portions of strings using the slice() method."
+ ]
+ },
+ "workshop-string-inspector": {
+ "title": "Build a String Inspector",
+ "intro": [
+ "In this workshop, you will practice working with the includes() and slice() methods by building a string inspector."
+ ]
+ },
+ "lecture-working-with-string-formatting-methods": {
+ "title": "Working with String Formatting Methods",
+ "intro": [
+ "In this lecture you will learn how to format strings by changing their case using toUpperCase() and toLowerCase() methods, and how to remove whitespace using trim(), trimStart(), and trimEnd() methods."
+ ]
+ },
+ "workshop-string-formatter": {
+ "title": "Build a String Formatter",
+ "intro": [
+ "In this workshop, you will practice working with various string methods including trim(), toUpperCase() and toLowerCase()."
+ ]
+ },
+ "lecture-working-with-string-modification-methods": {
+ "title": "Working with String Modification Methods",
+ "intro": [
+ "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": [
+ "Before you are quizzed on working with JavaScript strings, you first need to review.",
+ "Open up this page to review how to work with template literals, the slice method, the includes method, the trim method and more."
+ ]
+ },
+ "quiz-javascript-strings": {
+ "title": "JavaScript Strings Quiz",
+ "intro": ["Test your knowledge of JavaScript strings with this quiz."]
+ }
+ }
+ },
+ "introduction-to-booleans-and-numbers-in-javascript": {
+ "title": "Introduction to Booleans and Numbers in JavaScript",
+ "summary": ["Learn the basics of booleans and numbers in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with booleans and numbers in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-numbers-and-arithmetic-operators": {
+ "title": "Working with Numbers and Arithmetic Operators",
+ "intro": [
+ "In these lectures you will learn about the number type, arithmetic operators, and using them with numbers and strings."
+ ]
+ },
+ "lab-debug-type-coercion-errors": {
+ "title": "Debug Type Coercion Errors in a Buggy App",
+ "intro": [
+ "In this lab, you will be working with a buggy app that contains several type coercion errors.",
+ "Your task is to identify and fix these errors to ensure the app functions correctly."
+ ]
+ },
+ "lecture-working-with-operator-behavior": {
+ "title": "Working with Operator Behavior",
+ "intro": [
+ "In these lectures you will learn about operator precedence, the increment and decrement operators, and compound assignment operators."
+ ]
+ },
+ "lab-debug-increment-and-decrement-operator-errors": {
+ "title": "Debug Increment and Decrement Operator Errors in a Buggy App",
+ "intro": [
+ "In this lab, you'll debug an app that has several errors related to the increment and decrement operators.",
+ "Your task is to identify and fix the errors so that the app works as intended."
+ ]
+ },
+ "lecture-working-with-comparison-and-boolean-operators": {
+ "title": "Working with Comparison and Boolean Operators",
+ "intro": [
+ "In these lectures you will learn about booleans, and equality and inequality operators, and other comparison operators."
+ ]
+ },
+ "workshop-logic-checker-app": {
+ "title": "Build a Logic Checker App",
+ "intro": [
+ "In this workshop, you'll practice working with conditional statements and comparison operators by building a logic checker app."
+ ]
+ },
+ "lecture-working-with-unary-and-bitwise-operators": {
+ "title": "Working with Unary and Bitwise Operators",
+ "intro": [
+ "In these lectures, you will learn about unary and bitwise operators."
+ ]
+ },
+ "lecture-working-with-conditional-logic-and-math-methods": {
+ "title": "Working with Conditional Logic and Math Methods",
+ "intro": [
+ "In these lectures, you will learn about conditional statements, binary logical operators, and the Math object."
+ ]
+ },
+ "workshop-mathbot": {
+ "title": "Build a Mathbot",
+ "intro": [
+ "In this workshop, you will review how to work with the different Math object methods by building a Mathbot."
+ ]
+ },
+ "lab-fortune-teller": {
+ "title": "Build a Fortune Teller",
+ "intro": [
+ "In this lab, you'll build a fortune teller by randomly selecting a fortune from the available fortunes.",
+ "You'll practice how to work with the Math.random() method and the Math.floor() method to generate random numbers."
+ ]
+ },
+ "lecture-working-with-numbers-and-common-number-methods": {
+ "title": "Working with Numbers and Common Number Methods",
+ "intro": [
+ "In these lectures, you will learn about numbers and common number methods. These include isNaN(), parseInt(), parseFloat(), and toFixed()."
+ ]
+ },
+ "review-javascript-math": {
+ "title": "JavaScript Math Review",
+ "intro": [
+ "Before you're quizzed on working with the Math object, you should review what you've learned.",
+ "Open up this page to review how to work with the Math.random() method, the Math.floor() method and more."
+ ]
+ },
+ "quiz-javascript-math": {
+ "title": "JavaScript Math Quiz",
+ "intro": [
+ "Test your knowledge of the JavaScript Math object with this quiz."
+ ]
+ },
+ "lecture-understanding-comparisons-and-conditionals": {
+ "title": "Understanding Comparisons and Conditionals",
+ "intro": [
+ "In these lectures, you will learn about comparison operators and conditionals. You will learn how the various conditionals differ from one another, and how comparisons work with null and undefined."
+ ]
+ },
+ "review-javascript-comparisons-and-conditionals": {
+ "title": "JavaScript Comparisons and Conditionals Review",
+ "intro": [
+ "Before you're quizzed on working with conditionals, you should review what you've learned about them.",
+ "Open up this page to review how to work with switch statements, other types of conditionals and more."
+ ]
+ },
+ "quiz-javascript-comparisons-and-conditionals": {
+ "title": "JavaScript Comparisons and Conditionals Quiz",
+ "intro": [
+ "Test your knowledge of JavaScript Comparisons and Conditionals with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-functions-in-javascript": {
+ "title": "Introduction to Functions in JavaScript",
+ "summary": ["Learn the basics of functions in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with functions in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-functions": {
+ "title": "Working with Functions",
+ "intro": [
+ "In these lectures, you will learn how to reuse a block of code with functions. You will learn what the purpose of a function is and how they work, and how scope works in programming. "
+ ]
+ },
+ "workshop-calculator": {
+ "title": "Build a Calculator",
+ "intro": [
+ "In this workshop, you will review your knowledge of functions by building a calculator."
+ ]
+ },
+ "lab-boolean-check": {
+ "title": "Build a Boolean Check Function",
+ "intro": [
+ "In this lab, you'll implement a function that checks if a value is a boolean."
+ ]
+ },
+ "lab-email-masker": {
+ "title": "Build an Email Masker",
+ "intro": [
+ "In this lab, you'll build an email masker that will take an email address and obscure it.",
+ "You'll practice string slicing, concatenation, and using functions."
+ ]
+ },
+ "workshop-loan-qualification-checker": {
+ "title": "Build a Loan Qualification Checker",
+ "intro": [
+ "In this workshop, you will continue to learn how to work with conditionals by building a loan qualification checker app.",
+ "You will learn more about if statements, and how to use comparison operators and multiple conditions in an if statement."
+ ]
+ },
+ "lab-celsius-to-fahrenheit-converter": {
+ "title": "Build a Celsius to Fahrenheit Converter",
+ "intro": [
+ "In this lab you will implement a function that converts the temperature from Celsius to Fahrenheit."
+ ]
+ },
+ "lab-counting-cards": {
+ "title": "Build a Card Counting Assistant",
+ "intro": ["In this lab you will use JavaScript to count dealt cards."]
+ },
+ "lab-leap-year-calculator": {
+ "title": "Build a Leap Year Calculator ",
+ "intro": [
+ "In this lab you'll use conditional statements and loops to determine if a year is a leap year."
+ ]
+ },
+ "lab-truncate-string": {
+ "title": "Implement the Truncate String Algorithm",
+ "intro": [
+ "In this lab, you will practice truncating a string at a certain length."
+ ]
+ },
+ "lab-string-ending-checker": {
+ "title": "Build a Confirm the Ending Tool",
+ "intro": [
+ "In this lab, you will implement a function that checks if a given string ends with a specified target string."
+ ]
+ },
+ "review-javascript-functions": {
+ "title": "JavaScript Functions Review",
+ "intro": [
+ "Before you're quizzed on JavaScript functions, you should review what you've learned about them.",
+ "Open up this page to review functions, arrow functions and scope."
+ ]
+ },
+ "quiz-javascript-functions": {
+ "title": "JavaScript Functions Quiz",
+ "intro": ["Test your knowledge of JavaScript functions with this quiz."]
+ }
+ }
+ },
+ "introduction-to-arrays-in-javascript": {
+ "title": "Introduction to Arrays in JavaScript",
+ "summary": ["Learn the basics of arrays in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with arrays in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-arrays": {
+ "title": "Working with Arrays",
+ "intro": [
+ "In these lectures, you will learn how to work with JavaScript arrays. You will learn about what makes an array, one-dimensional and two-dimensional arrays, how to access and update the elements in an array, and much more."
+ ]
+ },
+ "workshop-shopping-list": {
+ "title": "Build a Shopping List",
+ "intro": [
+ "In this workshop, you will practice how to work with arrays by building a shopping list.",
+ "You will review how to add and remove elements from an array using methods like push, pop, shift, and unshift."
+ ]
+ },
+ "lab-lunch-picker-program": {
+ "title": "Build a Lunch Picker Program",
+ "intro": [
+ "In this lab, you'll review working with arrays and random numbers by building a lunch picker program."
+ ]
+ },
+ "lab-golf-score-translator": {
+ "title": "Build a Golf Score Translator",
+ "intro": [
+ "For this lab, you will use array methods to translate golf scores into their nickname."
+ ]
+ },
+ "lecture-working-with-common-array-methods": {
+ "title": "Working with Common Array Methods",
+ "intro": [
+ "In these lectures, you will learn about the array methods for performing more advanced operations like getting the position of an item in an array, checking if an array contains a certain element, copying an array, and lots more."
+ ]
+ },
+ "review-javascript-arrays": {
+ "title": "JavaScript Arrays Review",
+ "intro": [
+ "Before you're quizzed on JavaScript arrays, you should review what you've learned about them.",
+ "Open up this page to review concepts like array destructuring, how to add and remove elements from an array, and more."
+ ]
+ },
+ "quiz-javascript-arrays": {
+ "title": "JavaScript Arrays Quiz",
+ "intro": ["Test your knowledge of JavaScript arrays with this quiz."]
+ }
+ }
+ },
+ "introduction-to-objects-in-javascript": {
+ "title": "Introduction to Objects in JavaScript",
+ "summary": ["Learn the basics of objects in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with objects in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-introduction-to-javascript-objects-and-their-properties": {
+ "title": "Introduction to JavaScript Objects and Their Properties",
+ "intro": [
+ "In these lectures, you will learn the fundamentals of JavaScript objects, including how to create them, access their properties, and understand the difference between primitive and non-primitive data types."
+ ]
+ },
+ "lecture-working-with-json": {
+ "title": "Working with JSON",
+ "intro": [
+ "In these lectures, you will learn about JavaScript Object Notation (JSON), including how to access JSON data and use the JSON.parse() and JSON.stringify() methods."
+ ]
+ },
+ "lecture-working-with-optional-chaining-and-object-destructuring": {
+ "title": "Working with Optional Chaining and Object Destructuring",
+ "intro": [
+ "In these lectures, you will learn about advanced object manipulation techniques in JavaScript, including the optional chaining operator and object destructuring syntax."
+ ]
+ },
+ "workshop-recipe-tracker": {
+ "title": "Build a Recipe Tracker",
+ "intro": [
+ "In this workshop, you will review working with JavaScript objects by building a recipe tracker."
+ ]
+ },
+ "lab-quiz-game": {
+ "title": "Build a Quiz Game",
+ "intro": [
+ "In this lab, you'll build a quiz game using JavaScript arrays and objects.",
+ "You'll also practice using functions to randomly select a question and an answer from an array and compare them."
+ ]
+ },
+ "lab-record-collection": {
+ "title": "Build a Record Collection",
+ "intro": [
+ "In this lab you will build a function to manage a record collection."
+ ]
+ },
+ "review-javascript-objects": {
+ "title": "JavaScript Objects Review",
+ "intro": [
+ "Before you're quizzed on JavaScript objects, you should review what you've learned about them.",
+ "Open up this page to review concepts including how to access information from objects, object destructuring, working with JSON, and more."
+ ]
+ },
+ "quiz-javascript-objects": {
+ "title": "JavaScript Objects Quiz",
+ "intro": ["Test your knowledge of JavaScript objects with this quiz."]
+ }
+ }
+ },
+ "introduction-to-loops-in-javascript": {
+ "title": "Introduction to Loops in JavaScript",
+ "summary": ["Learn the basics of loops in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with loops in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-loops": {
+ "title": "Working with Loops",
+ "intro": [
+ "Loops are an essential part of JavaScript. That's why the following lectures have been prepared for you to learn about the different types of loops and how they work, and also how iteration works."
+ ]
+ },
+ "workshop-sentence-analyzer": {
+ "title": "Build a Sentence Analyzer",
+ "intro": [
+ "In this workshop, you'll review how to work with JavaScript loops by building a sentence analyzer app."
+ ]
+ },
+ "lab-longest-word-in-a-string": {
+ "title": "Build a Longest Word Finder App",
+ "intro": [
+ "In this lab, you will use JavaScript loops to find the length of the longest word in the given sentence."
+ ]
+ },
+ "lab-factorial-calculator": {
+ "title": "Build a Factorial Calculator ",
+ "intro": [
+ "In this lab, you'll build a factorial calculator.",
+ "You'll practice using loops and conditionals to calculate the factorial of a number."
+ ]
+ },
+ "lab-mutations": {
+ "title": "Implement the Mutations Algorithm",
+ "intro": [
+ "In this lab, you will practice iterating over two different strings to compare their characters."
+ ]
+ },
+ "lab-chunky-monkey": {
+ "title": "Implement the Chunky Monkey Algorithm",
+ "intro": [
+ "In this lab, you will practice dividing an array into smaller arrays with the technique of your choice."
+ ]
+ },
+ "lab-profile-lookup": {
+ "title": "Build a Profile Lookup",
+ "intro": [
+ "In this lab, you'll create a function that looks up profile information."
+ ]
+ },
+ "lab-repeat-a-string": {
+ "title": "Build a String Repeating Function",
+ "intro": [
+ "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": [
+ "Before you're quizzed on the different JavaScript loops, you should review them.",
+ "Open up this page to review the for...of loop, while loop, break and continue statements and more."
+ ]
+ },
+ "quiz-javascript-loops": {
+ "title": "JavaScript Loops Quiz",
+ "intro": ["Test your knowledge of JavaScript loops with this quiz."]
+ }
+ }
+ },
+ "javascript-fundamentals-review": {
+ "title": "JavaScript Fundamentals Review",
+ "summary": ["Review the core concepts of JavaScript."],
+ "intro": [
+ "In this interactive course, you will practice core JavaScript fundamentals including loops, objects, arrays and more."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-types-and-objects": {
+ "title": "Working with Types and Objects",
+ "intro": [
+ "In these lectures you will learn about string objects, the toString() method, the Number constructor and more."
+ ]
+ },
+ "lecture-working-with-arrays-variables-and-naming-practices": {
+ "title": "Working with Arrays, Variables, and Naming Practices",
+ "intro": [
+ "In these lectures you will learn about common practices for naming variables and functions, and how to work with arrays."
+ ]
+ },
+ "lecture-working-with-code-quality-and-execution-concepts": {
+ "title": "Working with Code Quality and Execution Concepts",
+ "intro": [
+ "In these lectures you will learn what are linters and formatters, what is memory management, and closures."
+ ]
+ },
+ "lab-reverse-a-string": {
+ "title": "Build a String Inverter",
+ "intro": [
+ "In this lab, you create a function that reverses a given string."
+ ]
+ },
+ "lab-largest-number-finder": {
+ "title": "Build the Largest Number Finder",
+ "intro": [
+ "In this lab, you will use JavaScript fundamentals to create a function that finds the largest number in each sub-array of a given array."
+ ]
+ },
+ "lab-first-element-finder": {
+ "title": "Build a First Element Finder",
+ "intro": [
+ "In this lab, you will create a function that looks through an array and returns the first element in it that passes a \"truth test\"."
+ ]
+ },
+ "lab-slice-and-splice": {
+ "title": "Implement the Slice and Splice Algorithm",
+ "intro": [
+ "In this lab, you will practice merging an array with another."
+ ]
+ },
+ "lab-pyramid-generator": {
+ "title": "Build a Pyramid Generator",
+ "intro": [
+ "In this lab you'll build a pyramid generator.",
+ "You'll take a number as input and generate a pyramid with that many levels using a loop."
+ ]
+ },
+ "lab-gradebook-app": {
+ "title": "Build a Gradebook App",
+ "intro": [
+ "For this lab, you'll create a gradebook app.",
+ "You'll practice conditionals to determine the student's grade based on their score."
+ ]
+ },
+ "lecture-the-var-keyword-and-hoisting": {
+ "title": "The var Keyword and Hoisting",
+ "intro": [
+ "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": [
+ "In this lab, you will create a function that removes all falsy values from an array."
+ ]
+ },
+ "lab-inventory-management-program": {
+ "title": "Build an Inventory Management Program",
+ "intro": [
+ "For this lab, you'll build an inventory management program using JavaScript.",
+ "You'll use JavaScript array of objects to manage the inventory."
+ ]
+ },
+ "lecture-understanding-modules-imports-and-exports": {
+ "title": "Understanding Modules, Imports, and Exports",
+ "intro": [
+ "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": [
+ "In this lab, you'll build a password generator app based on the user's input."
+ ]
+ },
+ "lab-sum-all-numbers-algorithm": {
+ "title": "Design a Sum All Numbers Algorithm",
+ "intro": [
+ "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."
+ ]
+ },
+ "review-javascript-fundamentals": {
+ "title": "JavaScript Fundamentals Review",
+ "intro": [
+ "Before you are quizzed on JavaScript fundamentals, you first need to review the concepts.",
+ "Open up this page to review concepts like closures, memory management, and more."
+ ]
+ },
+ "quiz-javascript-fundamentals": {
+ "title": "JavaScript Fundamentals Quiz",
+ "intro": [
+ "Test your knowledge of JavaScript fundamentals with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-higher-order-functions-and-callbacks-in-javascript": {
+ "title": "Introduction to Higher-Order Functions and Callbacks in JavaScript",
+ "summary": [
+ "Learn the basics of higher-order functions and callbacks in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you will learn how to work with higher-order functions and callbacks in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-higher-order-functions-and-callbacks": {
+ "title": "Working with Higher Order Functions and Callbacks",
+ "intro": [
+ "In these lectures, you will learn how to work with higher order functions and callbacks. The higher order functions you will learn include map(), filter(), reduce(), sort(), every(), and some(). You will also learn how to chain these methods together to achieve your desired results."
+ ]
+ },
+ "workshop-library-manager": {
+ "title": "Build a Library Manager",
+ "intro": [
+ "In this workshop, you will learn higher order array methods by building a library manager."
+ ]
+ },
+ "lab-book-organizer": {
+ "title": "Build a Book Organizer",
+ "intro": [
+ "In this lab, you'll build a book organizer using higher order functions in JavaScript."
+ ]
+ },
+ "lab-sorted-index-finder": {
+ "title": "Implement a Sorted Index Finder",
+ "intro": [
+ "In this lab, you will create a function that finds the index at which a given number should be inserted into a sorted array to maintain the array's sorted order."
+ ]
+ },
+ "lab-symmetric-difference": {
+ "title": "Build a Symmetric Difference Function",
+ "intro": [
+ "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": [
+ "Before you're quizzed on JavaScript higher order functions, you should review them.",
+ "Open up this page to review concepts including how to work with the map(), filter(), and reduce() methods."
+ ]
+ },
+ "quiz-javascript-higher-order-functions": {
+ "title": "JavaScript Higher Order Functions Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript higher order functions with this quiz."
+ ]
+ }
+ }
+ },
+ "learn-dom-manipulation-and-events-with-javascript": {
+ "title": "Learn DOM Manipulation and Events with JavaScript",
+ "summary": [
+ "Learn how to manipulate the DOM and work with events in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you will learn how to manipulate the DOM and work with events in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-the-dom-click-events-and-web-apis": {
+ "title": "Working with the DOM, Click Events, and Web APIs",
+ "intro": [
+ "In these lectures, you will learn how to work with the Document Object Model (DOM), the addEventListener() method and events, and web APIs."
+ ]
+ },
+ "workshop-storytelling-app": {
+ "title": "Build a Storytelling App",
+ "intro": [
+ "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": [
+ "In this lab, you'll build a favorite icon toggler by utilizing JavaScript click events."
+ ]
+ },
+ "lecture-understanding-the-event-object-and-event-delegation": {
+ "title": "Understanding the Event Object and Event Delegation",
+ "intro": [
+ "In these lectures, you will learn about the event object, the change event, event bubbling, and event delegation."
+ ]
+ },
+ "workshop-music-instrument-filter": {
+ "title": "Build a Music Instrument Filter",
+ "intro": [
+ "In this workshop, you will build a music instrument filter with JavaScript."
+ ]
+ },
+ "lab-real-time-counter": {
+ "title": "Build a Real Time Counter",
+ "intro": [
+ "In this lab, you'll build a real-time character counter",
+ "You'll practice how to work with the input event when the user types in the input field."
+ ]
+ },
+ "lab-lightbox-viewer": {
+ "title": "Build a Lightbox Viewer",
+ "intro": [
+ "In this lab, you'll build a lightbox viewer for viewing images in a focused mode.",
+ "You'll practice click events and toggling classes."
+ ]
+ },
+ "workshop-rps-game": {
+ "title": "Build a Rock, Paper, Scissors Game",
+ "intro": [
+ "In this workshop, you will review DOM manipulation and events by building a Rock, Paper, Scissors Game."
+ ]
+ },
+ "lab-football-team-cards": {
+ "title": "Build a Set of Football Team Cards",
+ "intro": [
+ "In this lab, you'll use DOM manipulation, object destructuring, event handling, and data filtering to build a set of football team cards."
+ ]
+ },
+ "review-dom-manipulation-and-click-events-with-javascript": {
+ "title": "DOM Manipulation and Click Events with JavaScript Review",
+ "intro": [
+ "Before you're quizzed on the DOM, you should review what you've learned about it.",
+ "Open up this page to review concepts including how to work with the DOM, Web APIs, the addEventListener() method, change events, event bubbling and more."
+ ]
+ },
+ "quiz-dom-manipulation-and-click-event-with-javascript": {
+ "title": "DOM Manipulation and Click Events with JavaScript Quiz",
+ "intro": [
+ "Test your knowledge of DOM manipulation and click events in JavaScript with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-javascript-and-accessibility": {
+ "title": "Introduction to JavaScript and Accessibility",
+ "summary": ["Learn how to use JavaScript to enhance web accessibility."],
+ "intro": [
+ "In this interactive course, you will learn how to use JavaScript to enhance web accessibility."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-understanding-aria-expanded-aria-live-and-common-aria-states": {
+ "title": "Understanding aria-expanded, aria-live, and Common ARIA States",
+ "intro": [
+ "In these lectures you will learn more about ARIA attributes like aria-expanded, aria-live, and common ARIA states."
+ ]
+ },
+ "workshop-planets-tablist": {
+ "title": "Build a Planets Tablist",
+ "intro": [
+ "In this workshop, you will build a dynamic tabbed interface that showcases facts about the planets in the solar system."
+ ]
+ },
+ "workshop-note-taking-app": {
+ "title": "Build a Note Taking App",
+ "intro": [
+ "In this workshop, you are going to build an accessible note taking app.",
+ "This will provide you with the opportunity to practice working with aria-live attribute."
+ ]
+ },
+ "lab-theme-switcher": {
+ "title": "Build a Theme Switcher",
+ "intro": [
+ "In this lab, you will build a theme switcher and practice working with the aria-haspopup, aria-expanded, and aria-controls attributes."
+ ]
+ },
+ "review-js-a11y": {
+ "title": "JavaScript and Accessibility Review",
+ "intro": [
+ "Before you're quizzed on JavaScript and accessibility, you should review what you've learned about it.",
+ "Open up this page to review concepts including how to work with the aria-expanded, aria-live, and aria-controls attributes."
+ ]
+ },
+ "quiz-js-a11y": {
+ "title": "JavaScript and Accessibility Quiz",
+ "intro": [
+ "Test your knowledge of JavaScript and accessibility best practices with this quiz."
+ ]
+ }
+ }
+ },
+ "learn-javascript-debugging": {
+ "title": "Learn JavaScript Debugging",
+ "summary": ["Learn how to debug JavaScript code effectively."],
+ "intro": [
+ "In this interactive course, you will learn how to debug JavaScript code."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-debugging-techniques": {
+ "title": "Debugging Techniques",
+ "intro": [
+ "In these lectures, you will learn about the common errors in JavaScript and the techniques you can use to fix them – a process called debugging."
+ ]
+ },
+ "lab-random-background-color-changer": {
+ "title": "Debug a Random Background Color Changer",
+ "intro": [
+ "In this lab, you'll debug a random background color changer and fix the errors to make it work properly."
+ ]
+ },
+ "review-debugging-javascript": {
+ "title": "Debugging JavaScript Review",
+ "intro": [
+ "Before you're quizzed on common debugging techniques, you should review what you've learned.",
+ "Open up this page to review concepts including how to work with the throw statement, try...catch...finally and more."
+ ]
+ },
+ "quiz-debugging-javascript": {
+ "title": "Debugging JavaScript Quiz",
+ "intro": ["Test your knowledge of JavaScript debugging with this quiz."]
+ }
+ }
+ },
+ "learn-basic-regex-with-javascript": {
+ "title": "Learn Basic Regex with JavaScript",
+ "summary": ["Learn the basics of regular expressions in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn the fundamentals of regular expressions and how to use them in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-regular-expressions": {
+ "title": "Working with Regular Expressions",
+ "intro": [
+ "In these lectures, you will learn about regular expressions in JavaScript. You will learn about the methods for working with regular expressions, modifiers, character classes, lookaheads, lookbehinds, back-references, quantifiers, and more."
+ ]
+ },
+ "workshop-spam-filter": {
+ "title": "Build a Spam Filter",
+ "intro": [
+ "Regular expressions, often shortened to \"regex\" or \"regexp\", are patterns that help programmers match, search, and replace text. Regular expressions are powerful, but can be difficult to understand because they use so many special characters.",
+ "In this workshop, you'll use capture groups, positive lookaheads, negative lookaheads, and other techniques to match any text you want."
+ ]
+ },
+ "lab-palindrome-checker": {
+ "title": "Build a Palindrome Checker",
+ "intro": [
+ "For this lab, you'll build an application that checks whether a given word is a palindrome."
+ ]
+ },
+ "lab-regex-sandbox": {
+ "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."
+ ]
+ },
+ "lab-markdown-to-html-converter": {
+ "title": "Build a Markdown to HTML Converter",
+ "intro": [
+ "For this lab, you'll build a Markdown to HTML converter using JavaScript.",
+ "You'll practice regular expressions, string manipulation, and more."
+ ]
+ },
+ "review-javascript-regular-expressions": {
+ "title": "JavaScript Regular Expressions Review",
+ "intro": [
+ "Before you're quizzed on Regular Expressions, you should review what you've learned.",
+ "Open up this page to review concepts like lookaheads, lookbehinds, common regex modifiers and more."
+ ]
+ },
+ "quiz-javascript-regular-expressions": {
+ "title": "JavaScript Regular Expressions Quiz",
+ "intro": [
+ "Test your knowledge of JavaScript Regular Expressions with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-dates-in-javascript": {
+ "title": "Introduction to Dates in JavaScript",
+ "summary": ["Learn how to work with dates in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with dates in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-dates": {
+ "title": "Working with Dates",
+ "intro": [
+ "In these lectures, you will learn about the JavaScript date object. You will learn about the methods for working with dates and how to format dates."
+ ]
+ },
+ "lab-date-conversion": {
+ "title": "Build a Date Conversion Program",
+ "intro": [
+ "In this lab, you'll build a program to convert a date from one format to another."
+ ]
+ },
+ "review-javascript-dates": {
+ "title": "JavaScript Dates Review",
+ "intro": [
+ "Before you're quizzed on working with dates, you should review what you've learned.",
+ "Open up this page to review the Date() object and common methods."
+ ]
+ },
+ "quiz-javascript-dates": {
+ "title": "JavaScript Dates Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript Dates with this quiz."
+ ]
+ }
+ }
+ },
+ "learn-audio-and-video-events-with-javascript": {
+ "title": "Learn Audio and Video Events with JavaScript",
+ "summary": ["Learn how to work with audio and video events in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn how to work with audio and video events in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-audio-and-video": {
+ "title": "Working with Audio and Video",
+ "intro": [
+ "In these lectures, you will learn how to work with audio and video files using JavaScript. You will learn about the Audio and Video constructors, their methods and properties, audio and video formats, codecs, the HTMLMediaElement API, and much more."
+ ]
+ },
+ "workshop-music-player": {
+ "title": "Build a Music Player",
+ "intro": [
+ "In this workshop, you'll code a basic MP3 player using HTML, CSS, and JavaScript.",
+ "The project covers fundamental concepts such as handling audio playback, managing a playlist, implementing play, pause, next, and previous functionalities and dynamically update your user interface based on the current song."
+ ]
+ },
+ "lab-drum-machine": {
+ "title": "Build a Drum Machine",
+ "intro": [
+ "For this lab you will use the audio element to build a drum machine."
+ ]
+ },
+ "review-javascript-audio-and-video": {
+ "title": "JavaScript Audio and Video Review",
+ "intro": [
+ "Before you're quizzed on working with audio and video in JavaScript, you should review what you've learned about them.",
+ "Open up this page to review concepts including the Audio constructor, the HTMLMediaElement API and more."
+ ]
+ },
+ "quiz-javascript-audio-and-video": {
+ "title": "JavaScript Audio and Video Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript audio and video with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-maps-and-sets-in-javascript": {
+ "title": "Introduction to Maps and Sets in JavaScript",
+ "summary": ["Learn about the Map and Set objects in JavaScript."],
+ "intro": [
+ "In this interactive course, you will learn about the Map and Set objects in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-maps-and-sets": {
+ "title": "Working with Maps and Sets",
+ "intro": [
+ "In these lectures, you will learn about JavaScript Map and Set. You will also learn how they both differ from WeakSets and WeakMaps."
+ ]
+ },
+ "workshop-plant-nursery-catalog": {
+ "title": "Build a Plant Nursery Catalog",
+ "intro": [
+ "In this workshop, you will practice using Maps and Sets by building a plant nursery catalog."
+ ]
+ },
+ "lab-voting-system": {
+ "title": "Build a Voting System",
+ "intro": [
+ "In this lab, you'll build a voting system using Maps and Sets.",
+ "You'll practice how to use the Map object to store key-value pairs and the Set object to store unique values."
+ ]
+ },
+ "review-javascript-maps-and-sets": {
+ "title": "JavaScript Maps and Sets Review",
+ "intro": [
+ "Before you're quizzed on JavaScript Maps and Sets, you should review what you've learned about them.",
+ "Open up this page to review concepts such as the Map and Set objects, as well as WeakSet and WeakMap."
+ ]
+ },
+ "quiz-javascript-maps-and-sets": {
+ "title": "JavaScript Maps and Sets Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript Maps and Sets with this quiz."
+ ]
+ }
+ }
+ },
+ "learn-localstorage-and-crud-operations-with-javascript": {
+ "title": "Learn localStorage and CRUD Operations with JavaScript",
+ "summary": [
+ "Learn how to use localStorage and perform CRUD operations in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you will learn how to use localStorage and perform CRUD operations in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-working-with-client-side-storage-and-crud-operations": {
+ "title": "Working with Client-Side Storage and CRUD Operations",
+ "intro": [
+ "In these lectures, you will learn about client-side storage and CRUD operations in JavaScript. You will learn about localStorage and sessionStorage alongside their methods and properties, cookies, the Cache API, IndexedDB, and much more."
+ ]
+ },
+ "workshop-todo-app": {
+ "title": "Build a Todo App using Local Storage",
+ "intro": [
+ "Local storage is a web browser feature that lets web applications store key-value pairs persistently within a user's browser. This allows web apps to save data during one session, then retrieve it in a later page session.",
+ "In this workshop, you'll learn how to handle form inputs, manage local storage, perform CRUD (Create, Read, Update, Delete) operations on tasks, implement event listeners, and toggle UI elements."
+ ]
+ },
+ "lab-bookmark-manager-app": {
+ "title": "Build a Bookmark Manager App",
+ "intro": [
+ "For this lab, you'll build a bookmark manager app.",
+ "You'll utilize local storage to store bookmarks, and practice how to add, remove, and display bookmarks."
+ ]
+ },
+ "review-local-storage-and-crud": {
+ "title": "Local Storage and CRUD Review",
+ "intro": [
+ "Before you are quizzed on working with localStorage, you first need to review the concepts.",
+ "Open up this page to review the localStorage property, sessionStorage property and more."
+ ]
+ },
+ "quiz-local-storage-and-crud": {
+ "title": "Local Storage and CRUD Quiz",
+ "intro": [
+ "Test what you've learned about local storage and CRUD with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-javascript-classes": {
+ "title": "Introduction to JavaScript Classes",
+ "summary": ["Learn about classes in JavaScript and how to use them."],
+ "intro": [
+ "In this interactive course, you will learn about classes in JavaScript and how to use them."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-understanding-how-to-work-with-classes-in-javascript": {
+ "title": "Understanding How to Work with Classes in JavaScript",
+ "intro": [
+ "In these lectures, you will learn about classes in JavaScript. You will learn about inheritance, the this keyword, static properties and methods, and more."
+ ]
+ },
+ "workshop-shopping-cart": {
+ "title": "Build a Shopping Cart",
+ "intro": [
+ "In this workshop you'll create a shopping cart using JavaScript classes.",
+ "You will practice how to use the this keyword, create class instances, implement methods for data manipulation and more."
+ ]
+ },
+ "lab-project-idea-board": {
+ "title": "Build a Project Idea Board",
+ "intro": [
+ "In this lab, you'll build a project idea board using OOP in JavaScript.",
+ "You'll practice how to create classes, add methods to classes, and create instances of classes."
+ ]
+ },
+ "lab-bank-account-manager": {
+ "title": "Build a Bank Account Management Program",
+ "intro": [
+ "In this lab, you'll build a simple transaction management system for a bank account."
+ ]
+ },
+ "review-javascript-classes": {
+ "title": "JavaScript Classes Review",
+ "intro": [
+ "Before you're quizzed on how to work with classes, you should review what you've learned about them.",
+ "Open up this page to review concepts including the this keyword, class inheritance and more."
+ ]
+ },
+ "quiz-javascript-classes": {
+ "title": "JavaScript Classes Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript classes with this quiz."
+ ]
+ }
+ }
+ },
+ "learn-recursion-with-javascript": {
+ "title": "Learn Recursion with JavaScript",
+ "summary": [
+ "Understand the concept of recursion and how to implement it in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you'll learn about recursion in JavaScript and how to use it to solve problems."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-understanding-recursion-and-the-call-stack": {
+ "title": "Understanding Recursion and the Call Stack",
+ "intro": [
+ "In this lecture, you will learn about recursion and the call stack."
+ ]
+ },
+ "workshop-countup": {
+ "title": "Build a Countup",
+ "intro": [
+ "In this workshop you will build a countup function that returns an array of numbers counting up from 1 to a given number."
+ ]
+ },
+ "lab-countdown": {
+ "title": "Build a Countdown",
+ "intro": [
+ "For this lab, you will build a countdown function that returns an array of numbers counting down from given number to 1."
+ ]
+ },
+ "lab-range-of-numbers": {
+ "title": "Build a Range of Numbers Generator",
+ "intro": [
+ "In this lab, you'll use recursion to generate an array of numbers within a specified range.",
+ "You'll practice recursive function calls, base cases, and building arrays through recursion."
+ ]
+ },
+ "workshop-decimal-to-binary-converter": {
+ "title": "Build a Decimal to Binary Converter",
+ "intro": [
+ "Recursion is a programming concept where a function calls itself. This can reduce a complex problem into simpler sub-problems, until they become straightforward to solve.",
+ "In this workshop, you'll build a decimal-to-binary converter using JavaScript. You'll practice the fundamental concepts of recursion, explore the call stack, and build out a visual representation of the recursion process through an animation."
+ ]
+ },
+ "lab-permutation-generator": {
+ "title": "Build a Permutation Generator",
+ "intro": [
+ "For this lab, you'll build a permutation generator that produces all possible permutations of a given string."
+ ]
+ },
+ "review-recursion": {
+ "title": "Recursion Review",
+ "intro": [
+ "Before you're quizzed on recursion, you should review what you've learned.",
+ "Open up this page to review what is recursion and what is it used for."
+ ]
+ },
+ "quiz-recursion": {
+ "title": "Recursion Quiz",
+ "intro": ["Test your knowledge of Recursion with this quiz."]
+ }
+ }
+ },
+ "introduction-to-functional-programming-with-javascript": {
+ "title": "Introduction to Functional Programming with JavaScript",
+ "summary": [
+ "Learn the fundamentals of functional programming in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you will learn about functional programming concepts and techniques in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-understanding-functional-programming": {
+ "title": "Understanding Functional Programming",
+ "intro": [
+ "In these lectures, you will learn about functional programming and how to nest functions using a technique called currying."
+ ]
+ },
+ "workshop-recipe-ingredient-converter": {
+ "title": "Build a Recipe Ingredient Converter",
+ "intro": [
+ "In the previous lectures, you learned the core concepts behind functional programming and currying.",
+ "Now you will be able to apply what you have learned about currying and functional programming by building a recipe ingredient converter application."
+ ]
+ },
+ "lab-optional-arguments-sum-function": {
+ "title": "Build an Optional Arguments Sum Function",
+ "intro": [
+ "In this lab you will build a function that accepts up to two arguments, and sum them, but if there is only one argument returns a function that waits for the second number to sum."
+ ]
+ },
+ "lab-sorting-visualizer": {
+ "title": "Build a Sorting Visualizer",
+ "intro": [
+ "For this lab, you'll use JavaScript to visualize the steps that the Bubble Sort algorithm takes to reorder an array of integers."
+ ]
+ },
+ "review-javascript-functional-programming": {
+ "title": "JavaScript Functional Programming Review",
+ "intro": [
+ "Before you're quizzed on functional programming, you should review what you've learned.",
+ "Open up this page to review concepts on functional programming, currying and more."
+ ]
+ },
+ "quiz-javascript-functional-programming": {
+ "title": "JavaScript Functional Programming Quiz",
+ "intro": [
+ "Test what you've learned about JavaScript functional programming with this quiz."
+ ]
+ }
+ }
+ },
+ "introduction-to-asynchronous-javascript": {
+ "title": "Introduction to Asynchronous JavaScript",
+ "summary": [
+ "Learn the fundamentals of asynchronous programming in JavaScript."
+ ],
+ "intro": [
+ "In this interactive course, you will learn about asynchronous programming concepts and techniques in JavaScript."
+ ],
+ "note": "",
+ "blocks": {
+ "lecture-understanding-asynchronous-programming": {
+ "title": "Understanding Asynchronous Programming",
+ "intro": [
+ "In these lectures, you will learn about asynchronous programming in JavaScript. You will learn about the differences between synchronous and asynchronous programming, how the async keyword works, the Fetch API, promises, async/await, the Geolocation API, and much more."
+ ]
+ },
+ "workshop-fcc-authors-page": {
+ "title": "Build an fCC Authors Page",
+ "intro": [
+ "One common aspect of web development is learning how to fetch data from an external API, then work with asynchronous JavaScript.",
+ "In this workshop you will practice how to use the fetch method, dynamically update the DOM to display the fetched data and paginate your data so you can load results in batches."
+ ]
+ },
+ "lab-fcc-forum-leaderboard": {
+ "title": "Build an fCC Forum Leaderboard",
+ "intro": [
+ "For this lab you'll practice asynchronous JavaScript by coding your own freeCodeCamp forum leaderboard."
+ ]
+ },
+ "lab-weather-app": {
+ "title": "Build a Weather App",
+ "intro": [
+ "In this lab you'll build a Weather App using an API",
+ "You'll practice how to fetch data from the API, store and display it on your app."
+ ]
+ },
+ "review-asynchronous-javascript": {
+ "title": "Asynchronous JavaScript Review",
+ "intro": [
+ "Review asynchronous JavaScript concepts to prepare for the upcoming quiz."
+ ]
+ },
+ "quiz-asynchronous-javascript": {
+ "title": "Asynchronous JavaScript Quiz",
+ "intro": [
+ "Test what you've learned about asynchronous JavaScript with this quiz."
+ ]
+ }
+ }
+ },
"information-security": {
"title": "Information Security",
"intro": [
diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index e446dcb0e7b..7045e2602c7 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -1323,6 +1323,26 @@
"learn-sql-and-bash": "Learn SQL and Bash",
"introduction-to-nano": "Introduction to Nano",
"introduction-to-git-and-github": "Introduction to Git and GitHub",
+ "introduction-to-variables-and-strings-in-javascript": "Introduction to Variables and Strings in JavaScript",
+ "introduction-to-booleans-and-numbers-in-javascript": "Introduction to Booleans and Numbers in JavaScript",
+ "introduction-functions-in-javascript": "Introduction to Functions in JavaScript",
+ "introduction-to-arrays-in-javascript": "Introduction to Arrays in JavaScript",
+ "introduction-to-objects-in-javascript": "Introduction to Objects in JavaScript",
+ "introduction-to-loops-in-javascript": "Introduction to Loops in JavaScript",
+ "javascript-fundamentals-review": "JavaScript Fundamentals Review",
+ "introduction-to-higher-order-functions-and-callbacks-in-javascript": "Introduction to Higher-Order Functions and Callbacks in JavaScript",
+ "learn-dom-manipulation-and-events-with-javascript": "Learn DOM Manipulation and Events with JavaScript",
+ "introduction-to-javascript-and-accessibility": "Introduction to JavaScript and Accessibility",
+ "learn-javascript-debugging": "Learn JavaScript Debugging",
+ "learn-basic-regex-with-javascript": "Learn Basic Regex with JavaScript",
+ "introduction-to-dates-in-javascript": "Introduction to Dates in JavaScript",
+ "learn-audio-and-video-events-with-javascript": "Learn Audio and Video Events with JavaScript",
+ "introduction-to-maps-and-sets-in-javascript": "Introduction to Maps and Sets in JavaScript",
+ "learn-localstorage-and-crud-operations-with-javascript": "Learn localStorage and CRUD Operations with JavaScript",
+ "introduction-to-javascript-classes": "Introduction to JavaScript Classes",
+ "learn-recursion-with-javascript": "Learn Recursion with JavaScript",
+ "introduction-to-functional-programming-with-javascript": "Introduction to Functional Programming with JavaScript",
+ "introduction-to-asynchronous-javascript": "Introduction to Asynchronous JavaScript",
"introduction-to-python-basics": "Introduction to Python Basics",
"learn-python-loops-and-sequences": "Learn Python Loops and Sequences",
"learn-python-dictionaries-and-sets": "Learn Python Dictionaries and Sets",
diff --git a/client/src/assets/superblock-icon.tsx b/client/src/assets/superblock-icon.tsx
index 533cb0f4efe..b938f1fc09e 100644
--- a/client/src/assets/superblock-icon.tsx
+++ b/client/src/assets/superblock-icon.tsx
@@ -99,6 +99,27 @@ const iconMap = {
[SuperBlocks.IntroductionToNano]: Code,
[SuperBlocks.IntroductionToGitAndGithub]: Code,
[SuperBlocks.LearnPromptingFundamentals]: Clipboard,
+ [SuperBlocks.IntroductionToVariablesAndStringsInJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToBooleansAndNumbersInJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToFunctionsInJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToArraysInJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToObjectsInJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToLoopsInJS]: JavaScriptIcon,
+ [SuperBlocks.JavascriptFundamentalsReview]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToHigherOrderFunctionsAndCallbacksInJS]:
+ JavaScriptIcon,
+ [SuperBlocks.LearnDomManipulationAndEventsWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToJavascriptAndAccessibility]: JavaScriptIcon,
+ [SuperBlocks.LearnJavascriptDebugging]: JavaScriptIcon,
+ [SuperBlocks.LearnBasicRegexWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToDatesInJS]: JavaScriptIcon,
+ [SuperBlocks.LearnAudioAndVideoEventsWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToMapsAndSetsInJS]: JavaScriptIcon,
+ [SuperBlocks.LearnLocalstorageAndCrudOperationsWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToJavascriptClasses]: JavaScriptIcon,
+ [SuperBlocks.LearnRecursionWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToFunctionalProgrammingWithJS]: JavaScriptIcon,
+ [SuperBlocks.IntroductionToAsynchronousJS]: JavaScriptIcon,
[SuperBlocks.IntroductionToPythonBasics]: PythonIcon,
[SuperBlocks.LearnPythonLoopsAndSequences]: PythonIcon,
[SuperBlocks.LearnPythonDictionariesAndSets]: PythonIcon,
diff --git a/curriculum/schema/curriculum-schema.js b/curriculum/schema/curriculum-schema.js
index 5a8168c587f..b0796c9f530 100644
--- a/curriculum/schema/curriculum-schema.js
+++ b/curriculum/schema/curriculum-schema.js
@@ -68,6 +68,26 @@ const superblocks = [
'introduction-to-nano',
'introduction-to-git-and-github',
'learn-prompting-fundamentals',
+ 'introduction-to-variables-and-strings-in-javascript',
+ 'introduction-to-booleans-and-numbers-in-javascript',
+ 'introduction-functions-in-javascript',
+ 'introduction-to-arrays-in-javascript',
+ 'introduction-to-objects-in-javascript',
+ 'introduction-to-loops-in-javascript',
+ 'javascript-fundamentals-review',
+ 'introduction-to-higher-order-functions-and-callbacks-in-javascript',
+ 'learn-dom-manipulation-and-events-with-javascript',
+ 'introduction-to-javascript-and-accessibility',
+ 'learn-javascript-debugging',
+ 'learn-basic-regex-with-javascript',
+ 'introduction-to-dates-in-javascript',
+ 'learn-audio-and-video-events-with-javascript',
+ 'introduction-to-maps-and-sets-in-javascript',
+ 'learn-localstorage-and-crud-operations-with-javascript',
+ 'introduction-to-javascript-classes',
+ 'learn-recursion-with-javascript',
+ 'introduction-to-functional-programming-with-javascript',
+ 'introduction-to-asynchronous-javascript',
'introduction-to-python-basics',
'learn-python-loops-and-sequences',
'learn-python-dictionaries-and-sets',
diff --git a/curriculum/src/build-curriculum.ts b/curriculum/src/build-curriculum.ts
index 4743b00473a..062e80bbf25 100644
--- a/curriculum/src/build-curriculum.ts
+++ b/curriculum/src/build-curriculum.ts
@@ -241,6 +241,39 @@ export const superBlockNames = {
'introduction-to-nano': SuperBlocks.IntroductionToNano,
'introduction-to-git-and-github': SuperBlocks.IntroductionToGitAndGithub,
'learn-prompting-fundamentals': SuperBlocks.LearnPromptingFundamentals,
+ 'introduction-to-variables-and-strings-in-javascript':
+ SuperBlocks.IntroductionToVariablesAndStringsInJS,
+ 'introduction-to-booleans-and-numbers-in-javascript':
+ SuperBlocks.IntroductionToBooleansAndNumbersInJS,
+ 'introduction-functions-in-javascript':
+ SuperBlocks.IntroductionToFunctionsInJS,
+ 'introduction-to-arrays-in-javascript': SuperBlocks.IntroductionToArraysInJS,
+ 'introduction-to-objects-in-javascript':
+ SuperBlocks.IntroductionToObjectsInJS,
+ 'introduction-to-loops-in-javascript': SuperBlocks.IntroductionToLoopsInJS,
+ 'javascript-fundamentals-review': SuperBlocks.JavascriptFundamentalsReview,
+ 'introduction-to-higher-order-functions-and-callbacks-in-javascript':
+ SuperBlocks.IntroductionToHigherOrderFunctionsAndCallbacksInJS,
+ 'learn-dom-manipulation-and-events-with-javascript':
+ SuperBlocks.LearnDomManipulationAndEventsWithJS,
+ 'introduction-to-javascript-and-accessibility':
+ SuperBlocks.IntroductionToJavascriptAndAccessibility,
+ 'learn-javascript-debugging': SuperBlocks.LearnJavascriptDebugging,
+ 'learn-basic-regex-with-javascript': SuperBlocks.LearnBasicRegexWithJS,
+ 'introduction-to-dates-in-javascript': SuperBlocks.IntroductionToDatesInJS,
+ 'learn-audio-and-video-events-with-javascript':
+ SuperBlocks.LearnAudioAndVideoEventsWithJS,
+ 'introduction-to-maps-and-sets-in-javascript':
+ SuperBlocks.IntroductionToMapsAndSetsInJS,
+ 'learn-localstorage-and-crud-operations-with-javascript':
+ SuperBlocks.LearnLocalstorageAndCrudOperationsWithJS,
+ 'introduction-to-javascript-classes':
+ SuperBlocks.IntroductionToJavascriptClasses,
+ 'learn-recursion-with-javascript': SuperBlocks.LearnRecursionWithJS,
+ 'introduction-to-functional-programming-with-javascript':
+ SuperBlocks.IntroductionToFunctionalProgrammingWithJS,
+ 'introduction-to-asynchronous-javascript':
+ SuperBlocks.IntroductionToAsynchronousJS,
'introduction-to-python-basics': SuperBlocks.IntroductionToPythonBasics,
'learn-python-loops-and-sequences': SuperBlocks.LearnPythonLoopsAndSequences,
'learn-python-dictionaries-and-sets':
diff --git a/curriculum/structure/curriculum.json b/curriculum/structure/curriculum.json
index c0ae6a821b2..a2dc76639d0 100644
--- a/curriculum/structure/curriculum.json
+++ b/curriculum/structure/curriculum.json
@@ -73,6 +73,26 @@
"introduction-to-nano",
"introduction-to-git-and-github",
"learn-prompting-fundamentals",
+ "introduction-to-variables-and-strings-in-javascript",
+ "introduction-to-booleans-and-numbers-in-javascript",
+ "introduction-functions-in-javascript",
+ "introduction-to-arrays-in-javascript",
+ "introduction-to-objects-in-javascript",
+ "introduction-to-loops-in-javascript",
+ "javascript-fundamentals-review",
+ "introduction-to-higher-order-functions-and-callbacks-in-javascript",
+ "learn-dom-manipulation-and-events-with-javascript",
+ "introduction-to-javascript-and-accessibility",
+ "learn-javascript-debugging",
+ "learn-basic-regex-with-javascript",
+ "introduction-to-dates-in-javascript",
+ "learn-audio-and-video-events-with-javascript",
+ "introduction-to-maps-and-sets-in-javascript",
+ "learn-localstorage-and-crud-operations-with-javascript",
+ "introduction-to-javascript-classes",
+ "learn-recursion-with-javascript",
+ "introduction-to-functional-programming-with-javascript",
+ "introduction-to-asynchronous-javascript",
"introduction-to-python-basics",
"learn-python-loops-and-sequences",
"learn-python-dictionaries-and-sets",
diff --git a/curriculum/structure/superblocks/introduction-functions-in-javascript.json b/curriculum/structure/superblocks/introduction-functions-in-javascript.json
new file mode 100644
index 00000000000..b480ec27ada
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-functions-in-javascript.json
@@ -0,0 +1,16 @@
+{
+ "blocks": [
+ "lecture-working-with-functions",
+ "workshop-calculator",
+ "lab-boolean-check",
+ "lab-email-masker",
+ "workshop-loan-qualification-checker",
+ "lab-celsius-to-fahrenheit-converter",
+ "lab-counting-cards",
+ "lab-leap-year-calculator",
+ "lab-truncate-string",
+ "lab-string-ending-checker",
+ "review-javascript-functions",
+ "quiz-javascript-functions"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-arrays-in-javascript.json b/curriculum/structure/superblocks/introduction-to-arrays-in-javascript.json
new file mode 100644
index 00000000000..cf91194419c
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-arrays-in-javascript.json
@@ -0,0 +1,11 @@
+{
+ "blocks": [
+ "lecture-working-with-arrays",
+ "workshop-shopping-list",
+ "lab-lunch-picker-program",
+ "lab-golf-score-translator",
+ "lecture-working-with-common-array-methods",
+ "review-javascript-arrays",
+ "quiz-javascript-arrays"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-asynchronous-javascript.json b/curriculum/structure/superblocks/introduction-to-asynchronous-javascript.json
new file mode 100644
index 00000000000..a83e54c52d8
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-asynchronous-javascript.json
@@ -0,0 +1,10 @@
+{
+ "blocks": [
+ "lecture-understanding-asynchronous-programming",
+ "workshop-fcc-authors-page",
+ "lab-fcc-forum-leaderboard",
+ "lab-weather-app",
+ "review-asynchronous-javascript",
+ "quiz-asynchronous-javascript"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-booleans-and-numbers-in-javascript.json b/curriculum/structure/superblocks/introduction-to-booleans-and-numbers-in-javascript.json
new file mode 100644
index 00000000000..df643a2324f
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-booleans-and-numbers-in-javascript.json
@@ -0,0 +1,20 @@
+{
+ "blocks": [
+ "lecture-working-with-numbers-and-arithmetic-operators",
+ "lab-debug-type-coercion-errors",
+ "lecture-working-with-operator-behavior",
+ "lab-debug-increment-and-decrement-operator-errors",
+ "lecture-working-with-comparison-and-boolean-operators",
+ "workshop-logic-checker-app",
+ "lecture-working-with-unary-and-bitwise-operators",
+ "lecture-working-with-conditional-logic-and-math-methods",
+ "workshop-mathbot",
+ "lab-fortune-teller",
+ "lecture-working-with-numbers-and-common-number-methods",
+ "review-javascript-math",
+ "quiz-javascript-math",
+ "lecture-understanding-comparisons-and-conditionals",
+ "review-javascript-comparisons-and-conditionals",
+ "quiz-javascript-comparisons-and-conditionals"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-dates-in-javascript.json b/curriculum/structure/superblocks/introduction-to-dates-in-javascript.json
new file mode 100644
index 00000000000..1477968fbf2
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-dates-in-javascript.json
@@ -0,0 +1,8 @@
+{
+ "blocks": [
+ "lecture-working-with-dates",
+ "lab-date-conversion",
+ "review-javascript-dates",
+ "quiz-javascript-dates"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-functional-programming-with-javascript.json b/curriculum/structure/superblocks/introduction-to-functional-programming-with-javascript.json
new file mode 100644
index 00000000000..12955c319fb
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-functional-programming-with-javascript.json
@@ -0,0 +1,10 @@
+{
+ "blocks": [
+ "lecture-understanding-functional-programming",
+ "workshop-recipe-ingredient-converter",
+ "lab-optional-arguments-sum-function",
+ "lab-sorting-visualizer",
+ "review-javascript-functional-programming",
+ "quiz-javascript-functional-programming"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-higher-order-functions-and-callbacks-in-javascript.json b/curriculum/structure/superblocks/introduction-to-higher-order-functions-and-callbacks-in-javascript.json
new file mode 100644
index 00000000000..25c2688cc56
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-higher-order-functions-and-callbacks-in-javascript.json
@@ -0,0 +1,17 @@
+{
+ "blocks": [
+ "lecture-working-with-higher-order-functions-and-callbacks",
+ "workshop-library-manager",
+ "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"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-javascript-and-accessibility.json b/curriculum/structure/superblocks/introduction-to-javascript-and-accessibility.json
new file mode 100644
index 00000000000..6a79e0836dd
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-javascript-and-accessibility.json
@@ -0,0 +1,10 @@
+{
+ "blocks": [
+ "lecture-understanding-aria-expanded-aria-live-and-common-aria-states",
+ "workshop-planets-tablist",
+ "workshop-note-taking-app",
+ "lab-theme-switcher",
+ "review-js-a11y",
+ "quiz-js-a11y"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-javascript-classes.json b/curriculum/structure/superblocks/introduction-to-javascript-classes.json
new file mode 100644
index 00000000000..aac4c025d91
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-javascript-classes.json
@@ -0,0 +1,10 @@
+{
+ "blocks": [
+ "lecture-understanding-how-to-work-with-classes-in-javascript",
+ "workshop-shopping-cart",
+ "lab-project-idea-board",
+ "lab-bank-account-manager",
+ "review-javascript-classes",
+ "quiz-javascript-classes"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-loops-in-javascript.json b/curriculum/structure/superblocks/introduction-to-loops-in-javascript.json
new file mode 100644
index 00000000000..2a19645f015
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-loops-in-javascript.json
@@ -0,0 +1,15 @@
+{
+ "blocks": [
+ "lecture-working-with-loops",
+ "workshop-sentence-analyzer",
+ "lab-longest-word-in-a-string",
+ "lab-factorial-calculator",
+ "lab-mutations",
+ "lab-chunky-monkey",
+ "lab-profile-lookup",
+ "lab-repeat-a-string",
+ "lab-missing-letter-detector",
+ "review-javascript-loops",
+ "quiz-javascript-loops"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-maps-and-sets-in-javascript.json b/curriculum/structure/superblocks/introduction-to-maps-and-sets-in-javascript.json
new file mode 100644
index 00000000000..9d292960a65
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-maps-and-sets-in-javascript.json
@@ -0,0 +1,9 @@
+{
+ "blocks": [
+ "lecture-working-with-maps-and-sets",
+ "workshop-plant-nursery-catalog",
+ "lab-voting-system",
+ "review-javascript-maps-and-sets",
+ "quiz-javascript-maps-and-sets"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-objects-in-javascript.json b/curriculum/structure/superblocks/introduction-to-objects-in-javascript.json
new file mode 100644
index 00000000000..43f4a68dde1
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-objects-in-javascript.json
@@ -0,0 +1,12 @@
+{
+ "blocks": [
+ "lecture-introduction-to-javascript-objects-and-their-properties",
+ "lecture-working-with-json",
+ "lecture-working-with-optional-chaining-and-object-destructuring",
+ "workshop-recipe-tracker",
+ "lab-quiz-game",
+ "lab-record-collection",
+ "review-javascript-objects",
+ "quiz-javascript-objects"
+ ]
+}
diff --git a/curriculum/structure/superblocks/introduction-to-variables-and-strings-in-javascript.json b/curriculum/structure/superblocks/introduction-to-variables-and-strings-in-javascript.json
new file mode 100644
index 00000000000..815d3bd80a9
--- /dev/null
+++ b/curriculum/structure/superblocks/introduction-to-variables-and-strings-in-javascript.json
@@ -0,0 +1,24 @@
+{
+ "blocks": [
+ "lecture-introduction-to-javascript",
+ "lecture-introduction-to-strings",
+ "lecture-understanding-code-clarity",
+ "workshop-greeting-bot",
+ "lab-javascript-trivia-bot",
+ "lab-sentence-maker",
+ "lecture-working-with-data-types",
+ "review-javascript-variables-and-data-types",
+ "quiz-javascript-variables-and-data-types",
+ "lecture-working-with-strings-in-javascript",
+ "workshop-teacher-chatbot",
+ "lecture-working-with-string-character-methods",
+ "lecture-working-with-string-search-and-slice-methods",
+ "workshop-string-inspector",
+ "lecture-working-with-string-formatting-methods",
+ "workshop-string-formatter",
+ "lecture-working-with-string-modification-methods",
+ "workshop-string-transformer",
+ "review-javascript-strings",
+ "quiz-javascript-strings"
+ ]
+}
diff --git a/curriculum/structure/superblocks/javascript-fundamentals-review.json b/curriculum/structure/superblocks/javascript-fundamentals-review.json
new file mode 100644
index 00000000000..d4a726a3b3c
--- /dev/null
+++ b/curriculum/structure/superblocks/javascript-fundamentals-review.json
@@ -0,0 +1,28 @@
+{
+ "blocks": [
+ "lecture-working-with-types-and-objects",
+ "lecture-working-with-arrays-variables-and-naming-practices",
+ "lecture-working-with-code-quality-and-execution-concepts",
+ "lab-reverse-a-string",
+ "lab-largest-number-finder",
+ "lab-first-element-finder",
+ "lab-slice-and-splice",
+ "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",
+ "review-javascript-fundamentals",
+ "quiz-javascript-fundamentals"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-audio-and-video-events-with-javascript.json b/curriculum/structure/superblocks/learn-audio-and-video-events-with-javascript.json
new file mode 100644
index 00000000000..be1e1490ca4
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-audio-and-video-events-with-javascript.json
@@ -0,0 +1,9 @@
+{
+ "blocks": [
+ "lecture-working-with-audio-and-video",
+ "workshop-music-player",
+ "lab-drum-machine",
+ "review-javascript-audio-and-video",
+ "quiz-javascript-audio-and-video"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-basic-regex-with-javascript.json b/curriculum/structure/superblocks/learn-basic-regex-with-javascript.json
new file mode 100644
index 00000000000..57eca3e959b
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-basic-regex-with-javascript.json
@@ -0,0 +1,14 @@
+{
+ "blocks": [
+ "lecture-working-with-regular-expressions",
+ "workshop-spam-filter",
+ "lab-palindrome-checker",
+ "lab-regex-sandbox",
+ "lab-spinal-case-converter",
+ "lab-pig-latin",
+ "lab-smart-word-replacement",
+ "lab-markdown-to-html-converter",
+ "review-javascript-regular-expressions",
+ "quiz-javascript-regular-expressions"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-dom-manipulation-and-events-with-javascript.json b/curriculum/structure/superblocks/learn-dom-manipulation-and-events-with-javascript.json
new file mode 100644
index 00000000000..6b3af723012
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-dom-manipulation-and-events-with-javascript.json
@@ -0,0 +1,16 @@
+{
+ "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",
+ "lab-real-time-counter",
+ "lab-lightbox-viewer",
+ "workshop-rps-game",
+ "lab-football-team-cards",
+ "review-dom-manipulation-and-click-events-with-javascript",
+ "quiz-dom-manipulation-and-click-event-with-javascript"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-javascript-debugging.json b/curriculum/structure/superblocks/learn-javascript-debugging.json
new file mode 100644
index 00000000000..955f5d76d37
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-javascript-debugging.json
@@ -0,0 +1,8 @@
+{
+ "blocks": [
+ "lecture-debugging-techniques",
+ "lab-random-background-color-changer",
+ "review-debugging-javascript",
+ "quiz-debugging-javascript"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-localstorage-and-crud-operations-with-javascript.json b/curriculum/structure/superblocks/learn-localstorage-and-crud-operations-with-javascript.json
new file mode 100644
index 00000000000..a92ec97bbd4
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-localstorage-and-crud-operations-with-javascript.json
@@ -0,0 +1,9 @@
+{
+ "blocks": [
+ "lecture-working-with-client-side-storage-and-crud-operations",
+ "workshop-todo-app",
+ "lab-bookmark-manager-app",
+ "review-local-storage-and-crud",
+ "quiz-local-storage-and-crud"
+ ]
+}
diff --git a/curriculum/structure/superblocks/learn-recursion-with-javascript.json b/curriculum/structure/superblocks/learn-recursion-with-javascript.json
new file mode 100644
index 00000000000..81a9ecfb9d1
--- /dev/null
+++ b/curriculum/structure/superblocks/learn-recursion-with-javascript.json
@@ -0,0 +1,12 @@
+{
+ "blocks": [
+ "lecture-understanding-recursion-and-the-call-stack",
+ "workshop-countup",
+ "lab-countdown",
+ "lab-range-of-numbers",
+ "workshop-decimal-to-binary-converter",
+ "lab-permutation-generator",
+ "review-recursion",
+ "quiz-recursion"
+ ]
+}
diff --git a/packages/shared/src/config/catalog.ts b/packages/shared/src/config/catalog.ts
index e1ad9aa99dd..ecbce8de53e 100644
--- a/packages/shared/src/config/catalog.ts
+++ b/packages/shared/src/config/catalog.ts
@@ -257,6 +257,126 @@ export const catalog: Catalog[] = [
hours: 1,
topic: Topic.AI
},
+ {
+ superBlock: SuperBlocks.IntroductionToVariablesAndStringsInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToBooleansAndNumbersInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToFunctionsInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToArraysInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToObjectsInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToLoopsInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.JavascriptFundamentalsReview,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToHigherOrderFunctionsAndCallbacksInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnDomManipulationAndEventsWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToJavascriptAndAccessibility,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnJavascriptDebugging,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnBasicRegexWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToDatesInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnAudioAndVideoEventsWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToMapsAndSetsInJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnLocalstorageAndCrudOperationsWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToJavascriptClasses,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.LearnRecursionWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToFunctionalProgrammingWithJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
+ {
+ superBlock: SuperBlocks.IntroductionToAsynchronousJS,
+ level: Levels.Intermediate,
+ hours: 40,
+ topic: Topic.Js
+ },
{
superBlock: SuperBlocks.LearnOOPWithPython,
level: Levels.Intermediate,
diff --git a/packages/shared/src/config/certification-settings.ts b/packages/shared/src/config/certification-settings.ts
index 761925c8c5c..6204f8bded6 100644
--- a/packages/shared/src/config/certification-settings.ts
+++ b/packages/shared/src/config/certification-settings.ts
@@ -378,6 +378,26 @@ export const superBlockToCertMap: {
[SuperBlocks.IntroductionToNano]: null,
[SuperBlocks.IntroductionToGitAndGithub]: null,
[SuperBlocks.LearnPromptingFundamentals]: null,
+ [SuperBlocks.IntroductionToVariablesAndStringsInJS]: null,
+ [SuperBlocks.IntroductionToBooleansAndNumbersInJS]: null,
+ [SuperBlocks.IntroductionToFunctionsInJS]: null,
+ [SuperBlocks.IntroductionToArraysInJS]: null,
+ [SuperBlocks.IntroductionToObjectsInJS]: null,
+ [SuperBlocks.IntroductionToLoopsInJS]: null,
+ [SuperBlocks.JavascriptFundamentalsReview]: null,
+ [SuperBlocks.IntroductionToHigherOrderFunctionsAndCallbacksInJS]: null,
+ [SuperBlocks.LearnDomManipulationAndEventsWithJS]: null,
+ [SuperBlocks.IntroductionToJavascriptAndAccessibility]: null,
+ [SuperBlocks.LearnJavascriptDebugging]: null,
+ [SuperBlocks.LearnBasicRegexWithJS]: null,
+ [SuperBlocks.IntroductionToDatesInJS]: null,
+ [SuperBlocks.LearnAudioAndVideoEventsWithJS]: null,
+ [SuperBlocks.IntroductionToMapsAndSetsInJS]: null,
+ [SuperBlocks.LearnLocalstorageAndCrudOperationsWithJS]: null,
+ [SuperBlocks.IntroductionToJavascriptClasses]: null,
+ [SuperBlocks.LearnRecursionWithJS]: null,
+ [SuperBlocks.IntroductionToFunctionalProgrammingWithJS]: null,
+ [SuperBlocks.IntroductionToAsynchronousJS]: null,
[SuperBlocks.IntroductionToPythonBasics]: null,
[SuperBlocks.LearnPythonLoopsAndSequences]: null,
[SuperBlocks.LearnPythonDictionariesAndSets]: null,
diff --git a/packages/shared/src/config/curriculum.ts b/packages/shared/src/config/curriculum.ts
index 34e1fc2fa30..f91f688f376 100644
--- a/packages/shared/src/config/curriculum.ts
+++ b/packages/shared/src/config/curriculum.ts
@@ -77,6 +77,26 @@ export enum SuperBlocks {
IntroductionToNano = 'introduction-to-nano',
IntroductionToGitAndGithub = 'introduction-to-git-and-github',
LearnPromptingFundamentals = 'learn-prompting-fundamentals',
+ IntroductionToVariablesAndStringsInJS = 'introduction-to-variables-and-strings-in-javascript',
+ IntroductionToBooleansAndNumbersInJS = 'introduction-to-booleans-and-numbers-in-javascript',
+ IntroductionToFunctionsInJS = 'introduction-functions-in-javascript',
+ IntroductionToArraysInJS = 'introduction-to-arrays-in-javascript',
+ IntroductionToObjectsInJS = 'introduction-to-objects-in-javascript',
+ IntroductionToLoopsInJS = 'introduction-to-loops-in-javascript',
+ JavascriptFundamentalsReview = 'javascript-fundamentals-review',
+ IntroductionToHigherOrderFunctionsAndCallbacksInJS = 'introduction-to-higher-order-functions-and-callbacks-in-javascript',
+ LearnDomManipulationAndEventsWithJS = 'learn-dom-manipulation-and-events-with-javascript',
+ IntroductionToJavascriptAndAccessibility = 'introduction-to-javascript-and-accessibility',
+ LearnJavascriptDebugging = 'learn-javascript-debugging',
+ LearnBasicRegexWithJS = 'learn-basic-regex-with-javascript',
+ IntroductionToDatesInJS = 'introduction-to-dates-in-javascript',
+ LearnAudioAndVideoEventsWithJS = 'learn-audio-and-video-events-with-javascript',
+ IntroductionToMapsAndSetsInJS = 'introduction-to-maps-and-sets-in-javascript',
+ LearnLocalstorageAndCrudOperationsWithJS = 'learn-localstorage-and-crud-operations-with-javascript',
+ IntroductionToJavascriptClasses = 'introduction-to-javascript-classes',
+ LearnRecursionWithJS = 'learn-recursion-with-javascript',
+ IntroductionToFunctionalProgrammingWithJS = 'introduction-to-functional-programming-with-javascript',
+ IntroductionToAsynchronousJS = 'introduction-to-asynchronous-javascript',
IntroductionToPythonBasics = 'introduction-to-python-basics',
LearnPythonLoopsAndSequences = 'learn-python-loops-and-sequences',
LearnPythonDictionariesAndSets = 'learn-python-dictionaries-and-sets',
@@ -249,6 +269,26 @@ export const superBlockStages: StageMap = {
SuperBlocks.IntroductionToNano,
SuperBlocks.IntroductionToGitAndGithub,
SuperBlocks.LearnPromptingFundamentals,
+ SuperBlocks.IntroductionToVariablesAndStringsInJS,
+ SuperBlocks.IntroductionToBooleansAndNumbersInJS,
+ SuperBlocks.IntroductionToFunctionsInJS,
+ SuperBlocks.IntroductionToArraysInJS,
+ SuperBlocks.IntroductionToObjectsInJS,
+ SuperBlocks.IntroductionToLoopsInJS,
+ SuperBlocks.JavascriptFundamentalsReview,
+ SuperBlocks.IntroductionToHigherOrderFunctionsAndCallbacksInJS,
+ SuperBlocks.LearnDomManipulationAndEventsWithJS,
+ SuperBlocks.IntroductionToJavascriptAndAccessibility,
+ SuperBlocks.LearnJavascriptDebugging,
+ SuperBlocks.LearnBasicRegexWithJS,
+ SuperBlocks.IntroductionToDatesInJS,
+ SuperBlocks.LearnAudioAndVideoEventsWithJS,
+ SuperBlocks.IntroductionToMapsAndSetsInJS,
+ SuperBlocks.LearnLocalstorageAndCrudOperationsWithJS,
+ SuperBlocks.IntroductionToJavascriptClasses,
+ SuperBlocks.LearnRecursionWithJS,
+ SuperBlocks.IntroductionToFunctionalProgrammingWithJS,
+ SuperBlocks.IntroductionToAsynchronousJS,
SuperBlocks.IntroductionToPythonBasics,
SuperBlocks.LearnPythonLoopsAndSequences,
SuperBlocks.LearnPythonDictionariesAndSets,