diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index d6ab838c1d6..efa247e0ec2 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -587,6 +587,48 @@ } } }, + "learn-data-visualization-with-d3": { + "title": "Learn Data Visualization with D3", + "summary": [ + "Learn how to use D3 to turn data into interactive bar charts and scatterplots." + ], + "intro": [ + "In this course, you'll learn core data visualization concepts and practice using the D3 library to build charts from datasets." + ], + "note": "", + "chapters": { + "learn-data-visualization-with-d3": "Learn Data Visualization with D3" + }, + "modules": { + "introduction-to-d3": "Introduction to D3" + }, + "module-intros": { + "introduction-to-d3": { + "note": "Coming Late 2026", + "intro": [ + "In this module, you will learn the basics of working with D3." + ] + } + }, + "blocks": { + "lecture-introduction-to-data-visualization": { + "title": "Introduction to Data Visualization", + "intro": [ + "In these lessons, you will learn about basic data visualization concepts." + ] + }, + "lab-bar-chart": { + "title": "Build a Bar Chart", + "intro": ["In this lab, you will use D3 to build a bar chart."] + }, + "lab-scatterplot-graph": { + "title": "Build a Scatterplot Graph", + "intro": [ + "In this lab, you will create a D3 scatterplot graph using a provided dataset." + ] + } + } + }, "relational-database": { "title": "Relational Database V8", "intro": [ @@ -5925,7 +5967,6 @@ "typescript-fundamentals": "TypeScript Fundamentals", "lab-flashcard-quiz-app": "Build a Flashcard Quiz App", "lab-digital-pet-game": "Build a Digital Pet Game", - "data-visualization": "Data Visualization and D3", "review-front-end-libraries": "Front-End Libraries Review", "front-end-development-libraries-certification-exam": "Front-End Development Libraries Certification Exam" }, @@ -5935,12 +5976,6 @@ "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." ] }, - "data-visualization": { - "note": "Coming 2026", - "intro": [ - "In this module, you will be introduced to data visualization and learn how to work with the D3 library." - ] - }, "front-end-development-libraries-certification-exam": { "note": "Coming 2026", "intro": [ @@ -6298,22 +6333,6 @@ "title": "TypeScript Quiz", "intro": ["Test what you've learned on TypeScript with this quiz."] }, - "lecture-introduction-to-data-visualization": { - "title": "Introduction to Data Visualization", - "intro": [ - "In these lessons, you will learn about basic data visualization concepts." - ] - }, - "lab-bar-chart": { - "title": "Build a Bar Chart", - "intro": ["In this lab you will use d3 to build a bar chart."] - }, - "lab-scatterplot-graph": { - "title": "Build a Scatterplot Graph", - "intro": [ - "In this lab you will create a d3 scatterplot graph using a provided dataset." - ] - }, "review-front-end-libraries": { "title": "Front-End Libraries Review", "intro": [ diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json index 43e44329512..b340d8d77e4 100644 --- a/client/i18n/locales/english/translations.json +++ b/client/i18n/locales/english/translations.json @@ -1406,6 +1406,7 @@ "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", + "learn-data-visualization-with-d3": "Learn Data Visualization with D3", "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 35b7b8c2a20..8b186fe5607 100644 --- a/client/src/assets/superblock-icon.tsx +++ b/client/src/assets/superblock-icon.tsx @@ -114,6 +114,7 @@ const iconMap = { [SuperBlocks.LearnRecursionWithJS]: JavaScriptIcon, [SuperBlocks.IntroductionToFunctionalProgrammingWithJS]: JavaScriptIcon, [SuperBlocks.IntroductionToAsynchronousJS]: JavaScriptIcon, + [SuperBlocks.LearnDataVisualizationWithD3]: D3Icon, [SuperBlocks.IntroductionToPythonBasics]: PythonIcon, [SuperBlocks.LearnPythonLoopsAndSequences]: PythonIcon, [SuperBlocks.LearnPythonDictionariesAndSets]: PythonIcon, diff --git a/curriculum/schema/__snapshots__/challenge-schema.test.mjs.snap b/curriculum/schema/__snapshots__/challenge-schema.test.mjs.snap index afcc3520eef..03f78c5069d 100644 --- a/curriculum/schema/__snapshots__/challenge-schema.test.mjs.snap +++ b/curriculum/schema/__snapshots__/challenge-schema.test.mjs.snap @@ -141,6 +141,7 @@ exports[`challenge schema > should not be changed without informing the mobile t "relational-databases-v9", "back-end-development-and-apis-v9", "full-stack-developer-v9", + "learn-data-visualization-with-d3", "a1-professional-chinese", ], "flags": { @@ -318,6 +319,7 @@ exports[`challenge schema > should not be changed without informing the mobile t "relational-databases-v9", "back-end-development-and-apis-v9", "full-stack-developer-v9", + "learn-data-visualization-with-d3", "a1-professional-chinese", ], "flags": { @@ -749,6 +751,7 @@ exports[`challenge schema > should not be changed without informing the mobile t "relational-databases-v9", "back-end-development-and-apis-v9", "full-stack-developer-v9", + "learn-data-visualization-with-d3", "a1-professional-chinese", ], "flags": { diff --git a/curriculum/schema/curriculum-schema.js b/curriculum/schema/curriculum-schema.js index f113dba5152..98d92608c04 100644 --- a/curriculum/schema/curriculum-schema.js +++ b/curriculum/schema/curriculum-schema.js @@ -82,6 +82,7 @@ const superblocks = [ 'learn-recursion-with-javascript', 'introduction-to-functional-programming-with-javascript', 'introduction-to-asynchronous-javascript', + 'learn-data-visualization-with-d3', '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 32513f2ca74..4fff6b56e6a 100644 --- a/curriculum/src/build-curriculum.ts +++ b/curriculum/src/build-curriculum.ts @@ -268,6 +268,7 @@ export const superBlockNames = { SuperBlocks.IntroductionToFunctionalProgrammingWithJS, 'introduction-to-asynchronous-javascript': SuperBlocks.IntroductionToAsynchronousJS, + 'learn-data-visualization-with-d3': SuperBlocks.LearnDataVisualizationWithD3, '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 df5951dcac9..9cf30db25f3 100644 --- a/curriculum/structure/curriculum.json +++ b/curriculum/structure/curriculum.json @@ -87,6 +87,7 @@ "learn-recursion-with-javascript", "introduction-to-functional-programming-with-javascript", "introduction-to-asynchronous-javascript", + "learn-data-visualization-with-d3", "introduction-to-python-basics", "learn-python-loops-and-sequences", "learn-python-dictionaries-and-sets", diff --git a/curriculum/structure/superblocks/front-end-development-libraries-v9.json b/curriculum/structure/superblocks/front-end-development-libraries-v9.json index 157fbdf3139..a069d26a626 100644 --- a/curriculum/structure/superblocks/front-end-development-libraries-v9.json +++ b/curriculum/structure/superblocks/front-end-development-libraries-v9.json @@ -110,15 +110,6 @@ "dashedName": "lab-digital-pet-game", "blocks": ["lab-digital-pet-game"] }, - { - "dashedName": "data-visualization", - "comingSoon": true, - "blocks": [ - "lecture-introduction-to-data-visualization", - "lab-bar-chart", - "lab-scatterplot-graph" - ] - }, { "moduleType": "review", "comingSoon": true, diff --git a/curriculum/structure/superblocks/learn-data-visualization-with-d3.json b/curriculum/structure/superblocks/learn-data-visualization-with-d3.json new file mode 100644 index 00000000000..313180fa6b9 --- /dev/null +++ b/curriculum/structure/superblocks/learn-data-visualization-with-d3.json @@ -0,0 +1,19 @@ +{ + "chapters": [ + { + "dashedName": "learn-data-visualization-with-d3", + "comingSoon": true, + "modules": [ + { + "dashedName": "introduction-to-d3", + "comingSoon": true, + "blocks": [ + "lecture-introduction-to-data-visualization", + "lab-bar-chart", + "lab-scatterplot-graph" + ] + } + ] + } + ] +} diff --git a/packages/shared/src/config/catalog.ts b/packages/shared/src/config/catalog.ts index 52f12e222ed..c86571d7553 100644 --- a/packages/shared/src/config/catalog.ts +++ b/packages/shared/src/config/catalog.ts @@ -359,6 +359,12 @@ export const catalog: Catalog[] = [ hours: 40, topic: Topic.Js }, + { + superBlock: SuperBlocks.LearnDataVisualizationWithD3, + level: Levels.Intermediate, + hours: 20, + topic: Topic.D3 + }, { 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 340312984be..540e7539ed7 100644 --- a/packages/shared/src/config/certification-settings.ts +++ b/packages/shared/src/config/certification-settings.ts @@ -392,6 +392,7 @@ export const superBlockToCertMap: { [SuperBlocks.LearnRecursionWithJS]: null, [SuperBlocks.IntroductionToFunctionalProgrammingWithJS]: null, [SuperBlocks.IntroductionToAsynchronousJS]: null, + [SuperBlocks.LearnDataVisualizationWithD3]: 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 5c52e1b4aa5..f42b0d2225b 100644 --- a/packages/shared/src/config/curriculum.ts +++ b/packages/shared/src/config/curriculum.ts @@ -91,6 +91,7 @@ export enum SuperBlocks { LearnRecursionWithJS = 'learn-recursion-with-javascript', IntroductionToFunctionalProgrammingWithJS = 'introduction-to-functional-programming-with-javascript', IntroductionToAsynchronousJS = 'introduction-to-asynchronous-javascript', + LearnDataVisualizationWithD3 = 'learn-data-visualization-with-d3', IntroductionToPythonBasics = 'introduction-to-python-basics', LearnPythonLoopsAndSequences = 'learn-python-loops-and-sequences', LearnPythonDictionariesAndSets = 'learn-python-dictionaries-and-sets', @@ -278,6 +279,7 @@ export const superBlockStages: StageMap = { SuperBlocks.LearnRecursionWithJS, SuperBlocks.IntroductionToFunctionalProgrammingWithJS, SuperBlocks.IntroductionToAsynchronousJS, + SuperBlocks.LearnDataVisualizationWithD3, SuperBlocks.IntroductionToPythonBasics, SuperBlocks.LearnPythonLoopsAndSequences, SuperBlocks.LearnPythonDictionariesAndSets, @@ -327,6 +329,7 @@ export const chapterBasedSuperBlocks = [ SuperBlocks.RelationalDbV9, SuperBlocks.BackEndDevApisV9, SuperBlocks.FullStackDeveloperV9, + SuperBlocks.LearnDataVisualizationWithD3, SuperBlocks.A1Chinese ]; Object.freeze(chapterBasedSuperBlocks);