From 7458989bb635e0b628a2f73e1cc716437a257ed6 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 5 Mar 2026 14:28:40 -0800 Subject: [PATCH 01/15] fix: clean up tip --- src/content/docs/how-to-work-on-coding-challenges.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index ac14478b..249334c3 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -7,7 +7,7 @@ sidebar: import { Steps } from '@astrojs/starlight/components'; :::tip -You'll need this guide if you're creating or modifying interactive coding challenges. If you're working on other types of curriculum like workshops, labs, or quizzes, check their respective guides. +You will need this guide if you are working on any parts of the curriculum development which includes the workshops, and labs. ::: Our goal is to develop a fun and clear interactive learning experience. From 31f292d3ab5ffbf67e83809c37fe0edc7fb9a6c0 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 5 Mar 2026 14:32:44 -0800 Subject: [PATCH 02/15] fix: cleanup intro and remove outdated information --- src/content/docs/how-to-work-on-coding-challenges.mdx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 249334c3..2463877b 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -16,13 +16,7 @@ Designing interactive coding challenges is difficult. It would be much easier to We want campers to achieve a flow state. We want them to build momentum and blast through our curriculum with as few snags as possible. We want them to go into the projects with confidence and gain wide exposure to programming concepts. -Note that for Version 7.0 of the freeCodeCamp curriculum, we are moving toward [an entirely project-focused model with a lot more repetition](https://www.freecodecamp.org/news/python-curriculum-is-live/). - -Creating these challenges requires immense creativity and attention to detail. There's plenty of help available. You'll have support from a whole team of contributors to whom you can bounce ideas off and demo your challenges. - -And as always, feel free to ask questions on the ['Contributors' category on our forum](https://forum.freecodecamp.org/c/contributors) or [the contributors chat room](https://discord.gg/PRyKn3Vbay). - -With your help, we can design an interactive coding curriculum that will help millions of people learn to code for years to come. +We are currently in version 9 of the curriculum which includes theory lessons, workshops, labs, review pages and quizzes. The content for each challenge is stored in its markdown file. This markdown file is later converted to HTML using our tools to create interactive web pages. From bee8fd5e7169ad87a7f24a495cc3f2b29708ff2c Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Tue, 10 Mar 2026 20:35:36 -0700 Subject: [PATCH 03/15] wip: updating early sections --- src/content/docs/how-to-work-on-coding-challenges.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 2463877b..c565e8a2 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -31,7 +31,7 @@ Before you work on the curriculum, you would need to set up some tooling to help [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/freeCodeCamp/freeCodeCamp) -### How to work on workshops +## Specialized Guides for the Curriculum The workshops have some additional tooling to help create new projects and steps. To read more, see [these docs](/how-to-work-on-workshops/) From 718338ed014d948c83d4af4b911a3c39b674d439 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:15:34 -0700 Subject: [PATCH 04/15] fix: cleanup specialized guides section --- src/content/docs/how-to-work-on-coding-challenges.mdx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index c565e8a2..71adafe3 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -7,7 +7,7 @@ sidebar: import { Steps } from '@astrojs/starlight/components'; :::tip -You will need this guide if you are working on any parts of the curriculum development which includes the workshops, and labs. +You will need this guide if you are working on any parts of the curriculum development which includes the workshops and labs. ::: Our goal is to develop a fun and clear interactive learning experience. @@ -33,7 +33,10 @@ Before you work on the curriculum, you would need to set up some tooling to help ## Specialized Guides for the Curriculum -The workshops have some additional tooling to help create new projects and steps. To read more, see [these docs](/how-to-work-on-workshops/) +The workshops and labs have additional tooling and processes. To learn more, refer to these guides: + +- [How to Work on Workshops](/how-to-work-on-workshops/) +- [How to Work on Labs](/how-to-work-on-labs) ## Challenge Template From f900be846f6e5aa7d7b5114e63ba28af45ec9b33 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:28:07 -0700 Subject: [PATCH 05/15] fix: template --- .../docs/how-to-work-on-coding-challenges.mdx | 143 +----------------- 1 file changed, 1 insertion(+), 142 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 71adafe3..4577e372 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -63,8 +63,7 @@ Since `globalThis` persists until the page is reloaded, it's very important to u id: Unique identifier (alphanumerical, MongoDB_id) title: Challenge Title challengeType: Integer, defined in `client/utils/challenge-types.js` -videoUrl: 'url of video explanation' -forumTopicId: 12345 (deprecated) +demoType: onClick(labs) or onLoad(workshops) --- # --description-- @@ -75,14 +74,6 @@ Challenge description text, in markdown
example code
``` -# --transcript-- - -Transcript of the video, should only be used in video challenges. - -# --instructions-- - -Challenge instruction text, in markdown - # --before-all-- ```js @@ -138,10 +129,6 @@ assert.equal( ); ``` -# --notes-- - -Extra information for a challenge, in markdown - # --seed-- ## --seed-contents-- @@ -224,134 +211,6 @@ More answers ## --video-solution-- The number for the correct answer goes here. - -# --fillInTheBlank-- - -These are for the English curriculum challenges. - -## --sentence-- - -Sentence to be shown with with blanks that campers have to fill in. Example: - -`Hello, You _ the new graphic designer, _?` - -The two underscores will show up as blanks. The sentence must be surrounded in backticks. - -## --blanks-- - -The solution for the first blank in the sentence above. Example: - -`are` - -### --feedback-- - -Feedback shown when campers input the wrong solution for this blank. - ---- - -Solution for the second blank. Example: - -`right` - -If no feedback is here, a generic "wrong answer" message will be shown. - -# --scene-- - -```json -// # --scene-- can only consist of a single json object -{ - // Setup the scene. Properties not marked optional are required. - "setup": { - // Background file to start the scene. A list of scene asset filenames can be found here: https://github.com/freeCodeCamp/cdn/pull/233/files - "background": "company2-center.png", - // Array of all characters that will appear in the scene - "characters": [ - { - // Name of character. See list of available characters in scene-assets.tsx - "character": "Maria", - // Where to start the character. Maria will start off screen to the left - "position": { "x": -25, "y": 0, "z": 1 } - }, - { - "character": "Tom", - // Tom will start 70% from the left of the screen and 1.5 times regular size - "position": { "x": 70, "y": 0, "z": 1.5 }, - // Optional, defaults to 1. Tom will start invisible - "opacity": 0 - } - ], - "audio": { - // Audio filename - "filename": "1.1-1.mp3", - // Seconds after the scene starts before the audio starts playing - "startTime": 1.3, - // Optional. Timestamp of the audio file where it starts playing from. - "startTimestamp": 0, - // Optional. Timestamp of the audio file where is stops playing. If these two aren't used, the whole audio file will play. - "finishTimestamp": 8.4 - }, - // Optional, defaults to false. Use this for the long dialogues. It stops the accessibility icon from showing which gives campers the option to show or hide the dialogue text - "alwaysShowDialogue": true - }, - // Array of commands that make up the scene - "commands": [ - { - // Character that will have an action for this command - "character": "Maria", - // Optional, defaults to previous value. Maria will move to 25% from the left of the screen. The movement takes 0.5 seconds - "position": { "x": 25, "y": 0, "z": 1 }, - // When the command will start. Zero seconds after the camper presses play - "startTime": 0 - }, - { - "character": "Tom", - // Optional, defaults to previous value. Tom will fade into view. The transition take 0.5 seconds. Movement and Opacity transitions take 0.5 seconds - "opacity": 1, - // Tom will fade into view 0.5 seconds into the scene (immediately after Maria finishes moving on screen) - "startTime": 0.5 - }, - { - "character": "Maria", - // When the command starts: Maria will start saying this line 1.3 seconds into the scene. Note that this is the same time as the audio.startTime above. It doesn't have to match that (maybe there's a pause at the beginning of the audio or something) - "startTime": 1.3, - // The character will stop moving their mouth at the finishTime - "finishTime": 4.95, - "dialogue": { - // Text that will appear if the dialogue is visible - "text": "Hello! You're the new graphic designer, right? I'm Maria, the team lead.", - // Where the dialogue text will be aligned. Can be 'left', 'center', or 'right' - "align": "left" - } - }, - { - // background will change to this at 5.4 seconds into the scene - "background": "company2-breakroom.png", - "character": "Tom", - "startTime": 5.4, - "finishTime": 9.4, - "dialogue": { - "text": "Hi, that's right! I'm Tom McKenzie. It's a pleasure to meet you.", - // Tom's text will be aligned to the right since he is on the right side of the screen - "align": "right" - } - }, - { - "character": "Tom", - // Tom will fade to 0 opacity - "opacity": 0, - // I like to move characters off screen or fade them 0.5 second after the last talking command - "startTime": 9.9 - }, - { - "character": "Maria", - // Maria will slide back off the screen to the left - "position": { "x": -25, "y": 0, "z": 1 }, - // The animation will stop playing 0.5 seconds after the 'finishTime' of the last command - or 0.5 seconds after 'startTime' if 'finishTime' isn't there. - "startTime": 10.4 - } - ] -} -``` ```` :::note From ea753668b38476f4f07648f6d95228f410555e85 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:29:55 -0700 Subject: [PATCH 06/15] fix: specialized guides section --- src/content/docs/how-to-work-on-coding-challenges.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 4577e372..753f8dbf 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -33,10 +33,12 @@ Before you work on the curriculum, you would need to set up some tooling to help ## Specialized Guides for the Curriculum -The workshops and labs have additional tooling and processes. To learn more, refer to these guides: +The workshops, labs and quizzes have additional tooling and processes. To learn more, refer to these guides: - [How to Work on Workshops](/how-to-work-on-workshops/) - [How to Work on Labs](/how-to-work-on-labs) +- [How to Work on Quizzes](/how-to-work-on-quizzes) +- [How to work on Review Pages](/how-to-work-on-reviews) ## Challenge Template From 57ff42806be06fbf7af3e11c26c7b37446a7a9dd Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:38:49 -0700 Subject: [PATCH 07/15] chore: moving naming challenges to video courses page --- .../how-to-help-with-video-challenges.mdx | 32 ++++++++++++- .../docs/how-to-work-on-coding-challenges.mdx | 45 ------------------- 2 files changed, 31 insertions(+), 46 deletions(-) diff --git a/src/content/docs/how-to-help-with-video-challenges.mdx b/src/content/docs/how-to-help-with-video-challenges.mdx index bb57cf13..6fc47487 100644 --- a/src/content/docs/how-to-help-with-video-challenges.mdx +++ b/src/content/docs/how-to-help-with-video-challenges.mdx @@ -8,6 +8,37 @@ A video challenge is a small section of a full-length video course on a particul The video challenge pages are created by members of the freeCodeCamp team. YouTube videos are also uploaded by members of the freeCodeCamp team. +## Numbering Challenges + +Every challenge needs an `id`. If you don't specify one, then MongoDB will create a new random one when it saves the data; however, we don't want it to do that, since we want the challenge ids to be consistent across different environments (staging, production, lots of different developers, etc.). + +To generate a new one in a shell (assuming MongoDB is running separately): + +1. Run `mongo` command. +2. Run `ObjectId()` command. + +For example: + +```bash +$ mongo +MongoDB shell version v3.6.1 +connecting to: mongodb://127.0.0.1:27017 +MongoDB server version: 3.4.10 +... +$ ObjectId() +ObjectId("5a474d78df58bafeb3535d34") +``` + +The result is a new id, for example, `5a474d78df58bafeb3535d34` above. + +Once you have your id, put it into the markdown file as the `id` field at the top, e.g. + +```yml +--- +id: 5a474d78df58bafeb3535d34 +title: Challenge Title +``` + ## Challenge Template Below is a template of what the challenge markdown files look like. @@ -20,7 +51,6 @@ sidebar: label: Work on Video Challenges challengeType: 11 videoId: 'YouTube videoId for video challenge' -forumTopicId: 12345 --- # --description-- diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 753f8dbf..501afd95 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -225,51 +225,6 @@ The number for the correct answer goes here. ::: -## Numbering Challenges - -Every challenge needs an `id`. If you don't specify one, then MongoDB will create a new random one when it saves the data; however, we don't want it to do that, since we want the challenge ids to be consistent across different environments (staging, production, lots of different developers, etc.). - -To generate a new one in a shell (assuming MongoDB is running separately): - -1. Run `mongo` command. -2. Run `ObjectId()` command. - -For example: - -```bash -$ mongo -MongoDB shell version v3.6.1 -connecting to: mongodb://127.0.0.1:27017 -MongoDB server version: 3.4.10 -... -$ ObjectId() -ObjectId("5a474d78df58bafeb3535d34") -``` - -The result is a new id, for example, `5a474d78df58bafeb3535d34` above. - -Once you have your id, put it into the markdown file as the `id` field at the top, e.g. - -```yml ---- -id: 5a474d78df58bafeb3535d34 -title: Challenge Title -``` - -## Naming challenges - -Naming things is hard. We've made it easier by imposing some constraints. - -All challenge titles should be explicit and should follow this pattern: - -[verb][object clause] - -Here are some example challenge names: - -- Use Clockwise Notation to Specify the Padding of an Element -- Condense arrays with .reduce -- Use Bracket Notation to Find the First Character in a String - ## Challenge descriptions/instructions Sentences should be clear and concise with minimal jargon. If used, jargon should be immediately defined in plain English. From 8245bd02a6945e047cc8bc8f5df5d6a38243e27d Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:39:58 -0700 Subject: [PATCH 08/15] fix: removing deprecated content --- .../docs/how-to-work-on-coding-challenges.mdx | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 501afd95..95c62d52 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -428,74 +428,6 @@ Each challenge has a `Get a Hint` button, so a user can access any hints/solutio If you find a problem with an existing challenge's hints/solutions topic, you can make suggestions in the [contributors category](https://forum.freecodecamp.org/c/contributors) on the forum. Moderators and users with trust level 3 will review the comments and decide whether or not to include the changes in the corresponding hint/solutions topic. -### Adding new Challenge hints/solutions Topics (deprecated) - -Take the following steps when adding a new challenge hints/solutions-related topic. - - - -1. Start by following the same steps for creating a new topic but review the next for creating the title. -2. The title of the topic should start with `freeCodeCamp Challenge Guide: ` concatenated with the actual title of the curriculum challenge. For example, if the challenge is named "`Chunky Monkey`", the topic title would be "`freeCodeCamp Challenge Guide: Chunky Monkey`". -3. `camperbot` should be the owner of these topics/posts, so you will need to request an admin to change the ownership of the main post to `camperbot`. -4. Once the new topic is created, a forum topic id is created. It is located at the end of the forum topic URL. This id must be added to the frontmatter of the curriculum challenge file via the normal pull request process for the `Get a Hint` button to link to the topic. - - - -### Guidelines for Content of Hints and Solutions Topics (deprecated) - -When proposing a solution for a curriculum challenge-related Guide topic, the full code must be added. This includes all the original seed code plus any changes needed to pass all the challenge tests. The following template should be used when creating new hints/solutions topics: - -````md -# Challenge Name Goes Here - ---- - -## Problem Explanation - -This summarizes what needs to be done without just restating the challenge description and/or instructions. This is an optional section - -#### Relevant Links - -- [Link Text](link_url_goes_here) -- [Link Text](link_url_goes_here) - ---- - -## Hints - -### Hint 1 - -Hint goes here - -### Hint 2 - -Hint goes here - ---- - -## Solutions - -
Solution 1 (Click to Show/Hide) - -```js -function myFunc() { - console.log('Hello World!'); -} -``` - -#### Code Explanation - -- Code explanation goes here -- Code explanation goes here - -#### Relevant Links - -- [Link Text](link_url_goes_here) -- [Link Text](link_url_goes_here) - -
-```` - ## Testing Challenges Before you [create a pull request](/how-to-open-a-pull-request/) for your changes, you need to validate that the changes you have made do not inadvertently cause problems with the challenge. From 27508652d8f950f374bf6cd4e1a9357d127aa9a2 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 18:58:06 -0700 Subject: [PATCH 09/15] chore: update examples in seed code section --- .../docs/how-to-work-on-coding-challenges.mdx | 55 ++++--------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 95c62d52..7cc3e499 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -33,12 +33,14 @@ Before you work on the curriculum, you would need to set up some tooling to help ## Specialized Guides for the Curriculum -The workshops, labs and quizzes have additional tooling and processes. To learn more, refer to these guides: +The core curriculum is broken down into workshops, labs, review pages and quizzes. Each of those components has its own tooling and processes. + +To learn more, refer to these specialized guides: - [How to Work on Workshops](/how-to-work-on-workshops/) - [How to Work on Labs](/how-to-work-on-labs) -- [How to Work on Quizzes](/how-to-work-on-quizzes) - [How to work on Review Pages](/how-to-work-on-reviews) +- [How to Work on Quizzes](/how-to-work-on-quizzes) ## Challenge Template @@ -365,45 +367,12 @@ Example of a valid CSS comment: If a challenge only has a single place where code changes are needed, please use the comments in the following example to instruct the user where changes should be made. ```js -var a = 3; -var b = 17; -var c = 12; - -// Only change code below this line -a = a + 12; -b = 9 + b; -c = c + 7; -``` - -If a challenge has multiple places where the user is expected to change code (i.e. the React challenges) - -```jsx -class MyComponent extends React.Component { - constructor(props) { - super(props); - this.state = { - text: 'Hello' - }; - // Change code below this line - - // Change code above this line - } - handleClick() { - this.setState({ - text: 'You clicked!' - }); - } - render() { - return ( -
- {/* Change code below this line */} - - {/* Change code above this line */} -

{this.state.text}

-
- ); - } +// TODO: use a different type of loop +--fcc - editable - region--; +for (let i = 1; i <= count; i++) { + rows.push(padRow(i, count)); } +--fcc - editable - region--; ``` ### Translation of Seed Code Comments @@ -476,11 +445,7 @@ After you've committed your changes, check here for [how to open a Pull Request] ## Useful Links -Creating and Editing Challenges: - -1. [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/challenge-types.ts#L1-#L28) - what the numeric challenge type values mean (enum). - -2. [Contributing to FreeCodeCamp - Writing ES6 Challenge Tests](https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s) - a video following [Ethan Arrowood](https://twitter.com/ArrowoodTech) as he contributes to the old version of the curriculum. +- [Challenge types](https://github.com/freeCodeCamp/freeCodeCamp/blob/main/shared/config/challenge-types.ts#L1-#L28) - what the numeric challenge type values mean (enum). ## Helper Scripts From bff0a5d819927853ee6a76d2a3e5b1fdd02e7062 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 19:21:31 -0700 Subject: [PATCH 10/15] feat: add core curriculum section --- .../docs/how-to-work-on-coding-challenges.mdx | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 7cc3e499..343d2f32 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -22,26 +22,47 @@ The content for each challenge is stored in its markdown file. This markdown fil You can find all of freeCodeCamp.org's curricular content in the [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/main/curriculum/challenges) directory. -## Set up the tooling for the curriculum +## Breakdown of the Core Curriculum -Before you work on the curriculum, you would need to set up some tooling to help you test your changes. You can use any option from the below: +The core curriculum teaches full stack development and is broken down into the following certifications: -- You can [set up freeCodeCamp locally](/how-to-setup-freecodecamp-locally/). This is **highly recommended** for regular/repeat contributions. This setup allows you to work and test your changes. -- Use GitHub Codespaces, a free online dev environment. Clicking the button below will start a ready-to-code dev environment for freeCodeCamp in your browser. It only takes a few minutes. +- Responsive Web Design Certification +- JavaScript Certification +- Front-End Development Libraries Certification +- Python Certification +- Relational Databases Certification +- Back-End Development and APIs Certification - [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/freeCodeCamp/freeCodeCamp) +Each certification is broken down into modules like Bash Fundamentals, Semantic HTML and Functional Programming. + +Each module contains dozens of theory lessons, workshops, labs, review pages and quizzes. + +Theory lessons are short text based lectures with interactive examples that teach the theory behind concepts including common data structures, CSS Grid and SQL. + +Workshops are step based projects where campers get to practice what they learned in the theory lessons. + +Labs are campers opportunity to test their problem solving skills and build out projects reviewing the concepts learned in the theory lessons and workshops. -## Specialized Guides for the Curriculum +Review pages have a complete list of concepts covered in the module. -The core curriculum is broken down into workshops, labs, review pages and quizzes. Each of those components has its own tooling and processes. +Quizzes will test the campers understanding of the material before moving onto the next module. -To learn more, refer to these specialized guides: +Each of these components has its own tooling and style guides. If you are interested in contributing, refer to these specialized guides: - [How to Work on Workshops](/how-to-work-on-workshops/) - [How to Work on Labs](/how-to-work-on-labs) - [How to work on Review Pages](/how-to-work-on-reviews) - [How to Work on Quizzes](/how-to-work-on-quizzes) +## Set up the tooling for the Curriculum + +Before you work on the curriculum, you would need to set up some tooling to help you test your changes. You can use any option from the below: + +- You can [set up freeCodeCamp locally](/how-to-setup-freecodecamp-locally/). This is **highly recommended** for regular/repeat contributions. This setup allows you to work and test your changes. +- Use GitHub Codespaces, a free online dev environment. Clicking the button below will start a ready-to-code dev environment for freeCodeCamp in your browser. It only takes a few minutes. + + [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/freeCodeCamp/freeCodeCamp) + ## Challenge Template :::note From 33f2e1cc2c9e48f1f6d68ace2db2a54770aef9f9 Mon Sep 17 00:00:00 2001 From: Jessica Wilkins <67210629+jdwilkin4@users.noreply.github.com> Date: Thu, 12 Mar 2026 19:33:37 -0700 Subject: [PATCH 11/15] Apply suggestion from @jdwilkin4 --- src/content/docs/how-to-work-on-coding-challenges.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 343d2f32..0ab6abce 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -389,11 +389,12 @@ If a challenge only has a single place where code changes are needed, please use ```js // TODO: use a different type of loop ---fcc - editable - region--; +// TODO: use a different type of loop +--fcc-editable-region-- for (let i = 1; i <= count; i++) { rows.push(padRow(i, count)); } ---fcc - editable - region--; +--fcc-editable-region-- ``` ### Translation of Seed Code Comments From 805f2901cc16606ac9050b8b701e1c1115bcae1a Mon Sep 17 00:00:00 2001 From: Jessica Wilkins <67210629+jdwilkin4@users.noreply.github.com> Date: Thu, 12 Mar 2026 19:34:33 -0700 Subject: [PATCH 12/15] Apply suggestion from @jdwilkin4 --- src/content/docs/how-to-work-on-coding-challenges.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 0ab6abce..0f250259 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -389,7 +389,6 @@ If a challenge only has a single place where code changes are needed, please use ```js // TODO: use a different type of loop -// TODO: use a different type of loop --fcc-editable-region-- for (let i = 1; i <= count; i++) { rows.push(padRow(i, count)); From 35d8e585a87f1a476c13edcfb9a15bf330204ebc Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 19:55:02 -0700 Subject: [PATCH 13/15] feat: add create project section --- .../docs/how-to-work-on-coding-challenges.mdx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index 0f250259..ae25843a 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -389,11 +389,11 @@ If a challenge only has a single place where code changes are needed, please use ```js // TODO: use a different type of loop ---fcc-editable-region-- +--fcc - editable - region--; for (let i = 1; i <= count; i++) { rows.push(padRow(i, count)); } ---fcc-editable-region-- +--fcc - editable - region--; ``` ### Translation of Seed Code Comments @@ -474,7 +474,13 @@ After you've committed your changes, check here for [how to open a Pull Request] If you are working with the step-based challenges, refer to the [Work on Workshops](/how-to-work-on-workshops/) section. ::: -There are a few helper scripts that can be used to manage the challenges in a block. Note that these commands should all be run in the block directory. For example: +### Creating a New Projects + +To create a new lecture block, workshop, lab, review page or quiz, you can run `pnpm run create-new-project` in the root directory. This opens up a command line UI that guides you through the process. + +Once that has finished, there should be a new challenge in the curriculum that you can use for the first step of the project. For example, if you created a project called `test-project` in the Responsive Web Design certification, it would be in `curriculum/challenges/english/blocks/test-project`. + +There are a few other helper scripts that can be used to manage the challenges in a block. Note that these commands should all be run in the block directory. For example: ```bash cd curriculum/challenges/english/blocks/basic-algorithm-scripting From 0c58298384cbf6187426aee7734e88963eca6ed5 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Thu, 12 Mar 2026 19:57:25 -0700 Subject: [PATCH 14/15] fix: code example --- src/content/docs/how-to-work-on-coding-challenges.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/content/docs/how-to-work-on-coding-challenges.mdx b/src/content/docs/how-to-work-on-coding-challenges.mdx index ae25843a..9232ec5f 100644 --- a/src/content/docs/how-to-work-on-coding-challenges.mdx +++ b/src/content/docs/how-to-work-on-coding-challenges.mdx @@ -389,11 +389,9 @@ If a challenge only has a single place where code changes are needed, please use ```js // TODO: use a different type of loop ---fcc - editable - region--; for (let i = 1; i <= count; i++) { rows.push(padRow(i, count)); } ---fcc - editable - region--; ``` ### Translation of Seed Code Comments From f279f90e38ba269e84b5af87313a632655d6a535 Mon Sep 17 00:00:00 2001 From: jdwilkin4 Date: Fri, 13 Mar 2026 19:36:32 -0700 Subject: [PATCH 15/15] feat: add note to video page --- src/content/docs/how-to-help-with-video-challenges.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/docs/how-to-help-with-video-challenges.mdx b/src/content/docs/how-to-help-with-video-challenges.mdx index 6fc47487..d67fc0ca 100644 --- a/src/content/docs/how-to-help-with-video-challenges.mdx +++ b/src/content/docs/how-to-help-with-video-challenges.mdx @@ -10,6 +10,10 @@ The video challenge pages are created by members of the freeCodeCamp team. YouTu ## Numbering Challenges +:::note +This section only applies to the catalog items which don't use the existing scripts for generating files with MongoDB ids. +::: + Every challenge needs an `id`. If you don't specify one, then MongoDB will create a new random one when it saves the data; however, we don't want it to do that, since we want the challenge ids to be consistent across different environments (staging, production, lots of different developers, etc.). To generate a new one in a shell (assuming MongoDB is running separately):