diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 6ce9ac7ba15..645dd752a4e 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -1757,6 +1757,13 @@
"In this workshop, you will learn how to work with HTML tables by building a table of final exams."
]
},
+ "workshop-greeting-bot": {
+ "title": "Build a Greeting Bot",
+ "intro": [
+ "For this workshop, you will learn how to work with JavaScript fundamentals by building a greeting bot.",
+ "You will learn about variables, let, const, console.log and basic string usage."
+ ]
+ },
"workshop-blog-page": {
"title": "Build a Cat Blog Page",
"intro": [
diff --git a/client/src/pages/learn/front-end-development/workshop-greeting-bot/index.md b/client/src/pages/learn/front-end-development/workshop-greeting-bot/index.md
new file mode 100644
index 00000000000..b82b520e7c9
--- /dev/null
+++ b/client/src/pages/learn/front-end-development/workshop-greeting-bot/index.md
@@ -0,0 +1,9 @@
+---
+title: Introduction to the Build a Greeting Bot
+block: workshop-greeting-bot
+superBlock: front-end-development
+---
+
+## Introduction to the Build a Greeting Bot
+
+This is a test for the new project-based curriculum.
diff --git a/curriculum/challenges/_meta/workshop-greeting-bot/meta.json b/curriculum/challenges/_meta/workshop-greeting-bot/meta.json
new file mode 100644
index 00000000000..ef4345a7d85
--- /dev/null
+++ b/curriculum/challenges/_meta/workshop-greeting-bot/meta.json
@@ -0,0 +1,73 @@
+{
+ "name": "Build a Greeting Bot",
+ "blockType": "workshop",
+ "isUpcomingChange": true,
+ "usesMultifileEditor": true,
+ "hasEditableBoundaries": true,
+ "dashedName": "workshop-greeting-bot",
+ "order": 131,
+ "superBlock": "front-end-development",
+ "challengeOrder": [
+ {
+ "id": "66ad8294a0ad902f1b31b612",
+ "title": "Step 1"
+ },
+ {
+ "id": "66ad8ab945d266383f318cbf",
+ "title": "Step 2"
+ },
+ {
+ "id": "66ad8d150264db3926eccfeb",
+ "title": "Step 3"
+ },
+ {
+ "id": "66ad984e92ce213a66f7e51c",
+ "title": "Step 4"
+ },
+ {
+ "id": "66ad998285df023b23dacdd3",
+ "title": "Step 5"
+ },
+ {
+ "id": "66ad9c633fa26d3c1475eae3",
+ "title": "Step 6"
+ },
+ {
+ "id": "66ada3f46945763dd97f43f8",
+ "title": "Step 7"
+ },
+ {
+ "id": "66adb844118ba74107ce771f",
+ "title": "Step 8"
+ },
+ {
+ "id": "66adbc8a9793d64250f7e609",
+ "title": "Step 9"
+ },
+ {
+ "id": "66adc42868cab843ccee87d9",
+ "title": "Step 10"
+ },
+ {
+ "id": "66adc5919c1853448f119d11",
+ "title": "Step 11"
+ },
+ {
+ "id": "66adc6046acc18453decf577",
+ "title": "Step 12"
+ },
+ {
+ "id": "66adc82170acb1464bd348eb",
+ "title": "Step 13"
+ },
+ {
+ "id": "66adcf383276814776aba3ca",
+ "title": "Step 14"
+ },
+ {
+ "id": "66add47d27763c4862492c8c",
+ "title": "Step 15"
+ }
+ ],
+ "helpCategory": "JavaScript"
+}
\ No newline at end of file
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8294a0ad902f1b31b612.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8294a0ad902f1b31b612.md
new file mode 100644
index 00000000000..8519a568d03
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8294a0ad902f1b31b612.md
@@ -0,0 +1,47 @@
+---
+id: 66ad8294a0ad902f1b31b612
+title: Step 1
+challengeType: 1
+dashedName: step-1
+---
+
+# --description--
+
+In this workshop you will learn how to work with JavaScript fundamentals by building a greeting bot.
+
+In this first step, you will want to output a message to the console from the greeting bot.
+
+Remember that you learned about `console.log()` and strings in the previous lecture videos.
+
+Here is a reminder of how to use `console.log()` with strings:
+
+```js
+console.log('Hello, World!');
+```
+
+Add a `console.log()` statement that outputs the string `"Hi there!"` to the console. Don't forget your quotes around the message!
+
+
+# --hints--
+
+You should have a `console.log()` statement in your code.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log(.*)/);
+```
+
+Your `console` statement should have the message `"Hi there!"`. Don't forget the quotes.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\((['"])Hi\s+there!\1\);?/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8ab945d266383f318cbf.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8ab945d266383f318cbf.md
new file mode 100644
index 00000000000..975ca865811
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8ab945d266383f318cbf.md
@@ -0,0 +1,39 @@
+---
+id: 66ad8ab945d266383f318cbf
+title: Step 2
+challengeType: 1
+dashedName: step-2
+---
+
+# --description--
+
+Now you should see the first message from the bot in the console.
+
+It is time to add a second message from the bot.
+
+Add another `console.log` statement to output the message `"I am excited to talk to you."` to the console.
+
+# --hints--
+
+You should have a `console.log()` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 2);
+```
+
+Your `console` statement should have the message `"I am excited to talk to you."`. Don't forget the quotes.
+
+```js
+assert.match(__helpers.removeJSComments(code), /("|')I\s+am\s+excited\s+to\s+talk\s+to\s+you.\1/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8d150264db3926eccfeb.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8d150264db3926eccfeb.md
new file mode 100644
index 00000000000..bd2fb97aa7c
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad8d150264db3926eccfeb.md
@@ -0,0 +1,52 @@
+---
+id: 66ad8d150264db3926eccfeb
+title: Step 3
+challengeType: 1
+dashedName: step-3
+---
+
+# --description--
+
+In the previous lecture videos, you learned about the `let` keyword and how to declare variables in JavaScript.
+
+Here is a reminder of how to declare a variable using the `let` keyword:
+
+```js
+let greeting;
+```
+
+Use the `let` keyword to declare a variable called `bot`.
+
+**NOTE**: You are using `let` here because later on in the workshop, you will be changing the value of the `bot` variable.
+
+# --hints--
+
+You should have the `let` keyword in your code.
+
+```js
+assert.match(__helpers.removeJSComments(code), /let/g);
+```
+
+You should declare a variable called `bot`.
+
+```js
+assert.isNotNull(bot);
+```
+
+You should use the `let` keyword to declare the variable.
+
+```js
+assert.match(__helpers.removeJSComments(code), /let\s+bot;?/g);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad984e92ce213a66f7e51c.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad984e92ce213a66f7e51c.md
new file mode 100644
index 00000000000..3454cd75a65
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad984e92ce213a66f7e51c.md
@@ -0,0 +1,47 @@
+---
+id: 66ad984e92ce213a66f7e51c
+title: Step 4
+challengeType: 1
+dashedName: step-4
+---
+
+# --description--
+
+When you need to declare variables with multiple words, you can use the camelCase naming convention.
+
+When using `camelCase`, the first word is all lowercase and the first letter of each subsequent word is capitalized.
+
+Here is an example:
+
+```js
+let thisIsCamelCase;
+```
+
+Use `let` to declare a variable named `botLocation`.
+
+# --hints--
+
+You should use `let` to declare the variable.
+
+```js
+assert.lengthOf(code.match(/let/g), 2);
+```
+
+Your variable should be named `botLocation`.
+
+```js
+assert.isNotNull(botLocation);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+let bot;
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad998285df023b23dacdd3.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad998285df023b23dacdd3.md
new file mode 100644
index 00000000000..63a69fad407
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad998285df023b23dacdd3.md
@@ -0,0 +1,62 @@
+---
+id: 66ad998285df023b23dacdd3
+title: Step 5
+challengeType: 1
+dashedName: step-5
+---
+
+# --description--
+
+Now, it is time to assign some values to your `bot` and `botLocation` variables.
+
+In the previous lecture videos, you learned how to assign values to variables like this:
+
+```js
+variableName = "Here is the value";
+```
+
+Remember that what is on the right side of the assignment operator `=` is the value that you are assigning to the variable on the left side.
+
+Assign the string `"teacherBot"` to the `bot` variable and the string `"the universe"` to the `botLocation` variable.
+
+# --hints--
+
+You should assign a string to your `bot` variable.
+
+```js
+assert.isString(bot);
+```
+
+Your `bot` variable should be assigned the string `"teacherBot"`.
+
+```js
+assert.equal(bot, "teacherBot");
+```
+
+You should assign a string to your `botLocation` variable.
+
+```js
+assert.isString(botLocation);
+```
+
+Your `botLocation` variable should be assigned the string `"the universe"`.
+
+```js
+assert.equal(botLocation, "the universe");
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad9c633fa26d3c1475eae3.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad9c633fa26d3c1475eae3.md
new file mode 100644
index 00000000000..917aebbed25
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ad9c633fa26d3c1475eae3.md
@@ -0,0 +1,45 @@
+---
+id: 66ad9c633fa26d3c1475eae3
+title: Step 6
+challengeType: 1
+dashedName: step-6
+---
+
+# --description--
+
+Now, it is time to add another message from the bot.
+
+Add another `console` statement to the code that logs the message `"Allow me to introduce myself."`.
+
+# --hints--
+
+You should have a `console` statement.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 3);
+```
+
+Your `console` statement should have the message `"Allow me to introduce myself."`. Don't forget the quotes.
+
+```js
+assert.match(__helpers.removeJSComments(code), /("|')Allow\s+me\s+to\s+introduce\s+myself.\1/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ada3f46945763dd97f43f8.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ada3f46945763dd97f43f8.md
new file mode 100644
index 00000000000..e2898696f05
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66ada3f46945763dd97f43f8.md
@@ -0,0 +1,82 @@
+---
+id: 66ada3f46945763dd97f43f8
+title: Step 7
+challengeType: 1
+dashedName: step-7
+---
+
+# --description--
+
+Earlier, you created the `bot` and `botLocation` variables. Now, you will use them to output new messages to the console.
+
+In the lecture videos, you learned how to work with string concatenation using the `+` operator to concatenate strings together like this:
+
+```js
+let firstName = "John";
+
+// result: "Hello, my name is John."
+"Hello, my name is " + firstName + ".";
+```
+
+Remember that you need to be mindful of spaces when concatenating strings with variables.
+
+Create a variable called `botIntroduction`.
+
+Then use string concatenation with the `+` operator to join the string `"My name is "` followed by the `bot` variable followed by a period (`.`).
+
+Assign this value to the `botIntroduction` variable.
+
+Then, log the `botIntroduction` variable to the console.
+
+# --hints--
+
+You should have a variable called `botIntroduction`.
+
+```js
+assert.isNotNull(botIntroduction);
+```
+
+Your `botIntroduction` variable should hold the value of a string.
+
+```js
+assert.isString(botIntroduction);
+```
+
+You should use string concatenation with the `+` operator to join the string `"My name is "` with the `bot` variable followed by a period (`.`). Be mindful of spaces.
+
+```js
+assert.equal(botIntroduction, "My name is teacherBot.");
+```
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 4);
+```
+
+Your `console` statement should output the `botIntroduction` variable.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*botIntroduction\s*\);?/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adb844118ba74107ce771f.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adb844118ba74107ce771f.md
new file mode 100644
index 00000000000..dc880434a18
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adb844118ba74107ce771f.md
@@ -0,0 +1,74 @@
+---
+id: 66adb844118ba74107ce771f
+title: Step 8
+challengeType: 1
+dashedName: step-8
+---
+
+# --description--
+
+The next message from the bot will concern the bot's location.
+
+Create a variable called `botLocationSentence`.
+
+Then use string concatenation with the `+` operator to join the string `"I live in "` with the `botLocation` variable followed by a period (`.`).
+
+Assign this value to the `botLocationSentence` variable.
+
+Then, log the value of `botLocationSentence` to the console.
+
+# --hints--
+
+You should have a `botLocationSentence` variable.
+
+```js
+assert.isNotNull(botLocationSentence);
+```
+
+Your `botLocationSentence` variable should hold the value of a string.
+
+```js
+assert.isString(botLocationSentence);
+```
+
+You should use string concatenation with the `+` operator to join the string `"I live in "` with the `botLocation` variable followed by a period (`.`). Be mindful of spaces.
+
+```js
+assert.equal(botLocationSentence, "I live in the universe.");
+```
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 5);
+```
+
+Your `console` statement should output the `botLocationSentence` variable.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*botLocationSentence\s*\)/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adbc8a9793d64250f7e609.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adbc8a9793d64250f7e609.md
new file mode 100644
index 00000000000..e7791b1876f
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adbc8a9793d64250f7e609.md
@@ -0,0 +1,55 @@
+---
+id: 66adbc8a9793d64250f7e609
+title: Step 9
+challengeType: 1
+dashedName: step-9
+---
+
+# --description--
+
+In the previous lecture videos, you learned how to reassign values to variables like this:
+
+```js
+// name holds the value "John"
+let name = "John";
+
+// name now holds the value "Jane"
+name = "Jane";
+```
+
+Using reassignment, assign the string `"professorBot"` to the `bot` variable.
+
+# --hints--
+
+You should assign the string `"professorBot"` to the `bot` variable.
+
+```js
+assert.strictEqual(bot, "professorBot");
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc42868cab843ccee87d9.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc42868cab843ccee87d9.md
new file mode 100644
index 00000000000..be237a28b09
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc42868cab843ccee87d9.md
@@ -0,0 +1,79 @@
+---
+id: 66adc42868cab843ccee87d9
+title: Step 10
+challengeType: 1
+dashedName: step-10
+---
+
+# --description--
+
+Now it is time to see the new `bot` value.
+
+Start by creating a new variable called `nicknameIntroduction`.
+
+Use string concatenation to join the string `"My nickname is "` with the `bot` variable followed by a period (`.`).
+
+Assign the resulting string to the `nicknameIntroduction` variable.
+
+Then, log the value of `nicknameIntroduction` to the console.
+
+# --hints--
+
+You should have a variable called `nicknameIntroduction`.
+
+```js
+assert.isNotNull(nicknameIntroduction);
+```
+
+Your `nicknameIntroduction` variable should be a string.
+
+```js
+assert.isString(nicknameIntroduction);
+```
+
+You should use string concatenation to join the string `"My nickname is "` with the `bot` variable followed by a period (`.`). Be mindful of the spaces.
+
+```js
+assert.strictEqual(nicknameIntroduction, "My nickname is professorBot.");
+```
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 6);
+```
+
+You should log the value of `nicknameIntroduction` to the console.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*nicknameIntroduction\s*\)/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc5919c1853448f119d11.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc5919c1853448f119d11.md
new file mode 100644
index 00000000000..a0a08de4ada
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc5919c1853448f119d11.md
@@ -0,0 +1,52 @@
+---
+id: 66adc5919c1853448f119d11
+title: Step 11
+challengeType: 1
+dashedName: step-11
+---
+
+# --description--
+
+Now it looks like the bot wants to change their nickname.
+
+Using reassignment, assign the string `"awesomeTeacherBot"` to the `bot` variable.
+
+# --hints--
+
+You should assign the string `"awesomeTeacherBot"` to the `bot` variable.
+
+```js
+assert.strictEqual(bot, "awesomeTeacherBot");
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc6046acc18453decf577.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc6046acc18453decf577.md
new file mode 100644
index 00000000000..1e6dffc7d10
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc6046acc18453decf577.md
@@ -0,0 +1,84 @@
+---
+id: 66adc6046acc18453decf577
+title: Step 12
+challengeType: 1
+dashedName: step-12
+---
+
+# --description--
+
+To see the bot's new nickname, you will need to log a new message to the console.
+
+Create a new variable called `newNicknameGreeting`.
+
+Then use string concatenation to join the string `"I love my nickname but I wish people would call me "` with the `bot` variable followed by a period.
+
+Assign the result to the `newNicknameGreeting` variable.
+
+Then, log the value of `newNicknameGreeting` to the console.
+
+# --hints--
+
+You should have a variable called `newNicknameGreeting`.
+
+```js
+assert.isNotNull(newNicknameGreeting);
+```
+
+Your `newNicknameGreeting` variable should be a string.
+
+```js
+assert.isString(newNicknameGreeting);
+```
+
+You should use string concatenation to join the string `"I love my nickname but I wish people would call me "` with the `bot` variable followed by a period.
+
+```js
+assert.strictEqual(newNicknameGreeting, "I love my nickname but I wish people would call me awesomeTeacherBot.");
+```
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 7);
+```
+
+You should log the value of `newNicknameGreeting` to the console.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*newNicknameGreeting\s*\)/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+bot = "awesomeTeacherBot";
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc82170acb1464bd348eb.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc82170acb1464bd348eb.md
new file mode 100644
index 00000000000..28c02f8016c
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adc82170acb1464bd348eb.md
@@ -0,0 +1,69 @@
+---
+id: 66adc82170acb1464bd348eb
+title: Step 13
+challengeType: 1
+dashedName: step-13
+---
+
+# --description--
+
+The last few messages from the bot will focus on the bot's favorite subject.
+
+Start by creating a new variable called `favoriteSubject` and assign it the string `"Computer Science"`.
+
+# --hints--
+
+You should have a variable called `favoriteSubject`.
+
+```js
+assert.isNotNull(favoriteSubject);
+```
+
+Your `favoriteSubject` variable should be a string.
+
+```js
+assert.isString(favoriteSubject);
+```
+
+You should assign the string `"Computer Science"` to the `favoriteSubject` variable.
+
+```js
+assert.strictEqual(favoriteSubject, "Computer Science");
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+bot = "awesomeTeacherBot";
+
+const newNicknameGreeting = "I love my nickname but I wish people would call me " + bot + ".";
+console.log(newNicknameGreeting);
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adcf383276814776aba3ca.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adcf383276814776aba3ca.md
new file mode 100644
index 00000000000..1b4e61f22e0
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66adcf383276814776aba3ca.md
@@ -0,0 +1,87 @@
+---
+id: 66adcf383276814776aba3ca
+title: Step 14
+challengeType: 1
+dashedName: step-14
+---
+
+# --description--
+
+Next, create a variable called `favoriteSubjectSentence`.
+
+Use string concatenation to join the string `"My favorite subject is "` with the `favoriteSubject` variable followed by a period.
+
+Assign the result to the `favoriteSubjectSentence` variable.
+
+Then, log the value of `favoriteSubjectSentence` to the `console`.
+
+# --hints--
+
+You should have a variable called `favoriteSubjectSentence`.
+
+```js
+assert.isNotNull(favoriteSubjectSentence);
+```
+
+Your `favoriteSubjectSentence` variable should be a string.
+
+```js
+assert.isString(favoriteSubjectSentence);
+```
+
+You should use string concatenation to join the string `"My favorite subject is "` with the `favoriteSubject` variable followed by a period. Be mindful of the spaces.
+
+```js
+assert.strictEqual(favoriteSubjectSentence, "My favorite subject is Computer Science.");
+```
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 8);
+```
+
+You should log the value of `favoriteSubjectSentence` to the `console`.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*favoriteSubjectSentence\s*\)/);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+bot = "awesomeTeacherBot";
+
+const newNicknameGreeting = "I love my nickname but I wish people would call me " + bot + ".";
+console.log(newNicknameGreeting);
+
+const favoriteSubject = "Computer Science";
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
diff --git a/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66add47d27763c4862492c8c.md b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66add47d27763c4862492c8c.md
new file mode 100644
index 00000000000..57c7161b0df
--- /dev/null
+++ b/curriculum/challenges/english/25-front-end-development/workshop-greeting-bot/66add47d27763c4862492c8c.md
@@ -0,0 +1,107 @@
+---
+id: 66add47d27763c4862492c8c
+title: Step 15
+challengeType: 1
+dashedName: step-15
+---
+
+# --description--
+
+For the final step, you will log the bot's message of `"Well, it was nice to talk to you. Have a nice day!"` to the console.
+
+And with that, your greeting bot is complete!
+
+# --hints--
+
+You should have a `console` statement in your code.
+
+```js
+assert.lengthOf(__helpers.removeJSComments(code).match(/console\.log(.*)/g), 9);
+```
+
+Your `console` statement should log the string `"Well, it was nice to talk to you. Have a nice day!"`.
+
+```js
+assert.match(__helpers.removeJSComments(code), /console\.log\s*\(\s*["']Well\s*,\s*it\s*was\s*nice\s*to\s*talk\s*to\s*you\s*\.\s*Have\s*a\s*nice\s*day\s*!["']\s*\)\s*/
+);
+```
+
+# --seed--
+
+## --seed-contents--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+bot = "awesomeTeacherBot";
+
+const newNicknameGreeting = "I love my nickname but I wish people would call me " + bot + ".";
+console.log(newNicknameGreeting);
+
+const favoriteSubject = "Computer Science";
+
+const favoriteSubjectSentence = "My favorite subject is " + favoriteSubject + ".";
+console.log(favoriteSubjectSentence);
+
+--fcc-editable-region--
+
+--fcc-editable-region--
+```
+
+# --solutions--
+
+```js
+console.log("Hi there!");
+console.log("I am excited to talk to you.");
+
+let bot;
+let botLocation;
+
+bot = "teacherBot";
+botLocation = "the universe";
+
+console.log("Allow me to introduce myself.");
+
+const botIntroduction = "My name is " + bot + ".";
+console.log(botIntroduction);
+
+const botLocationSentence = "I live in " + botLocation + ".";
+console.log(botLocationSentence);
+
+bot = "professorBot";
+
+const nicknameIntroduction = "My nickname is " + bot + ".";
+console.log(nicknameIntroduction);
+
+bot = "awesomeTeacherBot";
+
+const newNicknameGreeting = "I love my nickname but I wish people would call me " + bot + ".";
+console.log(newNicknameGreeting);
+
+const favoriteSubject = "Computer Science";
+
+const favoriteSubjectSentence = "My favorite subject is " + favoriteSubject + ".";
+console.log(favoriteSubjectSentence);
+
+console.log("Well, it was nice to talk to you. Have a nice day!");
+```