diff --git a/client/config/cert-and-project-map.ts b/client/config/cert-and-project-map.ts index 7d88aa2c328..19a3d11ab53 100644 --- a/client/config/cert-and-project-map.ts +++ b/client/config/cert-and-project-map.ts @@ -33,7 +33,7 @@ const takeHomeBase = '/learn/coding-interview-prep/take-home-projects'; const foundationalCSharpBase = '/learn/foundational-c-sharp-with-microsoft/foundational-c-sharp-with-microsoft-certification-exam'; const upcomingPythonBase = '/learn/upcoming-python'; -const exampleCertBase = '/learn/example-certification'; +const frontEndDevelopmentBase = '/learn/front-end-development'; const a2EnglishBase = '/learn/a2-english-for-developers'; const b1EnglishBase = '/learn/b1-english-for-developers'; const legacyFrontEndBase = feLibsBase; @@ -800,14 +800,14 @@ const allStandardCerts = [ // Upcoming Certifications { id: '64514fda6c245de4d11eb7bb', - title: 'Example Certification', - certSlug: 'example-certification-v8', + title: 'Front End Development', + certSlug: Certification.FrontEndDevelopment, projects: [ { id: '645147516c245de4d11eb7ba', - title: 'Certification Exam', - link: `${exampleCertBase}/example-certification-exam`, - certSlug: 'example-certification-v8' + title: 'Front End Development Certification Exam', + link: `${frontEndDevelopmentBase}/front-end-development-certification-exam/front-end-development-certification-exam`, + certSlug: Certification.FrontEndDevelopment } ] }, diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index d513dfe8e2e..6ceae616cc8 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -1688,13 +1688,17 @@ } } }, - "example-certification": { - "title": "Example Certification", + "front-end-development": { + "title": "Front End Development", "intro": ["placeholder"], "blocks": { - "example-certification-exam": { - "title": "Example Certification Exam", - "intro": ["placeholder"] + "learn-basic-html-by-building-a-recipe-page": { + "title": "Learn Basic HTML by Building a Recipe Page", + "intro": ["", ""] + }, + "front-end-development-certification-exam": { + "title": "Front End Development Certification Exam", + "intro": ["", ""] } } }, diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json index 6f72bd74d7d..760b5862ae7 100644 --- a/client/i18n/locales/english/translations.json +++ b/client/i18n/locales/english/translations.json @@ -999,6 +999,8 @@ "a2-english-for-developers": "A2 English for Developers Certification", "B1 English for Developers": "B1 English for Developers", "b1-english-for-developers": "B1 English for Developers Certification", + "Front End Development": "Front End Development", + "front-end-development-v9": "Front End Development Certification", "Legacy Front End": "Legacy Front End", "legacy-front-end": "Legacy Front End Certification", "Legacy Back End": "Legacy Back End", diff --git a/client/src/assets/icons/superblock-icon.tsx b/client/src/assets/icons/superblock-icon.tsx index 9df288e20eb..f3eb5cef62f 100644 --- a/client/src/assets/icons/superblock-icon.tsx +++ b/client/src/assets/icons/superblock-icon.tsx @@ -38,7 +38,7 @@ const iconMap = { [SuperBlocks.ProjectEuler]: Graduation, [SuperBlocks.CollegeAlgebraPy]: CollegeAlgebra, [SuperBlocks.FoundationalCSharp]: CSharpLogo, - [SuperBlocks.ExampleCertification]: ResponsiveDesign, + [SuperBlocks.FrontEndDevelopment]: ResponsiveDesign, [SuperBlocks.UpcomingPython]: PythonIcon, [SuperBlocks.A2English]: A2EnglishIcon, [SuperBlocks.B1English]: A2EnglishIcon, diff --git a/client/src/components/settings/certification.tsx b/client/src/components/settings/certification.tsx index 31839d97ed0..c3f97a5443e 100644 --- a/client/src/components/settings/certification.tsx +++ b/client/src/components/settings/certification.tsx @@ -130,9 +130,8 @@ const isCertMapSelector = createSelector( 'Legacy Data Visualization': isDataVisCert, 'Legacy Back End': isBackEndCert, 'Legacy Information Security and Quality Assurance': isInfosecQaCert, - // TODO: remove Example Certification? Also, include Upcoming Python // Certification. - 'Example Certification': false, + 'Front End Development': false, 'Upcoming Python Certification': false, 'A2 English for Developers': false, 'B1 English for Developers': false, diff --git a/client/src/pages/learn/example-certification/example-certification-exam/index.md b/client/src/pages/learn/example-certification/example-certification-exam/index.md deleted file mode 100644 index 29deebb212c..00000000000 --- a/client/src/pages/learn/example-certification/example-certification-exam/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Introduction to the Example Certification Exam -block: example-certification-exam -superBlock: example-certification ---- - -## Introduction to the Example Certification Exam - -Earn the Example Certification diff --git a/client/src/pages/learn/example-certification/index.md b/client/src/pages/learn/example-certification/index.md deleted file mode 100644 index 802c64c920e..00000000000 --- a/client/src/pages/learn/example-certification/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Example Certification -superBlock: example-certification -certification: example-certification ---- - -## Introduction to Example Certification - -Official Example Certification diff --git a/client/src/pages/learn/front-end-development/front-end-development-certification-exam/index.md b/client/src/pages/learn/front-end-development/front-end-development-certification-exam/index.md new file mode 100644 index 00000000000..05c46a156d5 --- /dev/null +++ b/client/src/pages/learn/front-end-development/front-end-development-certification-exam/index.md @@ -0,0 +1,9 @@ +--- +title: Introduction to the Front End Development Certification Exam +block: front-end-development-certification-exam +superBlock: front-end-development +--- + +## Introduction to the Front End Development Certification Exam + +This is a test for the new project-based curriculum. diff --git a/client/src/pages/learn/front-end-development/index.md b/client/src/pages/learn/front-end-development/index.md new file mode 100644 index 00000000000..6cb2650399b --- /dev/null +++ b/client/src/pages/learn/front-end-development/index.md @@ -0,0 +1,9 @@ +--- +title: Front End Development +superBlock: front-end-development +certification: front-end-development +--- + +## Front End Development Certification + +Learn HTML, CSS, JavaScript, Relational Databases, React, and Node.js to become a full-stack developer. diff --git a/client/src/pages/learn/front-end-development/learn-basic-html-by-building-a-recipe-page/index.md b/client/src/pages/learn/front-end-development/learn-basic-html-by-building-a-recipe-page/index.md new file mode 100644 index 00000000000..d25f6fd6613 --- /dev/null +++ b/client/src/pages/learn/front-end-development/learn-basic-html-by-building-a-recipe-page/index.md @@ -0,0 +1,9 @@ +--- +title: Introduction to the Learn Basic HTML by Building a Recipe Page +block: learn-basic-html-by-building-a-recipe-page +superBlock: front-end-development +--- + +## Introduction to the Learn Basic HTML by Building a Recipe Page + +This is a test for the new project-based curriculum. diff --git a/client/src/templates/Introduction/components/super-block-intro.tsx b/client/src/templates/Introduction/components/super-block-intro.tsx index f487e469c2e..8402443e82b 100644 --- a/client/src/templates/Introduction/components/super-block-intro.tsx +++ b/client/src/templates/Introduction/components/super-block-intro.tsx @@ -22,6 +22,7 @@ export const ConditionalDonationAlert = ({ SuperBlocks.JsAlgoDataStructNew, SuperBlocks.A2English, SuperBlocks.UpcomingPython, + SuperBlocks.FrontEndDevelopment, SuperBlocks.SciCompPy ]; diff --git a/curriculum/challenges/_meta/example-certification-exam/meta.json b/curriculum/challenges/_meta/example-certification-exam/meta.json deleted file mode 100644 index 10d3c649498..00000000000 --- a/curriculum/challenges/_meta/example-certification-exam/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "Example Certification Exam", - "isUpcomingChange": true, - "dashedName": "example-certification-exam", - "helpCategory": "HTML-CSS", - "order": 0, - "superBlock": "example-certification", - "challengeOrder": [ - { - "id": "645147516c245de4d11eb7ba", - "title": "Certification Exam" - } - ] -} \ No newline at end of file diff --git a/curriculum/challenges/_meta/front-end-development-certification-exam/meta.json b/curriculum/challenges/_meta/front-end-development-certification-exam/meta.json new file mode 100644 index 00000000000..8173f646cce --- /dev/null +++ b/curriculum/challenges/_meta/front-end-development-certification-exam/meta.json @@ -0,0 +1,14 @@ +{ + "name": "Front End Development Certification Exam", + "isUpcomingChange": true, + "dashedName": "front-end-development-certification-exam", + "helpCategory": "HTML-CSS", + "order": 1, + "superBlock": "front-end-development", + "challengeOrder": [ + { + "id": "645147516c245de4d11eb7ba", + "title": "Front End Development Certification Exam" + } + ] +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/learn-basic-html-by-building-a-recipe-page/meta.json b/curriculum/challenges/_meta/learn-basic-html-by-building-a-recipe-page/meta.json new file mode 100644 index 00000000000..7ca508e2fb6 --- /dev/null +++ b/curriculum/challenges/_meta/learn-basic-html-by-building-a-recipe-page/meta.json @@ -0,0 +1,16 @@ +{ + "name": "Learn Basic HTML by Building a Recipe Page", + "isUpcomingChange": true, + "usesMultifileEditor": true, + "hasEditableBoundaries": true, + "dashedName": "learn-basic-html-by-building-a-recipe-page", + "order": 0, + "superBlock": "front-end-development", + "challengeOrder": [ + { + "id": "66731cd027ef3acb155669f5", + "title": "Step 1" + } + ], + "helpCategory": "HTML-CSS" +} \ No newline at end of file diff --git a/curriculum/challenges/english/00-certifications/example-certification/example-certifcation.yml b/curriculum/challenges/english/00-certifications/example-certification/example-certifcation.yml deleted file mode 100644 index b63efaa2cf3..00000000000 --- a/curriculum/challenges/english/00-certifications/example-certification/example-certifcation.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -id: 64514fda6c245de4d11eb7bb -title: Example Certification -certification: example-certification -challengeType: 7 -isPrivate: true -tests: - - id: 645147516c245de4d11eb7ba - title: Certification Exam diff --git a/curriculum/challenges/english/00-certifications/front-end-development-certification/front-end-development.yml b/curriculum/challenges/english/00-certifications/front-end-development-certification/front-end-development.yml new file mode 100644 index 00000000000..9727a6a9b6f --- /dev/null +++ b/curriculum/challenges/english/00-certifications/front-end-development-certification/front-end-development.yml @@ -0,0 +1,9 @@ +--- +id: 64514fda6c245de4d11eb7bb +title: Front End Development Certification +certification: front-end-development +challengeType: 7 +isPrivate: true +tests: + - id: 645147516c245de4d11eb7ba + title: Front End Development Certification Exam diff --git a/curriculum/challenges/english/99-example-certification/example-certification-exam/certification-exam.md b/curriculum/challenges/english/25-front-end-development/front-end-development-certification-exam/645147516c245de4d11eb7ba.md similarity index 63% rename from curriculum/challenges/english/99-example-certification/example-certification-exam/certification-exam.md rename to curriculum/challenges/english/25-front-end-development/front-end-development-certification-exam/645147516c245de4d11eb7ba.md index 60c290b16ff..28af96694df 100644 --- a/curriculum/challenges/english/99-example-certification/example-certification-exam/certification-exam.md +++ b/curriculum/challenges/english/25-front-end-development/front-end-development-certification-exam/645147516c245de4d11eb7ba.md @@ -1,8 +1,8 @@ --- id: 645147516c245de4d11eb7ba -title: Certification Exam +title: Front End Development Certification Exam challengeType: 17 -dashedName: certification-exam +dashedName: front-end-development-certification-exam --- # --description-- diff --git a/curriculum/challenges/english/25-front-end-development/learn-basic-html-by-building-a-recipe-page/66731cd027ef3acb155669f5.md b/curriculum/challenges/english/25-front-end-development/learn-basic-html-by-building-a-recipe-page/66731cd027ef3acb155669f5.md new file mode 100644 index 00000000000..2b1a9d0a9de --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/learn-basic-html-by-building-a-recipe-page/66731cd027ef3acb155669f5.md @@ -0,0 +1,28 @@ +--- +id: 66731cd027ef3acb155669f5 +title: Step 1 +challengeType: 0 +dashedName: step-1 +--- + +# --description-- + +step 1 instructions + +# --hints-- + +Test 1 + +```js + +``` + +# --seed-- + +## --seed-contents-- + +```html +--fcc-editable-region-- + +--fcc-editable-region-- +``` diff --git a/curriculum/utils.js b/curriculum/utils.js index f2772b2bcf5..7ebadab3914 100644 --- a/curriculum/utils.js +++ b/curriculum/utils.js @@ -86,7 +86,7 @@ const directoryToSuperblock = { '22-rosetta-code': 'rosetta-code', '23-python-for-everybody': 'python-for-everybody', '24-b1-english-for-developers': 'b1-english-for-developers', - '99-example-certification': 'example-certification' + '25-front-end-development': 'front-end-development' }; function getSuperBlockFromDir(dir) { diff --git a/curriculum/utils.test.ts b/curriculum/utils.test.ts index c72f3d8b0ad..6a2e122b8b4 100644 --- a/curriculum/utils.test.ts +++ b/curriculum/utils.test.ts @@ -28,7 +28,7 @@ const mockSuperBlocks = [ SuperBlocks.RespWebDesign, SuperBlocks.JsAlgoDataStruct, SuperBlocks.TheOdinProject, - SuperBlocks.ExampleCertification + SuperBlocks.FrontEndDevelopment ]; const fullSuperOrder = { @@ -50,7 +50,7 @@ const fullSuperOrder = { [SuperBlocks.RespWebDesign]: 15, [SuperBlocks.JsAlgoDataStruct]: 16, [SuperBlocks.TheOdinProject]: 17, - [SuperBlocks.ExampleCertification]: 18 + [SuperBlocks.FrontEndDevelopment]: 18 }; describe('createSuperOrder', () => { @@ -125,12 +125,12 @@ describe('getSuperOrder', () => { process.env.SHOW_UPCOMING_CHANGES === 'true' ) { expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(17); - expect(getSuperOrder(SuperBlocks.ExampleCertification)).toBe(18); + expect(getSuperOrder(SuperBlocks.FrontEndDevelopment)).toBe(18); } else if (process.env.SHOW_NEW_CURRICULUM === 'true') { return; } else if (process.env.SHOW_UPCOMING_CHANGES === 'true') { expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(17); - expect(getSuperOrder(SuperBlocks.ExampleCertification)).toBe(18); + expect(getSuperOrder(SuperBlocks.FrontEndDevelopment)).toBe(18); } }); }); diff --git a/shared/config/certification-settings.ts b/shared/config/certification-settings.ts index 8ec39702084..7a1b5f34367 100644 --- a/shared/config/certification-settings.ts +++ b/shared/config/certification-settings.ts @@ -26,6 +26,7 @@ export enum Certification { CollegeAlgebraPy = 'college-algebra-with-python-v8', FoundationalCSharp = 'foundational-c-sharp-with-microsoft', // Upcoming certifications + FrontEndDevelopment = 'front-end-development-v9', UpcomingPython = 'upcoming-python-v8', A2English = 'a2-english-for-developers-v8', B1English = 'b1-english-for-developers-v8', @@ -75,6 +76,7 @@ export const legacyFullStackCertification = [ // "Upcoming" certifications are standard certifications that are not live unless // showUpcomingChanges is true. export const upcomingCertifications = [ + Certification.FrontEndDevelopment, Certification.UpcomingPython, Certification.A2English, Certification.B1English @@ -278,6 +280,7 @@ export const linkedInCredentialIds = { [Certification.RelationalDb]: 'rd', [Certification.CollegeAlgebraPy]: 'cawp', [Certification.FoundationalCSharp]: 'fcswm', + [Certification.FrontEndDevelopment]: 'fed', [Certification.UpcomingPython]: 'up', [Certification.JsAlgoDataStructNew]: 'jaads', [Certification.A2English]: 'a2efd', diff --git a/shared/config/superblocks.ts b/shared/config/superblocks.ts index fc7e50da272..4a68dfaf80e 100644 --- a/shared/config/superblocks.ts +++ b/shared/config/superblocks.ts @@ -20,7 +20,7 @@ export enum SuperBlocks { ProjectEuler = 'project-euler', CollegeAlgebraPy = 'college-algebra-with-python', FoundationalCSharp = 'foundational-c-sharp-with-microsoft', - ExampleCertification = 'example-certification', + FrontEndDevelopment = 'front-end-development', UpcomingPython = 'upcoming-python', A2English = 'a2-english-for-developers', B1English = 'b1-english-for-developers', @@ -88,7 +88,7 @@ export const superBlockOrder: SuperBlockOrder = { [SuperBlockStages.New]: [], [SuperBlockStages.Upcoming]: [ SuperBlocks.B1English, - SuperBlocks.ExampleCertification, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython ] }; @@ -112,6 +112,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.ProjectEuler, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -122,6 +123,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.ProjectEuler, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -133,6 +135,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.ProjectEuler, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -142,6 +145,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.FoundationalCSharp, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -149,6 +153,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { ], [Languages.Portuguese]: [ SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -156,6 +161,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { ], [Languages.Ukrainian]: [ SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English @@ -163,6 +169,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { [Languages.Japanese]: [ SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -179,6 +186,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.ProjectEuler, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -199,6 +207,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.ProjectEuler, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -222,6 +231,7 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.FrontEndDevLibs, SuperBlocks.JsAlgoDataStructNew, SuperBlocks.JsAlgoDataStruct, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, @@ -243,13 +253,13 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.TheOdinProject, SuperBlocks.FrontEndDevLibs, SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.FrontEndDevelopment, SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.B1English, SuperBlocks.PythonForEverybody, SuperBlocks.DataVis, SuperBlocks.RelationalDb, - SuperBlocks.ExampleCertification, SuperBlocks.RosettaCode ] }; diff --git a/tools/challenge-auditor/index.ts b/tools/challenge-auditor/index.ts index 0d19ce00c7a..bf92775493a 100644 --- a/tools/challenge-auditor/index.ts +++ b/tools/challenge-auditor/index.ts @@ -55,7 +55,7 @@ const superBlockFolderMap = { 'rosetta-code': '22-rosetta-code', 'python-for-everybody': '23-python-for-everybody', 'b1-english-for-developers': '24-b1-english-for-developers', - 'example-certification': '99-example-certification' + 'front-end-development': '25-front-end-development' }; // These blocks are in the incorrect superblock. They should be moved but, for diff --git a/tools/challenge-editor/api/configs/super-block-list.ts b/tools/challenge-editor/api/configs/super-block-list.ts index ac6b77d9c81..1ce40eb2459 100644 --- a/tools/challenge-editor/api/configs/super-block-list.ts +++ b/tools/challenge-editor/api/configs/super-block-list.ts @@ -90,5 +90,9 @@ export const superBlockList = [ { name: 'B1 English for Developers (Beta)', path: '24-b1-english-for-developers' + }, + { + name: 'Front End Development', + path: '25-front-end-development' } ]; diff --git a/tools/challenge-helper-scripts/fs-utils.ts b/tools/challenge-helper-scripts/fs-utils.ts index af972a61418..f8011d17765 100644 --- a/tools/challenge-helper-scripts/fs-utils.ts +++ b/tools/challenge-helper-scripts/fs-utils.ts @@ -27,7 +27,7 @@ export function getSuperBlockSubPath(superBlock: SuperBlocks): string { [SuperBlocks.RosettaCode]: '22-rosetta-code', [SuperBlocks.PythonForEverybody]: '23-python-for-everybody', [SuperBlocks.B1English]: '24-b1-english-for-developers', - [SuperBlocks.ExampleCertification]: '99-example-certification' + [SuperBlocks.FrontEndDevelopment]: '25-front-end-development' }; return pathMap[superBlock]; } diff --git a/tools/scripts/build/build-external-curricula-data.test.ts b/tools/scripts/build/build-external-curricula-data.test.ts index 3b0b0dd3e7e..99de21ab227 100644 --- a/tools/scripts/build/build-external-curricula-data.test.ts +++ b/tools/scripts/build/build-external-curricula-data.test.ts @@ -89,7 +89,7 @@ describe('external curriculum data build', () => { const isUpcoming = [ 'b1-english-for-developers', 'upcoming-python', - 'example-certification' + 'front-end-development' ]; // TODO: this is a hack, we should have a single source of truth for the