diff --git a/content/en/blocks/wordle/index.md b/content/en/blocks/wordle/index.md
new file mode 100644
index 000000000..0d7e493cc
--- /dev/null
+++ b/content/en/blocks/wordle/index.md
@@ -0,0 +1,7 @@
++++
+title="Play Wordle"
+headless="true"
+time= 5
++++
+
+
diff --git a/content/en/node/_index.md b/content/en/node/_index.md
deleted file mode 100644
index 87c2b0797..000000000
--- a/content/en/node/_index.md
+++ /dev/null
@@ -1,8 +0,0 @@
-+++
-title = 'Node'
-description = 'The plan for Node is coming soon'
-layout = 'module'
-emoji= '๐'
-menu = ['syllabus']
-weight='7'
-+++
diff --git a/content/en/node/blocks/block1/index.md b/content/en/node/blocks/block1/index.md
deleted file mode 100644
index 02e527d24..000000000
--- a/content/en/node/blocks/block1/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
-+++
-title = 'block1'
-headless = true
-time = 30
-facilitation = false
-emoji= '๐งฉ'
-[objectives]
- 1='Use the Teach Tech Together guide to construct your objectives'
- 2='Limit the objectives to 3-5 items'
- 3='Write objectives you can measure'
-+++
diff --git a/content/en/node/blocks/block2/index.md b/content/en/node/blocks/block2/index.md
deleted file mode 100644
index 6daf52e7f..000000000
--- a/content/en/node/blocks/block2/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
-+++
-title = 'block2'
-headless = true
-time = 30
-facilitation = false
-emoji= '๐งฉ'
-[objectives]
- 1='Use the Teach Tech Together guide to construct your objectives'
- 2='Limit the objectives to 3-5 items'
- 3='Write objectives you can measure'
-+++
diff --git a/content/en/node/blocks/block3/index.md b/content/en/node/blocks/block3/index.md
deleted file mode 100644
index fcdb37db2..000000000
--- a/content/en/node/blocks/block3/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
-+++
-title = 'block3'
-headless = true
-time = 30
-facilitation = false
-emoji= '๐งฉ'
-[objectives]
- 1='Use the Teach Tech Together guide to construct your objectives'
- 2='Limit the objectives to 3-5 items'
- 3='Write objectives you can measure'
-+++
diff --git a/content/en/node/prep/index.md b/content/en/node/prep/index.md
deleted file mode 100644
index cafe4b5d2..000000000
--- a/content/en/node/prep/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
-+++
-title = 'prep'
-description = 'prep description'
-layout = 'prep'
-emoji= '๐'
-menu_level = ['module']
-weight = 1
-backlog= 'Module-Node'
-+++
-
-
diff --git a/content/en/node/product/_index.md b/content/en/node/product/_index.md
deleted file mode 100644
index faa9eec9d..000000000
--- a/content/en/node/product/_index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-+++
-title = 'Product'
-description = 'Product description'
-layout = 'product'
-emoji= '๐'
-menu_level = ['module']
-+++
-
-
diff --git a/content/en/node/product/build/index.md b/content/en/node/product/build/index.md
deleted file mode 100644
index 65c097a5d..000000000
--- a/content/en/node/product/build/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-+++
-title = 'build'
-description = 'build description'
-layout = 'build'
-menu_level = ['product']
-emoji= '๐'
-weight = 2
-+++
-
-
diff --git a/content/en/node/product/plan/index.md b/content/en/node/product/plan/index.md
deleted file mode 100644
index 2d851db49..000000000
--- a/content/en/node/product/plan/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-+++
-title = 'plan'
-description = 'plan description'
-layout = 'plan'
-menu_level = ['product']
-emoji= '๐'
-weight = 1
-+++
-
-
diff --git a/content/en/node/product/ship/index.md b/content/en/node/product/ship/index.md
deleted file mode 100644
index 19a8f9b4a..000000000
--- a/content/en/node/product/ship/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-+++
-title = 'ship'
-description = 'ship description'
-layout = 'ship'
-menu_level = ['product']
-emoji= '๐'
-weight = 4
-+++
-
-
diff --git a/content/en/node/product/test/index.md b/content/en/node/product/test/index.md
deleted file mode 100644
index bcfac5ab1..000000000
--- a/content/en/node/product/test/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-+++
-title = 'test'
-description = 'test description'
-layout = 'test'
-menu_level = ['product']
-emoji= '๐'
-weight = 3
-+++
-
-
diff --git a/content/en/node/sprints/1/day-plan/index.md b/content/en/node/sprints/1/day-plan/index.md
deleted file mode 100644
index aae81f706..000000000
--- a/content/en/node/sprints/1/day-plan/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'day-plan'
-layout = 'day-plan'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 3
-backlog= 'Module-Node'
-backlog_filter= 'Week 1'
-[[blocks]]
-name="Non-Verbal Communication"
-src="https://cyf-pd.netlify.app/blocks/non-verbal-communication/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/1/prep/index.md b/content/en/node/sprints/1/prep/index.md
deleted file mode 100644
index f2d994b47..000000000
--- a/content/en/node/sprints/1/prep/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'prep'
-layout = 'prep'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 1
-backlog= 'Module-Node'
-backlog_filter= 'Week 1'
-[[blocks]]
-name="Prep Non-Verbal Communication"
-src="https://cyf-pd.netlify.app/blocks/prep-non-verbal-communication/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/2/day-plan/index.md b/content/en/node/sprints/2/day-plan/index.md
deleted file mode 100644
index f9ea87102..000000000
--- a/content/en/node/sprints/2/day-plan/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'day-plan'
-layout = 'day-plan'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 3
-backlog= 'Module-Node'
-backlog_filter= 'Week 2'
-[[blocks]]
-name="Difficult Workplace Conversations"
-src="https://cyf-pd.netlify.app/blocks/difficult-workplace-conversations/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/2/prep/index.md b/content/en/node/sprints/2/prep/index.md
deleted file mode 100644
index 2093f6428..000000000
--- a/content/en/node/sprints/2/prep/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'prep'
-layout = 'prep'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 1
-backlog= 'Module-Node'
-backlog_filter= 'Week 2'
-[[blocks]]
-name="Prep Difficult Workplace Conversations"
-src="https://cyf-pd.netlify.app/blocks/prep-difficult-workplace-conversations/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/3/day-plan/index.md b/content/en/node/sprints/3/day-plan/index.md
deleted file mode 100644
index c79983af1..000000000
--- a/content/en/node/sprints/3/day-plan/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'day-plan'
-layout = 'day-plan'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 3
-backlog= 'Module-Node'
-backlog_filter= 'Week 3'
-[[blocks]]
-name="Value And Work Not Done"
-src="https://cyf-pd.netlify.app/blocks/value-and-work-not-done/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/3/prep/index.md b/content/en/node/sprints/3/prep/index.md
deleted file mode 100644
index 5aaa033e2..000000000
--- a/content/en/node/sprints/3/prep/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-+++
-title = 'prep'
-layout = 'prep'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 1
-backlog= 'Module-Node'
-backlog_filter= 'Week 3'
-[[blocks]]
-name="Prep Value And Work Not Done"
-src="https://cyf-pd.netlify.app/blocks/prep-value-and-work-not-done/readme/"
-+++
-
-
diff --git a/content/en/node/sprints/4/day-plan/index.md b/content/en/node/sprints/4/day-plan/index.md
deleted file mode 100644
index 6a225009b..000000000
--- a/content/en/node/sprints/4/day-plan/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
-+++
-title = 'day-plan'
-layout = 'day-plan'
-emoji= '๐'
-menu_level = ['sprint']
-weight = 3
-backlog= 'Module-Node'
-backlog_filter= 'Week 4'
-[[blocks]]
-name="Sell Yourself"
-src="https://cyf-pd.netlify.app/blocks/sell-yourself/readme/"
-[[blocks]]
-name="Progress check-in"
-src="https://github.com/CodeYourFuture/Module-Node/issues/128"
-time="15"
-+++
diff --git a/content/en/servers/_index.md b/content/en/servers/_index.md
new file mode 100644
index 000000000..b72137692
--- /dev/null
+++ b/content/en/servers/_index.md
@@ -0,0 +1,8 @@
++++
+title = 'Servers'
+description = 'Write server-side JavaScript with Node.js; develop CRUD applications with Express.js; write and test APIs with Postman'
+layout = 'module'
+emoji= '๐'
+menu = ['syllabus']
+weight='7'
++++
diff --git a/content/en/servers/blocks/building-the-server/index.md b/content/en/servers/blocks/building-the-server/index.md
new file mode 100644
index 000000000..f60822302
--- /dev/null
+++ b/content/en/servers/blocks/building-the-server/index.md
@@ -0,0 +1,90 @@
++++
+title = 'Building the server'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Import the Express package in a file'
++++
+
+The first thing we need to do is build our server. You will often need to build a server when writing back-end code. You can write a server in plain JavaScript, but Express is simpler to work with.
+
+#### 1. Create a `server.js` file
+
+Let's build our server! In your project, create a new file called `server.js`. This is where all our server code is going to live.
+
+```zsh
+touch server.js
+```
+
+#### 2. `import` the `express` library
+
+We just installed Express, but we need to make sure it is included in this file specifically so we can use its methods. In Node.js, when you want to use Express in another file, you must `import` it.
+
+To require Express, write the following inside `server.js`:
+
+```js
+import express from "express";
+```
+
+{{}}
+Sometimes you will see `require` instead of `import`. This is because `require` is the old (CJS) way of importing packages in Node.js and not all environments (like runkit) are updated yet. If you see `require` in the curriculum, probably use `import` instead.
+
+CJS syntax: `const express = require("express");`
+MJS syntax: `import express from "express";`
+{{}}
+
+#### 3. Initialise the server
+
+To initialise our server, we need to call the `express()` function. This will create an Express application for us to work with.
+
+Add the second line of code to your `server.js` file:
+
+```js
+const express = require("express");
+const app = express();
+```
+
+#### 4. Start 'listening' for potential requests
+
+One more step left, we need to set a **port** for our server to listen to. Think of a port as a door number: any requests that come to the server will come via that door. Setting a port will allow us to find where our server is running.
+
+We use the **`app.listen`** method to do this. This method takes two arguments: a **port** and a **callback function** telling it what to do once the server is running.
+
+> Need clarification? Read more about the `app.listen` method in the [Express documentation](http://expressjs.com/en/4x/api.html#app.listen).
+
+We're going to run our server on port `3000`, and add a `console.log` in the callback function. Update your `server.js` file, calling the `app.listen` method:
+
+```runkit
+const express = require("express");
+const app = express();
+
+app.listen(3000, () => {
+ console.log("Server is listening on port 3000. Ready to accept requests!");
+});
+```
+
+#### 5. Switch the server on!
+
+You've built your server, but it isn't running yet. We need to run a command in
+the terminal to do this. We are going to use the `node` keyword to run the
+server file.
+
+Type the following command in your terminal:
+
+```sh
+node server.js
+```
+
+If you see this, congratulations! You have built yourself a server!
+
+![success](https://raw.githubusercontent.com/node-girls/workshop-cms/master/readme-images/step2-server02.png)
+
+#### 6. npm script
+
+To exit the running the server, type `ctrl + c`. Instead of running the server with `node server.js` everytime, we can create an alias for it in `package.json`.
+
+Under the `scripts` property, add `start: node server.js`. We can now run our server using `npm start` which will be an alias (a shortcut) to `node server.js`.
+
+Go to the terminal and type `npm start` and make sure that the server still runs.
diff --git a/content/en/servers/blocks/communicating-with-the-server/index.md b/content/en/servers/blocks/communicating-with-the-server/index.md
new file mode 100644
index 000000000..07227166b
--- /dev/null
+++ b/content/en/servers/blocks/communicating-with-the-server/index.md
@@ -0,0 +1,92 @@
++++
+title = 'Communicating with the server'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Define a handler function'
+ 2='Inspect the request and response objects in console'
+ 3='Inspect the request and response objects in Postman'
++++
+
+Now that we've built the server, we need to communicate with it. We are going to control the server with **handler functions**.
+
+#### What is a handler function?
+
+When a request reaches the server, we need a way of responding to it. In comes the handler function. The handler function receives requests and handles them, hence the name.
+
+The handler function is always called with a `request` and `response` object. The response object is what gets sent back to the client. It contains the information that gets displayed in the web page. You can decide what to send back in your response.
+
+#### What does a handler function look like in Express?
+
+The `get()` [method](http://expressjs.com/en/api.html#app.get.method) is one of the methods used to define a handler function in Express. It takes two parameters: the **endpoint** at which to trigger an action, and the handler function that tells it exactly what to do.
+
+Here's an example:
+
+```js
+// req is the Request object, res is the Response object
+// (these are variable names, they can be anything but it's a convention to call them req and res)
+app.get("/", (req, res) => {
+ res.send("Hello World!");
+});
+```
+
+Here, we are telling our server to respond with "Hello World!" when someone tries to access the webpage.
+
+#### 1. Create your own handler function
+
+Add a handler handler function to send back a message to the client. To do that, use the Express `send()` [method](http://expressjs.com/en/api.html#res.send). This will update the response object with the message.
+
+Update your handler function:
+
+```runkit
+const express = require("express");
+const app = express();
+
+app.get("/", (req, res) => {
+ res.send("Yay Node!");
+});
+
+app.listen(3000, () => {
+ console.log("Server is listening on port 3000. Ready to accept requests!");
+});
+```
+
+`console.log` the `request` object inside the handler function.
+
+1. Restart your server
+1. Send the request again with Postman
+1. Go to your terminal to see what it looks like.
+
+You should see a lot of data come through!
+
+#### 2. Check it out in Postman
+
+Quit your server in the terminal with `ctrl + c`. Then restart it to run your new changes.
+
+```sh
+node server.js
+```
+
+1. Open Postman
+1. Send a `GET` request to `http://localhost:3000`.
+
+If you see your message in Postman, congratulations! You just sent your first response from the server.
+
+#### Checkpoint
+
+Do you understand all these terms? You should be able to see examples of them in Postman
+
+```objectives
+- [ ] Client
+- [ ] Server
+- [ ] Front-end
+- [ ] Back-end
+- [ ] Full stack developer
+- [ ] Request
+- [ ] Response
+- [ ] HTTP
+- [ ] HTTP Response Codes
+- [ ] HTTP Request Methods (or Verbs)
+```
diff --git a/content/en/servers/blocks/crud-2/index.md b/content/en/servers/blocks/crud-2/index.md
new file mode 100644
index 000000000..7b2bed53e
--- /dev/null
+++ b/content/en/servers/blocks/crud-2/index.md
@@ -0,0 +1,30 @@
++++
+title = 'CRUD Again'
+headless = true
+time = 10
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Define CRUD'
++++
+
+We are building a CRUD API. CRUD stands for **C**reate, **R**etrieve, **U**pdate, **D**elete. If you think about it, this is what most applications do:
+
+โจ **C**reate some "resources"
+๐ **R**etrieve them (GET them)
+๐จ **U**pdate them
+๐๏ธ **D**elete them
+
+### ๐ฏ Goal
+
+Our API will manage movie data. It will:
+
+โจ **C**reate a new movie,
+๐ **R**etrieve a list of movies or a single movie
+๐จ **U**pdate a movie
+
+We will build this endpoint:
+
+1. `PUT /movies/:movieId should update a movie (that matches the passed movieId)`
+
+๐ You should already have a project using the [Node-Starter-Kit](https://github.com/CodeYourFuture/Node-Starter-Kit). If not, do last week's prep before you go on.
diff --git a/content/en/servers/blocks/crud-challenges/index.md b/content/en/servers/blocks/crud-challenges/index.md
new file mode 100644
index 000000000..06fb56c0d
--- /dev/null
+++ b/content/en/servers/blocks/crud-challenges/index.md
@@ -0,0 +1,19 @@
++++
+title = '๐ช๐พ CRUD Challenges'
+headless = true
+time = 45
+facilitation = false
+emoji= '๐งฉ'
++++
+
+### CHALLENGE 1:
+
+**Return** the old version of the object you updated as well as the new value in the response
+
+### CHALLENGE 2:
+
+**Validate** the request body to make sure the ID can't be updated and that users can't add additional fields
+
+### CHALLENGE 3:
+
+**Persist** your changes to file so that you are able to return your updated values even after you restart the server
diff --git a/content/en/servers/blocks/crud/index.md b/content/en/servers/blocks/crud/index.md
new file mode 100644
index 000000000..e8a3ee62c
--- /dev/null
+++ b/content/en/servers/blocks/crud/index.md
@@ -0,0 +1,31 @@
++++
+title = 'CRUD'
+headless = true
+time = 10
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Define CRUD'
++++
+
+We will build a CRUD API. CRUD stands for **C**reate, **R**etrieve, **U**pdate, **D**elete. If you think about it, this is what most applications do:
+
+โจ **C**reate some "resources"
+๐ **R**etrieve them (GET them)
+๐จ **U**pdate them
+๐๏ธ **D**elete them
+
+### ๐ฏ Goal
+
+Our API will manage movie data. It will:
+
+โจ **C**reate a new movie,
+๐ **R**etrieve a list of movies or a single movie
+
+We will build these endpoints:
+
+1. `GET /movies should return all the movies`
+1. `GET /movies/:movieId should return a single movie (that matches the passed movieId)`
+1. `POST /movies should save a new movie`
+
+๐ Fork the [Node-Starter-Kit](https://github.com/CodeYourFuture/Node-Starter-Kit) repo and clone it to your computer. Then run `npm install` to install the dependencies.
diff --git a/content/en/servers/blocks/get-single/index.md b/content/en/servers/blocks/get-single/index.md
new file mode 100644
index 000000000..ff555b524
--- /dev/null
+++ b/content/en/servers/blocks/get-single/index.md
@@ -0,0 +1,32 @@
++++
+title = '๐ GET single movie'
+headless = true
+time = 10
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Use GET to match a specific query parameter'
++++
+
+> `GET /movies/:movieId should return a single movie (that matches the passed movieId)`
+
+Sometimes, we do not want to list all the information in one request, maybe we only want to get the information related to a single movie. Imagine a page to display the details of one movie. We'd call the server, get all movies, then filter the one we need client-side. It would be more effective to tell the server to just return the one movie we are interested in.
+
+We will now add a new endpoint to return only a single movie GET /movies/:movieId. In this case, movieId will tell us what movie we can return. The call will be `GET /movies/10` and that will return the movie with that has `movieId: "10"`.
+
+This endpoint has something different. The endpoint `/movies/:movieId` has a dynamic part. The `movieId` will vary depending on what the client sends.
+
+In `server.js`, create a `GET /movies/:movieId` endpoint that returns a single movie. The movieId will be passed as a parameter in the URL.
+
+```js
+app.get("/movies/:movieId", (req, res) => {
+ const movieId = req.params.movieId;
+ const movie = moviesData.find((movie) => movie.movieId === movieId);
+ res.send(movie);
+});
+```
+
+#### ๐งช Run and test
+
+1. Save your changes
+1. Make a GET request to `http://localhost:3000/movies/10`
diff --git a/content/en/servers/blocks/get/index.md b/content/en/servers/blocks/get/index.md
new file mode 100644
index 000000000..b8a2c654e
--- /dev/null
+++ b/content/en/servers/blocks/get/index.md
@@ -0,0 +1,56 @@
++++
+title = '๐ GET'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Process a GET request using Express and Node to retrieve data from memory'
++++
+
+> `GET /movies should return all the movies`
+
+In `server.js`, create a `GET /movies` endpoint that returns all the movies (see below for some sample data).
+
+```js
+app.get("/movies", (req, res) => {
+ res.send(moviesData);
+});
+```
+
+
+Copy sample movie data
+
+```js
+const movies = [
+ {
+ id: 1,
+ title: "The Godfather",
+ certificate: "18",
+ yearOfRelease: 1972,
+ director: "Francis Ford Coppola",
+ },
+ {
+ id: 2,
+ title: "The Shawshank Redemption",
+ certificate: "15",
+ yearOfRelease: 1994,
+ director: "Frank Darabont",
+ },
+ {
+ id: 3,
+ title: "Schindler's List",
+ certificate: "15",
+ yearOfRelease: 1993,
+ director: "Steven Spielberg",
+ },
+];
+```
+
+
+
+#### ๐งช Run and test
+
+1. `npm run dev`
+1. Open Postman
+1. Make a GET request to `http://localhost:3000/movies`
diff --git a/content/en/servers/blocks/intro-to-express/index.md b/content/en/servers/blocks/intro-to-express/index.md
new file mode 100644
index 000000000..e75a81784
--- /dev/null
+++ b/content/en/servers/blocks/intro-to-express/index.md
@@ -0,0 +1,89 @@
++++
+title = 'Introduction to Express'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Create an Express server'
++++
+
+We have already learned about the **[Node.js](https://nodejs.org/en/)** runtime environment and how it allows us to run JavaScript code outside of the browser. We have also learned about the **[Node Package Manager (npm)](https://www.npmjs.com/)** and how it allows us to download and use other people's code in our own projects.
+
+Now we will learn about **[Express](https://expressjs.com/)**, a Node.js framework that helps us to build web servers and APIs.
+
+## ๐๐ผโโ๏ธ What is a web server?
+
+A web server is software that accepts requests for web pages, assets, APIs, and other network resources from client programs like web browsers. When a browser requests a web page, the server finds the desired content and returns the appropriate response.
+
+### ๐บ๏ธ Explore the web server
+
+Let's investigate a web server made in Node.
+
+```runkit
+//Load the 'express' library to easily handle HTTP conversations:
+const express = require("express");
+
+const app = express();
+
+//Register some handlers for different routes.
+app.get("/", (request, response) => {
+ response.send("Hello CYF");
+});
+app.get("/two", (request, response) => {
+ response.send("Another route");
+});
+app.get("/numbers", (request, response) => {
+ const someData = [1, 2, 3];
+ response.json(someData);
+});
+//Tell the server to start listening for requests.
+app.listen(3000);
+```
+
+{{}}
+
+Investigate the different parts of [the Node App](https://runkit.com/sallymcgrath/cyf-simple-server)
+
+- `require` on Line 3
+- `express()` on Line 5
+- `app.get()` on Line 12, 26 and 20
+- `app.listen()` on Line 29
+- `response.send()` on Line 13 and Line 17
+- `response.json()` on Line 22
+
+Can you work out what each those lines are doing? Write down your predictions.
+
+{{}}
+
+
+๐ Stretch Goals: make and run a local copy
+
+### ๐๏ธ Run the Simple Server locally
+
+{{}}
+
+1. Fork and clone: [https://github.com/CodeYourFuture/Node-Exercises](https://github.com/CodeYourFuture/Node-Exercises).
+1. `cd` into the `cyf-simple-express` directory.
+1. Run `npm install` to install the dependencies.
+1. Once everything is installed, start the server with `npm start`
+
+{{}}
+{{}}
+Access your local API by going to `http://localhost:3000`
+{{}}
+
+### ๐
๐ฟ Modify the Server
+
+{{}}
+Now try to modify the `server.js` code to do something different.
+
+#### Examples:
+
+1. Say "Hello Margarita", instead of "Hello CYF"
+2. Make it return an array of strings as json.
+3. Make it return the current time
+4. Advanced: make it return whatever you want!
+ {{}}
+
+
diff --git a/content/en/servers/blocks/make-a-node-project/index.md b/content/en/servers/blocks/make-a-node-project/index.md
new file mode 100644
index 000000000..5ff44d2ba
--- /dev/null
+++ b/content/en/servers/blocks/make-a-node-project/index.md
@@ -0,0 +1,58 @@
++++
+title = 'Make a Node Project'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Create a new repo from scratch'
+ 2='Initialize a Node project'
++++
+
+### ๐ Create a [new repo](https://github.com/new)
+
+
+ 1. Go to github.com/new and choose these settings (click to expand):
+
+| Question | Answer |
+| -------------------------------- | ------------------------------------ |
+| Repository template | No template |
+| Owner | YOUR_GITHUB_USERNAME |
+| Repository name | Express-101 |
+| Description | My first Express web server |
+| Visibility | Public |
+| Initialize this repository with: | :white_check_mark: Add a README file |
+| Add .gitignore | Node |
+| Choose a license | MIT License |
+
+
+
+2. Click **Create repository**
+
+### โ Clone your repo
+
+Clone your newly made repo to your local machine. You are going to be working in this folder for the rest of the study session.
+
+### Initialize your project
+
+{{}}
+
+1. Open your project in VS Code
+2. Open the terminal
+3. Run `npm init -y` to initialize your project
+4. Run `npm install express` to install Express
+5. Commit your changes and push them to GitHub
+
+{{}}
+
+### Start your [README](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes)
+
+{{}}
+
+1. Open README.md in VS Code
+2. Add a title and description
+3. Add a link to the [Express documentation](https://expressjs.com/)
+4. Write a sentence about what you are going to build
+5. Commit your changes and push them to GitHub
+
+{{}}
diff --git a/content/en/servers/blocks/post/index.md b/content/en/servers/blocks/post/index.md
new file mode 100644
index 000000000..6e138a861
--- /dev/null
+++ b/content/en/servers/blocks/post/index.md
@@ -0,0 +1,57 @@
++++
+title = '๐จ POST'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Process a POST request using Express and Node and store data in memory'
++++
+
+`POST /movies should save a new movie`
+
+In order for our server-side to receive and use the data sent by the client, we will need to install and use a middleware.
+
+The JSON middleware makes it easy for our route handlers to read JSON data from the request. If the Content-Type request header indicates that the request body contains JSON data then the middleware calls JSON.parse to convert the request body into a JavaScript data structure.
+
+To register the JSON middleware, add the following to the server code:
+
+```js
+app.use(express.json()); // before our routes definition
+```
+
+In `server.js`, create a `POST /movies` endpoint that saves a new movie. The movie will be passed as a JSON object in the request body.
+
+
+ Step by step if you get stuck
+
+1. Add the following code to `server.js`:
+
+```js
+app.post("/movies", (req, res) => {
+ const newMovie = req.body;
+ moviesData.push(newMovie);
+ res.send("movie added successfully!");
+});
+```
+
+1. Open Postman and create a new request.
+1. Set the Request Type to POST.
+1. Enter the URL for your endpoint, which should be http://localhost:3000/movies.
+1. Set the Body Type to raw and format to JSON (application/json).
+1. Enter the movie Data in the body of the request as JSON:
+
+```
+{
+ "id": "13",
+ "title": "Boyhood",
+ "certificate": "15",
+ "yearOfRelease": 2014,
+ "director": "Richard Linklater"
+}
+```
+
+1. Click Send.
+1. You should see the movie you just created in the response.
+
+
diff --git a/content/en/servers/blocks/postman/index.md b/content/en/servers/blocks/postman/index.md
new file mode 100644
index 000000000..5381fcb03
--- /dev/null
+++ b/content/en/servers/blocks/postman/index.md
@@ -0,0 +1,32 @@
++++
+title = 'Install Postman'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Install Postman'
++++
+
+> Install [Postman](https://www.getpostman.com/downloads/)
+
+### Troubleshooting
+
+If you get:
+
+`error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory`
+
+You may first need to run this in the terminal:
+
+`sudo apt-get install -y libgconf-2-4`
+
+If you get a blank screen when you open Postman, try logging out of the app and choosing "Use the Lightweight API Client" instead.
+
+For now you will only need the [Lightweight API Client](https://learning.postman.com/docs/getting-started/basics/using-api-client/#accessing-the-lightweight-api-client).
+
+### Alternatives
+
+If you have an old computer you might find Postman being very slow or becoming unresponsive. In this case you could try:
+
+- [Thunder Client](https://www.thunderclient.io/): this VS Code extension has a similar user interface to Postman
+- [Hoppscotch](https://hoppscotch.io/): this web app runs in the browser.
diff --git a/content/en/servers/blocks/put/index.md b/content/en/servers/blocks/put/index.md
new file mode 100644
index 000000000..b9ed4aeb3
--- /dev/null
+++ b/content/en/servers/blocks/put/index.md
@@ -0,0 +1,25 @@
++++
+title = '๐จ PUT'
+headless = true
+time = 20
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Process a PUT request using Express and Node and update an array held in memory'
++++
+
+> `PUT /movies/:movieId should update a movie (that matches the passed movieId)`
+
+This means that `PUT /movies/2` should update an movie with the id `2` and return `200` with `JSON { success: true }` to the user.
+
+The code should look something like this:
+
+```js
+app.put("/movies/:movieID", (req, res) => {
+ console.log("PUT /movies route");
+});
+```
+
+Remember, you have got to update the movie, not add it to the list.
+
+Test that your API works by updating one of the movies.
diff --git a/content/en/servers/blocks/query-parameters/index.md b/content/en/servers/blocks/query-parameters/index.md
new file mode 100644
index 000000000..5b25b045c
--- /dev/null
+++ b/content/en/servers/blocks/query-parameters/index.md
@@ -0,0 +1,74 @@
++++
+title = 'Query Parameters'
+headless = true
+time = 20
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Identify a query parameter in a URL'
+ 2='Write code that responds to a query parameter'
++++
+
+So, what is a **query parameter?**
+
+A query string is the part of a URL (Uniform Resource Locater) after the question mark (?). It is meant to send small amounts of information to the server via the url. This information is usually used as parameters to query a database, or maybe to filter results.
+
+Here is an example of a URL with query strings attached: `https://stackabuse.com/?page=2&limit=3`
+
+#### โ Detect Query Parameters
+
+Try sending different responses at different endpoints. Remember the `app.get()` method? To set up routing in your server, we need to repeat this method with different endpoints.
+
+```js
+app.get("/", (req, res) => {
+ let searchQuery = req.query.search;
+ res.send("Hello World! You searched for " + searchQuery);
+});
+```
+
+Test this endpoint with query parameters: `http://localhost:3000?search=hello`
+
+Now your turn!
+
+{{}}
+
+Add some code so that your server returns the amount of chocolate that you want from your `/chocolate` endpoint.
+
+##### ๐งช Acceptance Criteria
+
+_Given_ a chocolate endpoint
+_When_ I load `http://localhost:3000/chocolate?amount=3
+`
+_Then_ I see the message "Gimme 3 chocolates!"
+
+{{}}
+
+### โโ Multiple Query Parameters
+
+What if we want to detect and read multiple parameters? If we use a URL from earlier as an example, here is how we would **send** multiple query parameters:
+
+> https://api.sunrise-sunset.org/json?lat=51.5311&lng=0.0481
+
+Here we have one parameter called "lat" and another "lng". The first parameter starts with ? All subsequent parameters start with &.
+
+Here is how we would do that in Node:
+
+```js
+app.get("/json", (req, res) => {
+ let lat = req.query.lat;
+ let lng = req.query.lng;
+ res.send(`You searched for Lat: ${lat} and Lng: ${lng}`);
+});
+```
+
+{{}}
+
+Add some code so that your server takes 2 values that we will multiply together and return the value.
+
+##### ๐งช Acceptance Criteria
+
+_Given_ a multiply endpoint
+_When_ I call `http://localhost:3000/multiply?value1=2&value2=10`
+_Then_ it returns a value of `20`
+
+{{}}
diff --git a/content/en/servers/blocks/render/index.md b/content/en/servers/blocks/render/index.md
new file mode 100644
index 000000000..5638afc1b
--- /dev/null
+++ b/content/en/servers/blocks/render/index.md
@@ -0,0 +1,20 @@
++++
+title = 'Set up Render'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Set up Render'
++++
+
+Let's try out using [Render](https://render.com/) to host our Node.js application. There are many platforms that you can use to host your Node.js application, but we're using Render right now because it's free. If your cohort has found a better option, please use that, and contribute your setup guide back to the curriculum.
+
+{{}}
+
+1. Fork [https://github.com/CodeYourFuture/CYF-React-Express-Template](https://github.com/CodeYourFuture/CYF-React-Express-Template)
+1. Create an account with [Render](https://render.com/register) and choose **GitHub** as your auth.
+1. Create a [new **Web Service**](https://dashboard.render.com/create?type=web) and choose **Build and deploy from a Git repository**
+1. Connect your **forked** repo to Render
+
+{{}}
diff --git a/content/en/servers/blocks/routing/index.md b/content/en/servers/blocks/routing/index.md
new file mode 100644
index 000000000..9e5bcff06
--- /dev/null
+++ b/content/en/servers/blocks/routing/index.md
@@ -0,0 +1,63 @@
++++
+title = 'Routing'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Identify the endpoint in a URL'
+ 2='Define two endpoints in Express'
++++
+
+At the moment our server only does one thing. When it receives a request from the `/` endpoint, it sends back the same response: "Yay Node!".
+
+{{}}
+Try typing http://localhost:3000/node and see what happens.
+{{}}
+
+However by making use of endpoints, we can make the server send different responses for different requests. This concept is called **routing**.
+
+#### What is an endpoint?
+
+An endpoint is the part of the URL which comes after `/`. For example: `/chocolate` is the "chocolate" endpoint. It's the URL to which you send a request. It's the end point of the resource path.
+
+#### What is a URL?
+
+```mermaid
+sequenceDiagram
+ participant U as URL
+ participant P as Protocol
+ participant H as Host
+ participant Po as Port
+ participant R as Resource Path
+ Note over R: (Endpoint)
+ participant Q as Query Params
+
+ U->>P: http://
+ U->>H: www.domain.com
+ U->>Po: :1234
+ U->>R: /path/to/resource
+ U->>Q: ?a=b&x=y
+```
+
+#### Create your own endpoints and send different responses
+
+We're going to try sending different responses at different endpoints. Remember the `app.get()` method? To set up routing in your server, we need to repeat this method with different endpoints.
+
+For example:
+
+```js
+app.get("/", function (req, res) {
+ res.send("Hello World!");
+});
+
+app.get("/chocolate", function (req, res) {
+ res.send("Mm chocolate :O");
+});
+```
+
+{{}}
+
+Add some code so that your server sends one message when the endpoint is `/node` and another one when it's `/codeyourfuture`.
+
+{{}}
diff --git a/content/en/servers/blocks/test-examples-in-postman/index.md b/content/en/servers/blocks/test-examples-in-postman/index.md
new file mode 100644
index 000000000..cc09ebfc2
--- /dev/null
+++ b/content/en/servers/blocks/test-examples-in-postman/index.md
@@ -0,0 +1,27 @@
++++
+title = '๐ฎ ๐งช Test Examples in Postman'
+headless = true
+time = 30
+facilitation = false
+emoji= '๐งฉ'
+[objectives]
+ 1='Fork a Postman workspace'
+ 2='Run a request in Postman'
+ 4='Test a request in Postman'
++++
+
+You will need to create an account with Postman to complete this task. Follow along with the video [Writing Tests in Postman with Examples](https://www.youtube.com/watch?v=oXW-C2bM0wE).
+
+> ๐ฎ [Interactive Postman Workspace](https://www.postman.com/postman/workspace/test-examples-in-postman/documentation/1559645-820d771d-70ab-452f-9edd-0904dbc315b8)
+
+{{}}
+
+1. Given a user wants to see all the movies, when they make a GET request to `/movies`, then they should receive a list of all the movies.
+
+1. Given a user wants to see a single movie, when they make a GET request to `/movies/:movieId`, then they should receive a single movie.
+
+1. Given a user wants to add a movie, when they make a POST request to `/movies`, then they should receive a success message.
+
+1. Given a user wants to update a movie, when they make a PUT request to `/movies/:movieId`, then they should receive a success message.
+
+{{}}
diff --git a/content/en/servers/prep/index.md b/content/en/servers/prep/index.md
new file mode 100644
index 000000000..31caecacf
--- /dev/null
+++ b/content/en/servers/prep/index.md
@@ -0,0 +1,15 @@
++++
+title = 'prep'
+description = 'Set up Postman'
+layout = 'prep'
+emoji= '๐'
+menu_level = ['module']
+weight = 1
+backlog= 'Module-Servers'
+[[blocks]]
+name="Install Postman"
+src="servers/blocks/postman"
+[[blocks]]
+name="What are APIs?"
+src="https://www.youtube.com/watch?v=OVvTv9Hy91Q"
++++
diff --git a/content/en/node/sprints/1/_index.md b/content/en/servers/sprints/1/_index.md
similarity index 100%
rename from content/en/node/sprints/1/_index.md
rename to content/en/servers/sprints/1/_index.md
diff --git a/content/en/node/sprints/1/backlog/index.md b/content/en/servers/sprints/1/backlog/index.md
similarity index 82%
rename from content/en/node/sprints/1/backlog/index.md
rename to content/en/servers/sprints/1/backlog/index.md
index 2ed9dd7d4..7d93dec2f 100644
--- a/content/en/node/sprints/1/backlog/index.md
+++ b/content/en/servers/sprints/1/backlog/index.md
@@ -4,8 +4,6 @@ layout = 'backlog'
emoji= '๐'
menu_level = ['sprint']
weight = 2
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 1'
+++
-
-
diff --git a/content/en/servers/sprints/1/day-plan/index.md b/content/en/servers/sprints/1/day-plan/index.md
new file mode 100644
index 000000000..dedd4fcc4
--- /dev/null
+++ b/content/en/servers/sprints/1/day-plan/index.md
@@ -0,0 +1,40 @@
++++
+title = 'day-plan'
+layout = 'day-plan'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 3
+backlog= 'Module-Servers'
+backlog_filter= 'Week 1'
+[[blocks]]
+name="Non-Verbal Communication Energiser"
+src="https://cyf-pd.netlify.app/blocks/non-verbal-communication/readme/"
+[[blocks]]
+name="Morning break"
+src="blocks/morning-break"
+[[blocks]]
+name="Express Workshop"
+src="https://github.com/CodeYourFuture/CYF-Workshops/tree/main/template"
+time="90"
+[[blocks]]
+name="Lunch"
+src="blocks/lunch"
+[[blocks]]
+name="Study Group"
+src="blocks/study-group"
+time="60"
+[[blocks]]
+name="Code Review"
+src="https://github.com/CodeYourFuture/Module-Servers/pulls"
+time="0"
+[[blocks]]
+name="Afternoon break"
+src="blocks/afternoon-break"
+[[blocks]]
+name="Study Group 2"
+src="blocks/study-group"
+time="90"
+[[blocks]]
+name="Retro"
+src="blocks/retro"
++++
diff --git a/content/en/servers/sprints/1/prep/index.md b/content/en/servers/sprints/1/prep/index.md
new file mode 100644
index 000000000..1b4ac0c84
--- /dev/null
+++ b/content/en/servers/sprints/1/prep/index.md
@@ -0,0 +1,36 @@
++++
+title = 'prep'
+layout = 'prep'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 1
+backlog= 'Module-Servers'
+backlog_filter= 'Week 1'
+[[blocks]]
+name="Intro to Express"
+src="servers/blocks/intro-to-express"
+[[blocks]]
+name="Make a Node project"
+src="servers/blocks/make-a-node-project"
+[[blocks]]
+name="Building the server"
+src="servers/blocks/building-the-server"
+[[blocks]]
+name="Server code-along with Mitch"
+src="https://www.youtube.com/watch?v=ffMg8GEim0A"
+[[blocks]]
+name="Communicating with the server"
+src="servers/blocks/communicating-with-the-server"
+[[blocks]]
+name="Routing"
+src="servers/blocks/routing"
+[[blocks]]
+name="Routing Code-along with Mitch"
+src="https://www.youtube.com/watch?v=jCihcnTwkaw"
+[[blocks]]
+name="Query Parameters"
+src="servers/blocks/query-parameters"
+[[blocks]]
+name="Prep Non-Verbal Communication"
+src="https://cyf-pd.netlify.app/blocks/prep-non-verbal-communication/readme/"
++++
diff --git a/content/en/node/sprints/1/success/index.md b/content/en/servers/sprints/1/success/index.md
similarity index 82%
rename from content/en/node/sprints/1/success/index.md
rename to content/en/servers/sprints/1/success/index.md
index ec0fe59ba..bcc365796 100644
--- a/content/en/node/sprints/1/success/index.md
+++ b/content/en/servers/sprints/1/success/index.md
@@ -4,8 +4,6 @@ layout = 'success'
emoji= '๐'
menu_level = ['sprint']
weight = 4
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 1'
+++
-
-
diff --git a/content/en/node/sprints/2/_index.md b/content/en/servers/sprints/2/_index.md
similarity index 100%
rename from content/en/node/sprints/2/_index.md
rename to content/en/servers/sprints/2/_index.md
diff --git a/content/en/node/sprints/2/backlog/index.md b/content/en/servers/sprints/2/backlog/index.md
similarity index 82%
rename from content/en/node/sprints/2/backlog/index.md
rename to content/en/servers/sprints/2/backlog/index.md
index b6b4e60b8..334ce1be5 100644
--- a/content/en/node/sprints/2/backlog/index.md
+++ b/content/en/servers/sprints/2/backlog/index.md
@@ -4,8 +4,6 @@ layout = 'backlog'
emoji= '๐'
menu_level = ['sprint']
weight = 2
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 2'
+++
-
-
diff --git a/content/en/servers/sprints/2/day-plan/index.md b/content/en/servers/sprints/2/day-plan/index.md
new file mode 100644
index 000000000..f18f9d686
--- /dev/null
+++ b/content/en/servers/sprints/2/day-plan/index.md
@@ -0,0 +1,37 @@
++++
+title = 'day-plan'
+layout = 'day-plan'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 3
+backlog= 'Module-Servers'
+backlog_filter= 'Week 2'
+[[blocks]]
+name="Energiser"
+src="blocks/energiser"
+[[blocks]]
+name="Placeholder Workshop"
+src="https://github.com/CodeYourFuture/CYF-Workshops/tree/main/template"
+time="120"
+[[blocks]]
+name="Lunch"
+src="blocks/lunch"
+[[blocks]]
+name="Study Group"
+src="blocks/study-group"
+time="60"
+[[blocks]]
+name="Code Review"
+src="https://github.com/CodeYourFuture/Module-Servers/pulls"
+time="0"
+[[blocks]]
+name="Afternoon break"
+src="blocks/afternoon-break"
+[[blocks]]
+name="PD Placeholder"
+src="blocks/pd-placeholder"
+time=90
+[[blocks]]
+name="Retro"
+src="blocks/retro"
++++
diff --git a/content/en/servers/sprints/2/prep/index.md b/content/en/servers/sprints/2/prep/index.md
new file mode 100644
index 000000000..292e93e19
--- /dev/null
+++ b/content/en/servers/sprints/2/prep/index.md
@@ -0,0 +1,33 @@
++++
+title = 'prep'
+layout = 'prep'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 1
+backlog= 'Module-Servers'
+backlog_filter= 'Week 2'
+[[blocks]]
+name="CRUD"
+src="servers/blocks/crud"
+[[blocks]]
+name="CRUD Code-along with Mitch"
+src="https://www.youtube.com/watch?v=u1fEONF64RI"
+[[blocks]]
+name="GET"
+src="servers/blocks/get"
+[[blocks]]
+name="GET Code-along with Mitch"
+src="https://www.youtube.com/watch?v=29ogivyvEbY"
+[[blocks]]
+name="GET single"
+src="servers/blocks/get-single"
+[[blocks]]
+name="GET Single Code-along with Mitch"
+src="https://www.youtube.com/watch?v=f_qw-Jwk9xw"
+[[blocks]]
+name="POST"
+src="servers/blocks/post"
+[[blocks]]
+name="POST Code-along with Mitch"
+src="https://www.youtube.com/watch?v=GJkEynYUMR8"
++++
diff --git a/content/en/node/sprints/2/success/index.md b/content/en/servers/sprints/2/success/index.md
similarity index 82%
rename from content/en/node/sprints/2/success/index.md
rename to content/en/servers/sprints/2/success/index.md
index 41e6fc2a9..02d66b65e 100644
--- a/content/en/node/sprints/2/success/index.md
+++ b/content/en/servers/sprints/2/success/index.md
@@ -4,8 +4,6 @@ layout = 'success'
emoji= '๐'
menu_level = ['sprint']
weight = 4
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 2'
+++
-
-
diff --git a/content/en/node/sprints/3/_index.md b/content/en/servers/sprints/3/_index.md
similarity index 100%
rename from content/en/node/sprints/3/_index.md
rename to content/en/servers/sprints/3/_index.md
diff --git a/content/en/node/sprints/3/backlog/index.md b/content/en/servers/sprints/3/backlog/index.md
similarity index 82%
rename from content/en/node/sprints/3/backlog/index.md
rename to content/en/servers/sprints/3/backlog/index.md
index 45452259c..9311710ab 100644
--- a/content/en/node/sprints/3/backlog/index.md
+++ b/content/en/servers/sprints/3/backlog/index.md
@@ -4,8 +4,6 @@ layout = 'backlog'
emoji= '๐'
menu_level = ['sprint']
weight = 2
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 3'
+++
-
-
diff --git a/content/en/servers/sprints/3/day-plan/index.md b/content/en/servers/sprints/3/day-plan/index.md
new file mode 100644
index 000000000..cb8489591
--- /dev/null
+++ b/content/en/servers/sprints/3/day-plan/index.md
@@ -0,0 +1,40 @@
++++
+title = 'day-plan'
+layout = 'day-plan'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 3
+backlog= 'Module-Servers'
+backlog_filter= 'Week 3'
+[[blocks]]
+name="Energiser"
+src="blocks/energiser"
+[[blocks]]
+name="City Guide Pair Programming"
+src="https://github.com/CodeYourFuture/CYF-Workshops/tree/main/template"
+time="120"
+[[blocks]]
+name="Lunch"
+src="blocks/lunch"
+[[blocks]]
+name="Study Group"
+src="blocks/study-group"
+time="60"
+[[blocks]]
+name="Code Review"
+src="https://github.com/CodeYourFuture/Module-Servers/pulls"
+time="0"
+[[blocks]]
+name="Afternoon break"
+src="blocks/afternoon-break"
+[[blocks]]
+name="PD Placeholder"
+src="blocks/pd-placeholder"
+time=60
+[[blocks]]
+name="Set up Render"
+src="servers/blocks/render"
+[[blocks]]
+name="Retro"
+src="blocks/retro"
++++
diff --git a/content/en/servers/sprints/3/prep/index.md b/content/en/servers/sprints/3/prep/index.md
new file mode 100644
index 000000000..72730f794
--- /dev/null
+++ b/content/en/servers/sprints/3/prep/index.md
@@ -0,0 +1,30 @@
++++
+title = 'prep'
+layout = 'prep'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 1
+backlog= 'Module-Servers'
+backlog_filter= 'Week 3'
+[[blocks]]
+name="CRUD"
+src="servers/blocks/crud-2"
+[[blocks]]
+name="PUT"
+src="servers/blocks/put"
+[[blocks]]
+name="PUT Codealong with Mitch"
+src="https://www.youtube.com/watch?v=zQHM8S74FJE"
+[[blocks]]
+name="CRUD Challenges"
+src="servers/blocks/crud-challenges"
+[[blocks]]
+name="Reading from the filesystem"
+src="https://www.youtube.com/watch?v=GOWPQ3cGHbE"
+[[blocks]]
+name="Writing tests in Postman"
+src="https://www.youtube.com/watch?v=oXW-C2bM0wE"
+[[blocks]]
+name="Interactive Postman workspace"
+src="servers/blocks/test-examples-in-postman"
++++
diff --git a/content/en/node/sprints/3/success/index.md b/content/en/servers/sprints/3/success/index.md
similarity index 82%
rename from content/en/node/sprints/3/success/index.md
rename to content/en/servers/sprints/3/success/index.md
index 133a1d393..6559a9af0 100644
--- a/content/en/node/sprints/3/success/index.md
+++ b/content/en/servers/sprints/3/success/index.md
@@ -4,8 +4,6 @@ layout = 'success'
emoji= '๐'
menu_level = ['sprint']
weight = 4
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 3'
+++
-
-
diff --git a/content/en/node/sprints/4/_index.md b/content/en/servers/sprints/4/_index.md
similarity index 100%
rename from content/en/node/sprints/4/_index.md
rename to content/en/servers/sprints/4/_index.md
diff --git a/content/en/node/sprints/4/backlog/index.md b/content/en/servers/sprints/4/backlog/index.md
similarity index 82%
rename from content/en/node/sprints/4/backlog/index.md
rename to content/en/servers/sprints/4/backlog/index.md
index 421b26c01..27d42ee42 100644
--- a/content/en/node/sprints/4/backlog/index.md
+++ b/content/en/servers/sprints/4/backlog/index.md
@@ -4,8 +4,6 @@ layout = 'backlog'
emoji= '๐'
menu_level = ['sprint']
weight = 2
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 4'
+++
-
-
diff --git a/content/en/servers/sprints/4/day-plan/index.md b/content/en/servers/sprints/4/day-plan/index.md
new file mode 100644
index 000000000..0fcf67218
--- /dev/null
+++ b/content/en/servers/sprints/4/day-plan/index.md
@@ -0,0 +1,38 @@
++++
+title = 'day-plan'
+layout = 'day-plan'
+emoji= '๐'
+menu_level = ['sprint']
+weight = 3
+backlog= 'Module-Servers'
+backlog_filter= 'Week 4'
+[[blocks]]
+name="Energiser"
+src="blocks/energiser"
+[[blocks]]
+name="Wordle Hackathon"
+src="https://github.com/CodeYourFuture/CYF-Workshops/tree/main/template"
+time="120"
+[[blocks]]
+name="Lunch"
+src="blocks/lunch"
+[[blocks]]
+name="Study Group"
+src="blocks/study-group"
+time="60"
+[[blocks]]
+name="Code Review"
+src="https://github.com/CodeYourFuture/Module-Servers/pulls"
+time="0"
+[[blocks]]
+name="Afternoon break"
+src="blocks/afternoon-break"
+[[blocks]]
+name="PD Placeholder"
+src="blocks/pd-placeholder"
+time=90
+[[blocks]]
+name="Progress check-in"
+src="https://github.com/CodeYourFuture/Module-Servers/issues/128"
+time="15"
++++
diff --git a/content/en/node/sprints/4/prep/index.md b/content/en/servers/sprints/4/prep/index.md
similarity index 74%
rename from content/en/node/sprints/4/prep/index.md
rename to content/en/servers/sprints/4/prep/index.md
index 5aa3b952d..13edddfa9 100644
--- a/content/en/node/sprints/4/prep/index.md
+++ b/content/en/servers/sprints/4/prep/index.md
@@ -4,11 +4,12 @@ layout = 'prep'
emoji= '๐'
menu_level = ['sprint']
weight = 1
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 4'
[[blocks]]
+name="Play Wordle"
+src="blocks/wordle"
+[[blocks]]
name="Prep Sell Yourself"
src="https://cyf-pd.netlify.app/blocks/prep-sell-yourself/readme/"
+++
-
-
diff --git a/content/en/node/sprints/4/success/index.md b/content/en/servers/sprints/4/success/index.md
similarity index 82%
rename from content/en/node/sprints/4/success/index.md
rename to content/en/servers/sprints/4/success/index.md
index 1cce6f40c..7de15322b 100644
--- a/content/en/node/sprints/4/success/index.md
+++ b/content/en/servers/sprints/4/success/index.md
@@ -4,8 +4,6 @@ layout = 'success'
emoji= '๐'
menu_level = ['sprint']
weight = 4
-backlog= 'Module-Node'
+backlog= 'Module-Servers'
backlog_filter= 'Week 4'
+++
-
-
diff --git a/content/en/node/success/index.md b/content/en/servers/success/index.md
similarity index 96%
rename from content/en/node/success/index.md
rename to content/en/servers/success/index.md
index b5f52e8ae..9ccd281a8 100644
--- a/content/en/node/success/index.md
+++ b/content/en/servers/success/index.md
@@ -5,7 +5,7 @@ layout = "success"
emoji= "๐"
menu_level = [ "module" ]
weight = 11
-backlog= "Module-Node"
+backlog= "Module-Servers"
[[objectives]]
1= "Every trainee has received and responded to at least one code review"
2= "Every trainee has opened at least 3 PRs to the module repo"