diff --git a/_sidebar.md b/_sidebar.md
new file mode 100644
index 0000000..ca33c71
--- /dev/null
+++ b/_sidebar.md
@@ -0,0 +1,29 @@
+* [Admin](admin/README.md)
+* [Ajax Object Oriented Programming](ajax---object-oriented-programming/README.md)
+* [Algorithms Data Structures](algorithms---data-structures/README.md)
+* [Archive](archive/README.md)
+* [Asynchronous Codes](asynchronous-codes/README.md)
+* [Career Development](career-development/README.md)
+* [Challenges](challenges/README.md)
+* [Css Extra](css-extra/README.md)
+* [Design](design/README.md)
+* [Environment Setup](environment-setup/README.md)
+* [Extended Content](extended-content/README.md)
+* [Git Collab](git-collab/README.md)
+* [Intro](intro/README.md)
+* [Mid Exam](mid-exam/README.md)
+* [Mongodb](mongodb/README.md)
+* [Python](python/README.md)
+* [R Ds](r-ds/README.md)
+* [React Advanced](react-advanced/README.md)
+* [React Basics](react-basics/README.md)
+* [Resources](resources/README.md)
+* [Servers](servers/README.md)
+* [Solutions](solutions/README.md)
+* [Sql Basics](sql-basics/README.md)
+* [State Management](state-management/README.md)
+* [Typescript](typescript/README.md)
+* [Unit Testings](unit-testings/README.md)
+* [Web Development Basics](web-development-basics/README.md)
+* [Web Development Basics Advanced](web-development-basics-advanced/README.md)
+* [Web Security Osi Model Python Backend ](web-security---osi-model--python-backend-/README.md)
\ No newline at end of file
diff --git a/admin/README.md b/admin/README.md
new file mode 100644
index 0000000..5ae0409
--- /dev/null
+++ b/admin/README.md
@@ -0,0 +1,3 @@
+# Admin
+
+- [Readme](readme/README.md)
\ No newline at end of file
diff --git a/admin/readme/README.md b/admin/readme/README.md
new file mode 100644
index 0000000..ce23dc9
--- /dev/null
+++ b/admin/readme/README.md
@@ -0,0 +1,3 @@
+# Page 1
+
+# Sample content Page 1
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/README.md b/ajax---object-oriented-programming/README.md
new file mode 100644
index 0000000..cf2ec9a
--- /dev/null
+++ b/ajax---object-oriented-programming/README.md
@@ -0,0 +1,15 @@
+# Ajax Object Oriented Programming
+
+- [Ajax Intro To Apis](ajax---intro-to-apis/README.md)
+- [Css Tools For Modern Design](css--tools-for-modern-design/README.md)
+- [Css Tools For Responsive Design](css--tools-for-responsive-design/README.md)
+- [Es6 Array Methods](es6-array-methods/README.md)
+- [Handlebars](handlebars/README.md)
+- [Intro To Json](intro-to-json/README.md)
+- [Local Storage](local-storage/README.md)
+- [My People Handlebars Api Project Optional ](my-people---handlebars---api-project--optional-/README.md)
+- [Object Oriented Programming Intro Oop ](object-oriented-programming-intro--oop-/README.md)
+- [Oop Inheritance](oop-inheritance/README.md)
+- [Oop Singleton Dependency Injection](oop-singleton---dependency-injection/README.md)
+- [Promises](promises/README.md)
+- [Random User Page Api Project](random-user-page-api-project/README.md)
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/ajax---intro-to-apis/README.md b/ajax---object-oriented-programming/ajax---intro-to-apis/README.md
new file mode 100644
index 0000000..26fde39
--- /dev/null
+++ b/ajax---object-oriented-programming/ajax---intro-to-apis/README.md
@@ -0,0 +1,3 @@
+# Ajax Overview Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/ajax---intro-to-apis/_sidebar.md b/ajax---object-oriented-programming/ajax---intro-to-apis/_sidebar.md
new file mode 100644
index 0000000..a46b14c
--- /dev/null
+++ b/ajax---object-oriented-programming/ajax---intro-to-apis/_sidebar.md
@@ -0,0 +1,12 @@
+- [⬅ Back to Ajax Object Oriented Programming](../README.md)
+
+- [Ajax Overview Video](./AJAX-Overview-Video.md)
+- [Api Requests Jquery](./API-Requests---Jquery.md)
+- [Asynchronous](./Asynchronous.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Extracting Data](./Extracting-Data.md)
+- [Get Request Error Handling Video](./GET-Request---Error-Handling-Video.md)
+- [Intro Ajax](./Intro---AJAX.md)
+- [Requests Success Error](./Requests--Success---Error.md)
+- [Jquery Get Request Video](./jQuery-GET-Request-Video.md)
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/css--tools-for-modern-design/README.md b/ajax---object-oriented-programming/css--tools-for-modern-design/README.md
new file mode 100644
index 0000000..a710200
--- /dev/null
+++ b/ajax---object-oriented-programming/css--tools-for-modern-design/README.md
@@ -0,0 +1,18 @@
+# Intro
+
+This isn't so much a lesson as much as a resource for several good tools you should be aware of and using in your projects.
+
+
+
+Now, this isn't a UI (user interface) or UX (user experience) course, but we should be able to make something that looks reasonably good, and there are simple tools out there for that. As such, it is beneficial to learn them.
+
+
+
+In particular, we will cover:
+
+- Font-Awesome
+- Flat-UI Colors
+- Color Scheme Generator
+- Website Color Scheme
+- Google Fonts
+- Design Tips
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/css--tools-for-responsive-design/README.md b/ajax---object-oriented-programming/css--tools-for-responsive-design/README.md
new file mode 100644
index 0000000..c8d5824
--- /dev/null
+++ b/ajax---object-oriented-programming/css--tools-for-responsive-design/README.md
@@ -0,0 +1,52 @@
+# Intro
+
+Today, and probably in the future, screen sizes vary. Sometimes users are on their desktop with a wide-screen, sometimes on a smaller laptop, tablet, or phone - either way, we would like our web-apps to look reasonable on any display.
+
+
+
+The answer to this conundrum is built up of a few things, but today we will talk about these in particular:
+
+
+
+- The Viewport
+- max/min width/height
+- Flexible units (instead of using pixels)
+- Media Queries - _the_ tool for responsive design
+- Emulating other devices on Chrome
+
+It may sound like a lot, but these are pretty small, but useful tools, so let's dive in.
+
+
+
+
+
+----------
+
+
+
+
+
+#### **THE VIEWPORT**
+
+
+
+
+
+The **viewport** is the area of the window in which web content can be seen ([quote](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)) - that is to say, the visible area of a webpage. Naturally, this changes from device to device. We will be referencing this term throughout the lesson.
+
+
+
+To accommodate different viewports, we can add this `meta` tag to our root (usually _index_) HTML file:
+
+
+
+```html
+
+```
+
+
+The above goes in the `head` tag, usually at the top. You can read all the details about this [here](https://developer.mozilla.org/en-US/docs/Web/CSS/Viewport_concepts), but the gist is that it sets the width of the page to be the width of the _device_.
+
+
+
+Generally there's not much more to do with the viewport aside from having this `meta` tag in our HTML, so we won't go into more detail about this.
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/es6-array-methods/README.md b/ajax---object-oriented-programming/es6-array-methods/README.md
new file mode 100644
index 0000000..70a206f
--- /dev/null
+++ b/ajax---object-oriented-programming/es6-array-methods/README.md
@@ -0,0 +1,3 @@
+# Array Methods Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/handlebars/README.md b/ajax---object-oriented-programming/handlebars/README.md
new file mode 100644
index 0000000..1d01c00
--- /dev/null
+++ b/ajax---object-oriented-programming/handlebars/README.md
@@ -0,0 +1,3 @@
+# Handlebars Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/intro-to-json/README.md b/ajax---object-oriented-programming/intro-to-json/README.md
new file mode 100644
index 0000000..add7a90
--- /dev/null
+++ b/ajax---object-oriented-programming/intro-to-json/README.md
@@ -0,0 +1,3 @@
+# JSON Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/local-storage/README.md b/ajax---object-oriented-programming/local-storage/README.md
new file mode 100644
index 0000000..cc92caa
--- /dev/null
+++ b/ajax---object-oriented-programming/local-storage/README.md
@@ -0,0 +1,3 @@
+# Local Storage Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/my-people---handlebars---api-project--optional-/README.md b/ajax---object-oriented-programming/my-people---handlebars---api-project--optional-/README.md
new file mode 100644
index 0000000..2673800
--- /dev/null
+++ b/ajax---object-oriented-programming/my-people---handlebars---api-project--optional-/README.md
@@ -0,0 +1,10 @@
+# Intro
+
+
+
+
+Knowing both Handlebars and how to make simple GET requests is great - both are very powerful tools.
+
+
+
+Let's take advantage of these and create a simple (static) directory of people, with a bit of CSS Grid for flare.
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/object-oriented-programming-intro--oop-/README.md b/ajax---object-oriented-programming/object-oriented-programming-intro--oop-/README.md
new file mode 100644
index 0000000..7fb3fef
--- /dev/null
+++ b/ajax---object-oriented-programming/object-oriented-programming-intro--oop-/README.md
@@ -0,0 +1,3 @@
+# OOP Intro Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/oop-inheritance/README.md b/ajax---object-oriented-programming/oop-inheritance/README.md
new file mode 100644
index 0000000..c4c1356
--- /dev/null
+++ b/ajax---object-oriented-programming/oop-inheritance/README.md
@@ -0,0 +1,9 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-2241612772)
+{Check It!|assessment}(multiple-choice-3123031327)
+{Check It!|assessment}(multiple-choice-3000189069)
+{Check It!|assessment}(multiple-choice-2755130575)
+{Check It!|assessment}(multiple-choice-3542748998)
+{Check It!|assessment}(multiple-choice-376880610)
+{Check It!|assessment}(multiple-choice-1382738689)
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/oop-inheritance/_sidebar.md b/ajax---object-oriented-programming/oop-inheritance/_sidebar.md
new file mode 100644
index 0000000..b9a495d
--- /dev/null
+++ b/ajax---object-oriented-programming/oop-inheritance/_sidebar.md
@@ -0,0 +1,16 @@
+- [⬅ Back to Ajax Object Oriented Programming](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Custom Inherited Attributes](./Custom--inherited--Attributes.md)
+- [Deeper Inheritance](./Deeper-Inheritance.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Method Overriding](./Method-Overriding.md)
+- [Oop Inheritance Intro Video](./OOP-Inheritance-Intro-Video.md)
+- [Object Prototype Video](./Object---Prototype-Video.md)
+- [Object Prototype](./Object---Prototype.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
+- [Instanceof Polymorphism Video](./instanceof---Polymorphism-Video.md)
+- [Instanceof Polymorphism](./instanceof---Polymorphism.md)
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/oop-singleton---dependency-injection/README.md b/ajax---object-oriented-programming/oop-singleton---dependency-injection/README.md
new file mode 100644
index 0000000..b08a427
--- /dev/null
+++ b/ajax---object-oriented-programming/oop-singleton---dependency-injection/README.md
@@ -0,0 +1,3 @@
+# Singleton & Dependency Injection Video
+
+
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/promises/README.md b/ajax---object-oriented-programming/promises/README.md
new file mode 100644
index 0000000..70de0b2
--- /dev/null
+++ b/ajax---object-oriented-programming/promises/README.md
@@ -0,0 +1,107 @@
+# A Function That Returns A Promise
+
+Mostly we will work with functions that return promises, such as making http request.
+But in our example we need the example functions to return a promise.
+
+Here is a code that change our functions to return promises:
+```js
+const getRandomWord = function () {
+ let words = ['Bonanza', 'Elusive', 'Hindrance', 'Astute', 'Polaroid', 'Phonic', 'Yonder']
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve(words[Math.floor(Math.random() * words.length)])
+ }, 1000);
+ })
+}
+
+const getSynonyms = function (word) {
+ let thesauraus = {
+ 'Absolute': ['Definitive', 'Certain', 'Sure', 'Unequivocal'],
+ 'Astute': ['Sharp', 'Poignant', 'Clever'],
+ 'Azure': ['Blue', 'Cyan', 'Sky-blue'],
+ 'Bright': ['Luminous', 'Brilliant'],
+ 'Bonanza': ['Plethora', 'Smorgasboard', 'Copious', 'Plenty'],
+ 'Elusive': ['Slick', 'Slippery', 'Ethereal', 'Loose'],
+ 'Erode': ['Destroy', 'Wear out', 'Tarnish'],
+ 'Hindrance': ['Bother', 'Disturbance', 'Problematic'],
+ 'Phonic': ['Soundful'],
+ 'Ploy': ['Plan', 'Ruse'],
+ 'Polaroid': ['Photograph'],
+ 'Yap': ['Bark', 'Blab', 'Chatter'],
+ 'Yonder': ['There', 'Away', 'Far', 'Afar']
+ }
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve(thesauraus[word])
+ }, 1000);
+ })
+}
+
+const getSentiment = function (word) {
+ let wordSentiment = {
+ 'Definitive': 1,
+ 'Sharp': 1,
+ 'Blue': 0,
+ 'Luminous': 1,
+ 'Plethora': 1,
+ 'Slick': -1,
+ 'Destroy': -1,
+ 'Bother': -1,
+ 'Soundful': 0,
+ 'Plan': 0,
+ 'Photograph': 0,
+ 'Bark': -1,
+ 'There': -1
+ }
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve(wordSentiment[word])
+ }, 1000);
+ })
+}
+
+// No need for promises here
+const getSentimentDescription = function (sentiment) {
+ return sentiment === 1 ? "Positive" : sentiment === -1 ? "Negative" : "Neutral"
+}
+```
+
+Use it so that you can run the code and add a `then`.
+
+This is out side of the lesson scope.
+If you are short in time move on to the next page.
+
+# Extension
+If you have extra time, here is a basic explanation.
+To write a function that returns a promise, you can do the following:
+
+* Create a new promise using the Promise constructor, passing in a function with two arguments: resolve and reject.
+* Inside the function, perform the asynchronous operation.
+
+* If the operation succeeds, call the resolve function with the result of the operation as an argument.
+
+* If the operation fails, call the reject function with an error as an argument.
+
+Here is an example of a function that returns a promise that resolves with the result of an asynchronous HTTP request:
+
+```js
+function getData() {
+ return new Promise((resolve, reject) => {
+ fetch('https://example.com/data')
+ .then(response => {
+ if (response.ok) {
+ return response.json();
+ }
+ throw new Error('Request failed');
+ })
+ .then(data => {
+ resolve(data);
+ })
+ .catch(error => {
+ reject(error);
+ });
+ });
+}
+```
+
+If you want to read more about it you can do it [here](https://www.freecodecamp.org/news/how-to-write-a-javascript-promise-4ed8d44292b8/), or search online.
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/promises/_sidebar.md b/ajax---object-oriented-programming/promises/_sidebar.md
new file mode 100644
index 0000000..888fd66
--- /dev/null
+++ b/ajax---object-oriented-programming/promises/_sidebar.md
@@ -0,0 +1,17 @@
+- [⬅ Back to Ajax Object Oriented Programming](../README.md)
+
+- [A Function That Returns A Promise](./A-Function-that-Returns-a-Promise.md)
+- [Applications](./Applications.md)
+- [Async Operation](./Async-Operation.md)
+- [Callback Hell](./Callback-Hell.md)
+- [Chaining](./Chaining.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [New Page](./New-Page.md)
+- [Promise All](./Promise-All.md)
+- [Promise](./Promise.md)
+- [Spot Check](./Spot-Check.md)
+- [Test Case](./Test-Case.md)
+- [Understanding Async Functions](./Understanding-Async-Functions.md)
+- [Understanding Callbacks](./Understanding-Callbacks.md)
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/random-user-page-api-project/README.md b/ajax---object-oriented-programming/random-user-page-api-project/README.md
new file mode 100644
index 0000000..922d278
--- /dev/null
+++ b/ajax---object-oriented-programming/random-user-page-api-project/README.md
@@ -0,0 +1,27 @@
+# Extensions
+
+**1.** Render the pokemon name on your page in "Proper Case" ("Pikachu" instead of "pikachu")
+
+- Hint: Create your own Handlebars Helper to do this.
+
+
+
+**2.** Add in two more buttons - a "Save User Page" button and a "Load User Page".
+
+
+
+- Your "Save User Page" button should save a snapshot of your current user to local storage
+- Your "Load User Page" button should load the user that you saved and render the exact user page back on the page - that means the same user, the quote, pokemon, meatText and friends they came with.
+
+
+
+**2.1** Save multiple users
+
+
+
+- Edit the object you're saving in Local Storage to be a users object. You'll be adding each user you want to save to this object.
+- Add a drop-down menu with the list of saved users. Now, when you click on the "Load User Page" button, it should load the saved user you select from the drop-down menu
+
+####
+
+#### **DONE FOR REAL NOW**
\ No newline at end of file
diff --git a/ajax---object-oriented-programming/random-user-page-api-project/_sidebar.md b/ajax---object-oriented-programming/random-user-page-api-project/_sidebar.md
new file mode 100644
index 0000000..aeb876a
--- /dev/null
+++ b/ajax---object-oriented-programming/random-user-page-api-project/_sidebar.md
@@ -0,0 +1,7 @@
+- [⬅ Back to Ajax Object Oriented Programming](../README.md)
+
+- [Extensions](./Extensions.md)
+- [Instructions Ii](./Instructions-II.md)
+- [Instructions](./Instructions.md)
+- [Intro](./Intro.md)
+- [Working With New Apis](./Working-with-New-APIs.md)
\ No newline at end of file
diff --git a/algorithms---data-structures/README.md b/algorithms---data-structures/README.md
new file mode 100644
index 0000000..e34bda1
--- /dev/null
+++ b/algorithms---data-structures/README.md
@@ -0,0 +1,15 @@
+# Algorithms Data Structures
+
+- [Algorithms Level 1](algorithms---level-1/README.md)
+- [Algorithms Level 2](algorithms---level-2/README.md)
+- [Algorithms Level 3](algorithms---level-3/README.md)
+- [Autocomplete Trie Project Optional ](autocomplete-trie-project--optional-/README.md)
+- [Big O Time Complexity Js ](big-o---time-complexity--js-/README.md)
+- [Data Structures](data-structures/README.md)
+- [Full Stack Interview Questions](full-stack-interview-questions/README.md)
+- [Fullstack 15](fullstack-15/README.md)
+- [Gold Rush Matrix Mini Project](gold-rush--matrix-mini-project/README.md)
+- [Matrices](matrices/README.md)
+- [Recursion](recursion/README.md)
+- [Stacks Queues](stacks---queues/README.md)
+- [Trees And Binary Search Trees](trees-and-binary-search-trees/README.md)
\ No newline at end of file
diff --git a/algorithms---data-structures/algorithms---level-1/README.md b/algorithms---data-structures/algorithms---level-1/README.md
new file mode 100644
index 0000000..6ec7776
--- /dev/null
+++ b/algorithms---data-structures/algorithms---level-1/README.md
@@ -0,0 +1,111 @@
+# Intro
+
+In this lesson, you're going to practice the important skill of problem solving, i.e. writing **algorithms**.
+
+
+
+An **algorithm** may sound like a big word - but all it is is **a set of instructions to complete some task**.
+
+
+
+Let's consider the classic _find the smallest number in an array_ task:
+
+```
+let numbers = [31, 9, 18, 2, 106, 382, 0, 71, 8239, 791, -2321, 2500, 12, 13]
+```
+
+As a human, it's pretty easy to look at this and see that - `2321` is the smallest number - but that's because our subconscious mind is quite powerful. Behind the scenes, we're probably following an algorithm that looks like this:
+
+
+
+1. Look at the first number
+2. Store it in some place in our memory
+3. Look at the second number
+4. Compare the second number to the number stored in memory
+5. If the second number is smaller, forget the number stored in memory, and store the second number in memory
+6. Look at the third number
+7. If the third number is smaller, forget the number stored in memory...
+8. Repeat until the end
+
+
+
+Of course, our minds do this blazingly fast so we don't really think of it like that - but that's effectively the process - and that is an excellent example of an algorithm! A very clear set of instructions.
+
+
+
+----------
+
+
+
+Now let's translate the above algorithm to code:
+
+```
+let smallestNumber //our 'number stored in memory'
+
+for(let num of numbers){ //going over each number
+
+ if(num < smallestNumber){
+ smallestNumber = num //forget the number stored in memory and store num instead
+ }
+}
+
+console.log("Smallest number is " + smallestNumber)
+```
+
+
+The above is pretty self-explanatory, but if you run this code you'll find **a logical bug**.
+
+
+
+To solve this bug, you'll have to **debug the code, maybe also** [**take a look here**](https://stackoverflow.com/a/22134555/3147774) - try to figure this out on your own before looking at the solution.
+
+
+ Click here to reveal the answer.
+
+
+The problem is that the value of `smallestNumber` is initially `undefined` - we cannot compare greater/less than to `undefined`, so the expression `smallestNumber > num` always returns `false`.
+
+This means we need to define some initial value for `smallestNumber`
+
+
+---
+
+
+Once you've figured out **and fixed** the bug, run your exact same code (without changing anything else) for the following arrays:
+
+```
+let numbers = [823412013513, 1381120136324, 82341381745, 181238377131412, 74128377131412, 74128377412] // should find 74128377412
+
+let numbers = [-312, -9123, -112, -812, -7411, -312] //should find -9123
+
+let numbers = [23, 23, 23, 23, 23] //should find 23
+```
+
+If you didn't get the correct results - it's because you've made some **assumptions**, and one of the golden rules in writing an algorithm is that you must **be aware of your assumptions**.
+
+
+
+If, for instance, you initially set `let smallestNumber = 0` - then you couldn't find the smallest number in the first or third array above, because none of those numbers are less than `0`.
+
+
+
+If, for instance, you initially set `let smallestNumber = 10000` - or some other 'large number', you might not find the smallest number in the first array because you assumed all your numbers would be less than 10000
+
+
+
+Either way, to guarantee we're not assuming anything about our data, **we can set** `let smallestNumber = numbers[0]` - then we know we'll always get a result relevant to our `numbers` array.
+
+
+
+And **even now, there's still a problem** - what result do we get for the following array?
+
+```
+let numbers = []
+```
+
+
+We would see `Smallest number is undefined` - not a very friendly message.
+
+
+
+In summary, **when we write good algorithms, we need to assume as little as possible, and consider as many edge cases as possible**.
\ No newline at end of file
diff --git a/algorithms---data-structures/algorithms---level-2/README.md b/algorithms---data-structures/algorithms---level-2/README.md
new file mode 100644
index 0000000..aa7afb4
--- /dev/null
+++ b/algorithms---data-structures/algorithms---level-2/README.md
@@ -0,0 +1,10 @@
+# Intro
+
+# Algorithms - Level 2
+
+We will be practicing our algorithmic skills in this assignment 💪 🏋️
+
+
+|||important
+make sure you practice efficient and clean code
+|||
\ No newline at end of file
diff --git a/algorithms---data-structures/algorithms---level-3/README.md b/algorithms---data-structures/algorithms---level-3/README.md
new file mode 100644
index 0000000..6e50347
--- /dev/null
+++ b/algorithms---data-structures/algorithms---level-3/README.md
@@ -0,0 +1,11 @@
+# Word Score
+
+# Word Score
+Given a string of words, you need to find the highest scoring word. Each letter of a word scores points according to it's position in the alphabet: a = 1, b = 2, c = 3 etc.
+- You need to return the highest scoring word as a string.
+- If two words score the same, return the word that appears earliest in the original string.
+- All letters will be lowercase and all inputs will be valid.
+
+
+**Example:**
+"if you are a winner" => "winner"
\ No newline at end of file
diff --git a/algorithms---data-structures/autocomplete-trie-project--optional-/README.md b/algorithms---data-structures/autocomplete-trie-project--optional-/README.md
new file mode 100644
index 0000000..4bac53b
--- /dev/null
+++ b/algorithms---data-structures/autocomplete-trie-project--optional-/README.md
@@ -0,0 +1,15 @@
+# Intro
+
+
+
+
+
+In this project you'll be using a type of search tree called a Trie (also known as a prefix tree) to create an auto complete app!
+
+
+
+You'll have to create an `autoCompleteTree` class and populate the trie based on an array of words. Then you'll write methods to search for words, and auto complete the prefix of a word.
+
+
+
+In the end, you can create a UI to show your awesome autocomplete app!
\ No newline at end of file
diff --git a/algorithms---data-structures/big-o---time-complexity--js-/README.md b/algorithms---data-structures/big-o---time-complexity--js-/README.md
new file mode 100644
index 0000000..a11ee10
--- /dev/null
+++ b/algorithms---data-structures/big-o---time-complexity--js-/README.md
@@ -0,0 +1,3 @@
+# Complexity Overview
+
+
\ No newline at end of file
diff --git a/algorithms---data-structures/data-structures/README.md b/algorithms---data-structures/data-structures/README.md
new file mode 100644
index 0000000..1e7d9d0
--- /dev/null
+++ b/algorithms---data-structures/data-structures/README.md
@@ -0,0 +1,93 @@
+# Intro
+
+In the world of programming we need a way to store data. For this purpose, we have what's known as **data structures**.
+
+
+
+You already know (at least) two data structures by now:
+
+1. Arrays
+2. Objects
+
+
+
+When we talk about data structures, we usually consider the **complexity** of:
+
+- An **insert** into the data structure
+- A **find** from the data structure
+- An **update**
+- A **remove**
+
+
+
+For instance, say we had this array:
+
+```
+let people = []
+```
+
+The complexity of **insert**ing into an array is **O( 1 )**:
+
+```
+let p1 = {
+ id: "a0x3",
+ name: "Candice",
+ age: 23
+}
+
+let p2 = {
+ id: "q113z",
+ name: "Jay",
+ age: 16
+}
+
+let p3 = {
+ id: "kl991",
+ name: "Drew",
+ age: 31
+}
+
+people.push(p1)
+people.push(p2)
+people.push(p3)
+```
+
+
+Since `push` always inserts an item to the _end_ of the array, it's only one operation.
+
+That's pretty simple. However, to **find** something, it's typically* **O( n )**:
+*generally we don't know where elements are in the array
+
+```
+const findPerson = function (personID) {
+ for (let p of people) {
+ if (p.id === personID) {
+ return p
+ }
+ }
+}
+```
+
+
+To **update** an item in an array is also **O( n )**:
+
+```
+const updatePerson = function (personID, newName) {
+ let person = findPerson(personID)
+ person.name = newName
+}
+```
+
+In order to **update** something in an array, we must first **find** it - so even though the update itself is **O( 1 )**, we're forced to use `findPerson` in order to understand _which_ person to update - and that's **O( n )**.
+
+## Spot check
+What's the complexity for the **remove** in an array?
+
+
+ Click here to reveal the answer.
+
+
+Also **O( n )** - first find it (using an index), then use the index to `splice`
+
+See [solution](https://codepen.io/ElevationPen/pen/jjMoYY).
+
\ No newline at end of file
diff --git a/algorithms---data-structures/full-stack-interview-questions/README.md b/algorithms---data-structures/full-stack-interview-questions/README.md
new file mode 100644
index 0000000..629a15b
--- /dev/null
+++ b/algorithms---data-structures/full-stack-interview-questions/README.md
@@ -0,0 +1,11 @@
+# Intro
+
+In this lesson we'll talk about the different type of interview questions and how to answer them. In general, we'll look at the General Knowledge questions and Problem Solving questions.
+
+
+
+You'll also find a list of sample interview questions after each section so that you can practice. At the end of this lesson there are some extra resources to help you improve your interview skills even more.
+
+
+
+Let's get started.
\ No newline at end of file
diff --git a/algorithms---data-structures/fullstack-15/README.md b/algorithms---data-structures/fullstack-15/README.md
new file mode 100644
index 0000000..b748008
--- /dev/null
+++ b/algorithms---data-structures/fullstack-15/README.md
@@ -0,0 +1,23 @@
+# Intro
+
+Being a fullstack developer is not about learning all the syntax by heart, but rather about understanding the full. stack. of development that creates an app.
+
+
+
+You should be intimately familiar with this flow:
+
+
+
+
+
+
+
+It should be second nature to you. As clear as a summer's day. You should understand it in your _bones_. This is it - this is **the full stack**.
+
+
+
+And to make sure you _really_ get it, you're going to write a fullstack project.
+
+From scratch.
+
+**In 15 minutes** or fewer.
\ No newline at end of file
diff --git a/algorithms---data-structures/gold-rush--matrix-mini-project/README.md b/algorithms---data-structures/gold-rush--matrix-mini-project/README.md
new file mode 100644
index 0000000..b79093d
--- /dev/null
+++ b/algorithms---data-structures/gold-rush--matrix-mini-project/README.md
@@ -0,0 +1,53 @@
+# Intro & Setup
+
+
+
+
+
+#### **INTRO**
+
+Though there are many usecases for matrices (data science, image processsing, graphics, etc) - games are some of the most fun you can have with a Matrix.
+
+In this mini project you will create a game whose entire logic is based on a 2D array (a matrix), and then use your HTML/CSS know-how to make the game playable in the browser.
+
+
+
+----------
+
+
+
+#### **SETUP**
+
+
+
+You'll be creating this project a-la MVC, so go ahead and create the following files:
+
+- `Matrix.js` - a file to hold your base `Matrix` data structure
+ - Feel free to use a class you've already written in the past
+- `GoldRush.js` - here you'll create your new matrix, it should `extend` from `Matrix`
+- `Renderer.js` - this will have your `Renderer` class with at least one method: `renderBoard`
+ - The `renderBoard` method should receive a matrix, and display it on the screen
+- `main.js` - your controller file: this will load the initial game and react to user input
+
+
+Then, of course, you'll have your HTML, CSS files, and if you would like to take this up to the cloud, a `server.js` file etc.
+
+
+
+----------
+
+
+
+#### **REQUIREMENTS**
+
+
+
+In this game there should be two players.
+
+
+
+Player 1 will control their player using the **WASD** keys, and Player 2 should use the **IJKL** keys.
+
+
+
+A player may not move to a location on the board that has a wall or another player, but they should get 10 points any time they move to a location with a coin on it. In this case, the coin should disappear from the board.
\ No newline at end of file
diff --git a/algorithms---data-structures/matrices/README.md b/algorithms---data-structures/matrices/README.md
new file mode 100644
index 0000000..3f5bf58
--- /dev/null
+++ b/algorithms---data-structures/matrices/README.md
@@ -0,0 +1,3 @@
+# Overview
+
+
\ No newline at end of file
diff --git a/algorithms---data-structures/recursion/README.md b/algorithms---data-structures/recursion/README.md
new file mode 100644
index 0000000..c3604d7
--- /dev/null
+++ b/algorithms---data-structures/recursion/README.md
@@ -0,0 +1,3 @@
+# Overview
+
+
\ No newline at end of file
diff --git a/algorithms---data-structures/stacks---queues/README.md b/algorithms---data-structures/stacks---queues/README.md
new file mode 100644
index 0000000..22c95a8
--- /dev/null
+++ b/algorithms---data-structures/stacks---queues/README.md
@@ -0,0 +1,7 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-1834015019)
+{Check It!|assessment}(multiple-choice-2341890422)
+{Check It!|assessment}(multiple-choice-2389998139)
+{Check It!|assessment}(multiple-choice-2651489647)
+{Check It!|assessment}(multiple-choice-3796667379)
\ No newline at end of file
diff --git a/algorithms---data-structures/stacks---queues/_sidebar.md b/algorithms---data-structures/stacks---queues/_sidebar.md
new file mode 100644
index 0000000..38ce991
--- /dev/null
+++ b/algorithms---data-structures/stacks---queues/_sidebar.md
@@ -0,0 +1,10 @@
+- [⬅ Back to Algorithms Data Structures](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Extension](./Extension.md)
+- [Intro](./Intro.md)
+- [Overview](./Overview.md)
+- [Queues](./Queues.md)
+- [Spot Check](./Spot-Check.md)
+- [Stacks](./Stacks.md)
\ No newline at end of file
diff --git a/algorithms---data-structures/trees-and-binary-search-trees/README.md b/algorithms---data-structures/trees-and-binary-search-trees/README.md
new file mode 100644
index 0000000..8fa6fda
--- /dev/null
+++ b/algorithms---data-structures/trees-and-binary-search-trees/README.md
@@ -0,0 +1,22 @@
+# Intro
+
+
+
+
+
+####
+
+Tree's are a popular structure for organizing data that is non-linear. In this lesson we will review:
+
+
+
+- What are Trees
+- The parts of a Tree
+- How to create a basic Tree
+- Binary Search Trees
+- Inserting Nodes in a BST
+- Some common use cases of BSTs
+
+
+
+Tree's can be confusing, so read carefully and follow along, we won't _leaf_ you behind!
\ No newline at end of file
diff --git a/archive/README.md b/archive/README.md
new file mode 100644
index 0000000..266fb37
--- /dev/null
+++ b/archive/README.md
@@ -0,0 +1,3 @@
+# Archive
+
+- [Github Code Review Setup](github-code-review-setup/README.md)
\ No newline at end of file
diff --git a/archive/github-code-review-setup/README.md b/archive/github-code-review-setup/README.md
new file mode 100644
index 0000000..ca9770a
--- /dev/null
+++ b/archive/github-code-review-setup/README.md
@@ -0,0 +1,49 @@
+# Instructions
+
+In order for us to review your code, you’ll need to complete the following steps.
+
+
+
+1. Download and install NodeJS, you can do so [here](https://nodejs.org/en/download/). Don't worry about what Node is (we'll learn about it eventually).
+2. Once you have Node, go to the root directory of your project (in the terminal) and run npm init and click enter several times until you get back to the command line (you shouldn't be worried about what it does right now)
+3. Then run npm i elevation-pr
+4. Please note the following before continuing to the next steps
+a. Make sure the folder is already a git repo
+b. Make sure it already has a commit (ideally you should have quite a few commits if you were committing correctly)
+c. Make sure it’s linked to a remote repo on Github
+5. Run npm run review in the terminal
+6. Go to Github and click Pull Requests
+
+
+
+
+
+
+
+
+Then click New Pull Request
+
+
+
+
+
+
+
+
+
+Now, set the base to be review (you can change this through the drop down), and the compare should be set to master (should be set to that by default)
+
+
+
+
+
+
+
+
+You will be able to click the green button "create pull request".
+
+Don't forget to add a title and press the "create pull request" button again
+
+
+
+That's it. Copy the link to the repo and submit it with [this form](https://docs.google.com/forms/d/e/1FAIpQLSc0BJtMVATSc83zYCKwnfZX-jHQ6x_A10grsQAXy6nWCVWVOw/viewform).
\ No newline at end of file
diff --git a/asynchronous-codes/README.md b/asynchronous-codes/README.md
new file mode 100644
index 0000000..fa27165
--- /dev/null
+++ b/asynchronous-codes/README.md
@@ -0,0 +1,6 @@
+# Asynchronous Codes
+
+- [Async Await](async-await/README.md)
+- [Async Js Callback Event Loop](async-js--callback---event-loop/README.md)
+- [Render App Deployment Service ](render--app-deployment-service-/README.md)
+- [Weather App Full Stack Project](weather-app-full-stack-project/README.md)
\ No newline at end of file
diff --git a/asynchronous-codes/async-await/README.md b/asynchronous-codes/async-await/README.md
new file mode 100644
index 0000000..2fc064e
--- /dev/null
+++ b/asynchronous-codes/async-await/README.md
@@ -0,0 +1,3 @@
+# Overview - Video
+
+
\ No newline at end of file
diff --git a/asynchronous-codes/async-js--callback---event-loop/README.md b/asynchronous-codes/async-js--callback---event-loop/README.md
new file mode 100644
index 0000000..8e30535
--- /dev/null
+++ b/asynchronous-codes/async-js--callback---event-loop/README.md
@@ -0,0 +1,83 @@
+# Asynchronous Callbacks
+
+**_Main point:_** _A callback is just a function that is passed into another function to be called later (we already know that). An "asynchronous callback" is a callback function that is called later, but does not block the Call Stack, and therefore allows other functions to keep being added and returned off the Call Stack as it waits to be executed. In other words, they seem to violate the rules of the Call Stack. We'll find out in a moment how this is handled._
+
+
+
+Let's look at an example of an asynchronous callback. Copy/paste the following into your console. Notice that `setTimeout` takes an anonymous callback function. This function will be invoked "asynchronously".
+
+
+
+```js
+function firstFunc () {
+ setTimeout(function () {
+ console.log('I have to go first.')
+ }, 3000)
+};
+
+function secondFunc () {
+ console.log('Then I can go');
+};
+
+firstFunc();
+secondFunc();
+```
+
+
+This example is very similar to the example we gave in the **Blocking** section. However, this time, we replaced the `pause` function with `setTimeout`.
+
+
+
+One might expect that the result here would be the same - `'I have to go first.'` would log, then (3 seconds later) l, `'Then I can go'` would be logged. However, as you see, `firstFunc` is not blocking `secondFunc` from running. That must mean that `setTimeout` is being added to the callstack with a delay, unlike `pause`, which was added to the callstack (and prevented `firstFunc` from returning). Let's break down each example:
+
+
+
+**_Blocking Example Using_** **_`pause`_**
+
+
+
+1. `firstFunc` is added to the Call Stack.
+
+
+
+
+
+
+
+2. `pause` is added to the callstack. Now `firstFunc` will not be able to run until `pause` is finished and taken off the Call Stack.
+
+
+
+
+
+
+
+
+3. Finally `pause` is finished and taken off the Call Stack (after 3 seconds), then `firstFunc` is finished and taken off the Call Stack, then allowing `secondFunc` to be placed on the Call Stack.
+
+
+
+
+
+
+
+**_Non-blocking (asynchronous) Example Using_** **_`setTimeout`_**
+
+
+
+1. Just like in our previous example, `firstFunc` is added to the Call Stack.
+
+
+
+
+
+
+2. Then, `firstFunc` finishes (even though the console log hasn't happened yet) and is taken off the Call Stack. This allows `secondFunc` to be placed on the Call Stack and execute. Unlike `pause`, `setTimout` is never added to the Call Stack, yet it still runs after 3 seconds. So what did our Javascript Interpreter do with `setTimeout`?
+
+
+
+
+
+What we need to understand is that setTimeOut registers inside the call stack, however it passes its delay to be reigstered to the webAPI (the browser)
+
+then the browser deals with the delay and passes on the callback back to the javascript event loop to run the callback in its callback queue
\ No newline at end of file
diff --git a/asynchronous-codes/async-js--callback---event-loop/_sidebar.md b/asynchronous-codes/async-js--callback---event-loop/_sidebar.md
new file mode 100644
index 0000000..a1892f4
--- /dev/null
+++ b/asynchronous-codes/async-js--callback---event-loop/_sidebar.md
@@ -0,0 +1,10 @@
+- [⬅ Back to Asynchronous Codes](../README.md)
+
+- [Asynchronous Callbacks](./Asynchronous-Callbacks.md)
+- [Blocking](./Blocking.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Conclusion](./Conclusion.md)
+- [Concurrency And The Event Loop](./Concurrency-and-the-Event-Loop.md)
+- [Overview](./Overview.md)
+- [The Call Stack](./The-Call-Stack.md)
+- [The Event Loop](./The-Event-Loop.md)
\ No newline at end of file
diff --git a/asynchronous-codes/render--app-deployment-service-/README.md b/asynchronous-codes/render--app-deployment-service-/README.md
new file mode 100644
index 0000000..e18145e
--- /dev/null
+++ b/asynchronous-codes/render--app-deployment-service-/README.md
@@ -0,0 +1,7 @@
+# Done
+
+And that's it! Your app is live for the world to see! This is incredibly powerful.
+
+
+
+Enjoy!
\ No newline at end of file
diff --git a/asynchronous-codes/render--app-deployment-service-/_sidebar.md b/asynchronous-codes/render--app-deployment-service-/_sidebar.md
new file mode 100644
index 0000000..a054d78
--- /dev/null
+++ b/asynchronous-codes/render--app-deployment-service-/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Asynchronous Codes](../README.md)
+
+- [Done](./Done.md)
+- [Intro](./Intro.md)
\ No newline at end of file
diff --git a/asynchronous-codes/weather-app-full-stack-project/README.md b/asynchronous-codes/weather-app-full-stack-project/README.md
new file mode 100644
index 0000000..78e3a5b
--- /dev/null
+++ b/asynchronous-codes/weather-app-full-stack-project/README.md
@@ -0,0 +1,69 @@
+# Backend
+
+#### **SERVER**
+
+
+
+Your express server should have a normal set up. Make sure to include a model folder a fitting file.
+
+
+
+----------
+
+
+
+#### **DB SCHEMA**
+
+
+
+Make sure your schema contains the following:
+
+- name
+- temperature
+- condition
+- conditionPic
+
+
+
+----------
+
+#### **EXTERNAL API**
+
+
+
+There are [a lot](https://www.programmableweb.com/news/top-10-weather-apis/analysis/2014/11/13) of different weather APIs you can work with. We recommend using [open weather map](https://openweathermap.org/) as it's free and fairly simple. But you're free to use a different API if you'd like.
+
+
+
+**Note:** _If you choose to use a different API, do not spend more than 30 minutes trying to figure it out, as this is not the point of this project. The rest of the API directions will be tailored for open weather map_.
+
+
+
+You'll need to sign up in whichever way you prefer. Once you do, you'll be redirected to a page which provides you with your API key. You'll need to use this to query the API, so save it as a variable in your server somewhere.
+
+
+
+Now that you have access to the external API:
+
+- Read over the documentation, it's really thorough and nice
+- On your server, set up a route that makes a request to the API
+- Query the API for a _city_ of your choice, you wan't the current data to start with
+- Use postman to test at this point
+
+
+
+----------
+
+
+
+#### **SERVER ROUTES**
+
+
+
+You should have the following routes on your server:
+
+- A route that takes a `cityName` parameter and return the city data in a response.
+ - Hint: The city is not yet saved in your DB.
+- A route that finds all of the city data saved in your DB, and send it to the client
+- A route that saves a new `City` to your DB (notice this is an object city and not city name)
+- A route that takes a `cityName` parameter and delete the correct city from your DB
\ No newline at end of file
diff --git a/asynchronous-codes/weather-app-full-stack-project/_sidebar.md b/asynchronous-codes/weather-app-full-stack-project/_sidebar.md
new file mode 100644
index 0000000..cbf5df2
--- /dev/null
+++ b/asynchronous-codes/weather-app-full-stack-project/_sidebar.md
@@ -0,0 +1,9 @@
+- [⬅ Back to Asynchronous Codes](../README.md)
+
+- [Backend](./Backend.md)
+- [Checkpoint](./Checkpoint.md)
+- [Design](./Design.md)
+- [Done](./Done.md)
+- [Extensions](./Extensions.md)
+- [Frontend](./Frontend.md)
+- [Overview](./Overview.md)
\ No newline at end of file
diff --git a/career-development/README.md b/career-development/README.md
new file mode 100644
index 0000000..853a93a
--- /dev/null
+++ b/career-development/README.md
@@ -0,0 +1,7 @@
+# Career Development
+
+- [Cv Workshop](cv-workshop/README.md)
+- [How To Pass An Interview](how-to-pass-an-interview/README.md)
+- [Linkedin](linkedin/README.md)
+- [Self Intro Submission Link](self-intro---submission-link/README.md)
+- [Story Telling](story-telling/README.md)
\ No newline at end of file
diff --git a/career-development/_sidebar.md b/career-development/_sidebar.md
new file mode 100644
index 0000000..55a8576
--- /dev/null
+++ b/career-development/_sidebar.md
@@ -0,0 +1,6 @@
+- Career Development
+ - [Cv Workshop](cv-workshop/README.md)
+ - [How To Pass An Interview](how-to-pass-an-interview/README.md)
+ - [Linkedin](linkedin/README.md)
+ - [Self Intro Submission Link](self-intro---submission-link/README.md)
+ - [Story Telling](story-telling/README.md)
\ No newline at end of file
diff --git a/career-development/cv-workshop/README.md b/career-development/cv-workshop/README.md
new file mode 100644
index 0000000..0afddf6
--- /dev/null
+++ b/career-development/cv-workshop/README.md
@@ -0,0 +1,7 @@
+# Download
+
+You can preview here
+
+
+
+or [Download](.guides/download/CVworkshop.pdf)
\ No newline at end of file
diff --git a/career-development/cv-workshop/_sidebar.md b/career-development/cv-workshop/_sidebar.md
new file mode 100644
index 0000000..62340e8
--- /dev/null
+++ b/career-development/cv-workshop/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Career Development](../README.md)
+
+- [Download](./Download.md)
+- [Intro](./Intro.md)
\ No newline at end of file
diff --git a/career-development/how-to-pass-an-interview/README.md b/career-development/how-to-pass-an-interview/README.md
new file mode 100644
index 0000000..fd19565
--- /dev/null
+++ b/career-development/how-to-pass-an-interview/README.md
@@ -0,0 +1,7 @@
+# Download
+
+You can preview here
+
+
+
+or [Download](.guides/download/How_to_pass_an_interview.pdf)
\ No newline at end of file
diff --git a/career-development/how-to-pass-an-interview/_sidebar.md b/career-development/how-to-pass-an-interview/_sidebar.md
new file mode 100644
index 0000000..bd4bec6
--- /dev/null
+++ b/career-development/how-to-pass-an-interview/_sidebar.md
@@ -0,0 +1,3 @@
+- [⬅ Back to Career Development](../README.md)
+
+- [Download](./Download.md)
\ No newline at end of file
diff --git a/career-development/linkedin/README.md b/career-development/linkedin/README.md
new file mode 100644
index 0000000..297e124
--- /dev/null
+++ b/career-development/linkedin/README.md
@@ -0,0 +1,7 @@
+# Download
+
+You can preview here
+
+
+
+or [Download](.guides/download/LinkedIn.pdf)
\ No newline at end of file
diff --git a/career-development/linkedin/_sidebar.md b/career-development/linkedin/_sidebar.md
new file mode 100644
index 0000000..62340e8
--- /dev/null
+++ b/career-development/linkedin/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Career Development](../README.md)
+
+- [Download](./Download.md)
+- [Intro](./Intro.md)
\ No newline at end of file
diff --git a/career-development/self-intro---submission-link/README.md b/career-development/self-intro---submission-link/README.md
new file mode 100644
index 0000000..446a711
--- /dev/null
+++ b/career-development/self-intro---submission-link/README.md
@@ -0,0 +1,13 @@
+# Self Introduction
+
+Please prepare yourself to record a video after submitting the **CV** & **LinkedIn** in the **Submission Link**.
+
+
+Here are the Questions:
+
+
+- Please tell me about yourself *(Up to 2 minutes)*
+
+- Please tell me a bit about your relevant professional experience *(Up to 1.5 minutes)*
+
+- Please give me an example of an accomplishment you have accomplished *(Up to 1.5 minutes)*
\ No newline at end of file
diff --git a/career-development/self-intro---submission-link/_sidebar.md b/career-development/self-intro---submission-link/_sidebar.md
new file mode 100644
index 0000000..2039e59
--- /dev/null
+++ b/career-development/self-intro---submission-link/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Career Development](../README.md)
+
+- [Self Introduction](./Self-introduction.md)
+- [Submission](./Submission.md)
\ No newline at end of file
diff --git a/career-development/story-telling/README.md b/career-development/story-telling/README.md
new file mode 100644
index 0000000..5fc6b7b
--- /dev/null
+++ b/career-development/story-telling/README.md
@@ -0,0 +1,7 @@
+# Download
+
+You can preview here
+
+
+
+or [Download](.guides/download/Storytelling.pdf)
\ No newline at end of file
diff --git a/career-development/story-telling/_sidebar.md b/career-development/story-telling/_sidebar.md
new file mode 100644
index 0000000..bd4bec6
--- /dev/null
+++ b/career-development/story-telling/_sidebar.md
@@ -0,0 +1,3 @@
+- [⬅ Back to Career Development](../README.md)
+
+- [Download](./Download.md)
\ No newline at end of file
diff --git a/challenges/README.md b/challenges/README.md
new file mode 100644
index 0000000..47f360c
--- /dev/null
+++ b/challenges/README.md
@@ -0,0 +1,5 @@
+# Challenges
+
+- [Iterator Challenge](iterator-challenge/README.md)
+- [Iterator Solution](iterator-solution/README.md)
+- [Splice Challenge](splice-challenge/README.md)
\ No newline at end of file
diff --git a/challenges/iterator-challenge/README.md b/challenges/iterator-challenge/README.md
new file mode 100644
index 0000000..efa8b7d
--- /dev/null
+++ b/challenges/iterator-challenge/README.md
@@ -0,0 +1,33 @@
+# The Challenge
+
+Create an **object** which implements the **iterable protocol** so that when we iterate over the element with a `for of` loop it will print **only** the even numbers.
+The object should contain 10 random numbers, you can initials them hard coded at first.
+
+
+So if your obejct is called `myObject`, and it contains the numbers ``[11,13,14,66,67,69,234,456,2,1]``,
+
+then following code:
+```
+const myObject = {
+// your code here
+}
+
+for (let x of myObject) {
+ console.log(x)
+}
+```
+
+should print:
+```
+14
+66
+234
+456
+2
+```
+
+
+
+Here is a [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) to start you off.
+
+Good Luck!
\ No newline at end of file
diff --git a/challenges/iterator-solution/README.md b/challenges/iterator-solution/README.md
new file mode 100644
index 0000000..7944ca8
--- /dev/null
+++ b/challenges/iterator-solution/README.md
@@ -0,0 +1,70 @@
+# Solutions
+
+# Iterator Solution 1
+
+```
+const myIterator = {
+ current: 0,
+ numbers: [11,13,14,66,67,69,234,456,2,1],
+ next: function () {
+ while (this.current <= this.numbers.length && this.numbers[this.current] % 2 !== 0){
+ this.current++;
+ }
+ if (this.current >= this.numbers.length) {
+ return {
+ done: true
+ }
+ }
+ else {
+ const val = this.numbers[this.current]
+ this.current++;
+ return {
+ value: val,
+ done: false
+ }
+ }
+ },
+ [Symbol.iterator]: function () { return this; }
+};
+
+for (let x of myIterator) {
+ console.log(x)
+}
+```
+
+# Iterator Solution 2
+
+```
+const myIterable = {
+ numbers: [11, 13, 14, 66, 67, 69, 234, 456, 2, 1],
+ [Symbol.iterator]: function () {
+ let self = this
+ return {
+ current: 0,
+ next: function () {
+ while (this.current <= self.numbers.length && self.numbers[this.current] % 2 !== 0){
+ this.current++;
+ }
+ if (this.current >= self.numbers.length) {
+ return {
+ done: true
+ }
+ }
+ else {
+ const val = self.numbers[this.current]
+ this.current++;
+ return {
+ value: val,
+ done: false
+ }
+ }
+ },
+ }
+ }
+};
+
+for (let x of myIterable) {
+ console.log(x)
+}
+
+```
\ No newline at end of file
diff --git a/challenges/splice-challenge/README.md b/challenges/splice-challenge/README.md
new file mode 100644
index 0000000..0083dc8
--- /dev/null
+++ b/challenges/splice-challenge/README.md
@@ -0,0 +1,130 @@
+# The Challenge
+
+Implement the array splice method.
+
+You can read about it here:
+
+[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
+
+Try to be precise and thorough, read all the small details, and implement all functionalities.
+
+You can use the following code to override the original splice method:
+
+
+```js
+const splice = function(){
+ // write your code here
+}
+```
+
+
+Requirements:
+
+1. Define parameters for the functions
+
+2. Note that you need to pass the array as a parameter too!
+
+
+
+Make sure the tests pass (you get the correct prints)!
+
+
+
+Tests:
+
+
+```js
+// remove 1 element
+let arr = [1,2,3]
+splice(arr, 0,1);
+console.log(arr); //should be [2,3]
+
+// add 1 element
+arr = [1,2,3]
+splice(arr, 0,0,0);
+console.log(arr); //should be [0,1,2,3]
+
+// add 2 elements
+arr = [1,2,3]
+splice(arr,0,0,-1,0);
+console.log(arr); //should be [-1,0,1,2,3]
+
+// replace 1 element
+arr = [1,2,3]
+splice(arr,1,1,55);
+console.log(arr); //should be [1,55,3]
+
+// delete all elements from index to end
+arr = [1,2,3,4,5]
+splice(arr,1);
+console.log(arr); //should be [1]
+
+// returns array of deleted elements
+arr = [1,2,3]
+let deleted = splice(arr,1);
+console.log(deleted); //should be [2,3]
+
+// returns an array of the deleted element (1 element)
+arr = [1,2,3]
+deleted = splice(arr,1,1);
+console.log(deleted); //should be [2]
+
+// returns an empty array when no elements are deleted
+arr = [1,2,3]
+deleted = splice(arr,1,0,5);
+console.log(deleted); //should be []
+```
+
+
+
+
+If you want more challenge you can override the native splice function like this
+```js
+// overriding the native splice method
+Array.prototype.splice = function(){
+ // write your code here
+}
+```
+
+
+and then run these tests:
+```js
+// remove 1 element
+let arr = [1,2,3]
+arr.splice(0,1);
+console.log(arr); //should be [2,3]
+
+// add 1 element
+arr = [1,2,3]
+arr.splice(0,0,0);
+console.log(arr); //should be [0,1,2,3]
+
+// replace 1 element
+arr = [1,2,3]
+arr.splice(1,1,55);
+console.log(arr); //should be [1,55,3]
+
+// delete all elements from index to end
+arr = [1,2,3,4,5]
+arr.splice(1);
+console.log(arr); //should be [1]
+
+// returns array of deleted elements
+arr = [1,2,3]
+let deleted = arr.splice(1);
+console.log(deleted); //should be [2,3]
+
+// returns an array of the deleted element (1 element)
+arr = [1,2,3]
+deleted = arr.splice(1,1);
+console.log(deleted); //should be [2]
+
+// returns an empty array when no elements are deleted
+arr = [1,2,3]
+deleted = arr.splice(1,0,5);
+console.log(deleted); //should be []
+```
+
+Note: Place your final code in the `splice.js` file which is in the root folder here on Codio (see on the left side of your screen)
+
+Good Luck!
\ No newline at end of file
diff --git a/css-extra/README.md b/css-extra/README.md
new file mode 100644
index 0000000..de78212
--- /dev/null
+++ b/css-extra/README.md
@@ -0,0 +1,5 @@
+# Css Extra
+
+- [Css 3 Variables Animations](css-3--variables---animations/README.md)
+- [Css Less](css-less/README.md)
+- [Materialize Css](materialize-css/README.md)
\ No newline at end of file
diff --git a/css-extra/css-3--variables---animations/README.md b/css-extra/css-3--variables---animations/README.md
new file mode 100644
index 0000000..a345e37
--- /dev/null
+++ b/css-extra/css-3--variables---animations/README.md
@@ -0,0 +1,3 @@
+# Variables Overview
+
+
\ No newline at end of file
diff --git a/css-extra/css-less/README.md b/css-extra/css-less/README.md
new file mode 100644
index 0000000..2123d7b
--- /dev/null
+++ b/css-extra/css-less/README.md
@@ -0,0 +1,47 @@
+# Intro
+
+For all the power of CSS3, sometimes we need more. And, ironically, [CSS Less](http://lesscss.org/)gives us more. It stands for **Le**aner **S**tyle **S**heets.
+
+
+
+CSS Less is one of the number of **CSS pre-processors** out there which allow us to write "plain" CSS with more convenience, then gets **compiled** back directly into CSS.
+
+
+
+Note that **the browser always reads normal CSS**, but when working with CSS Less we will write in a `.less` file.
+
+
+
+CSS Less gives us quite a few tools, but in this lesson we will focus on:
+
+- Nesting
+- Extend
+- Mixins
+
+
+
+----------
+
+
+
+#### **SETUP**
+
+
+
+Since CSS Less is not a browser-native technology, we have to first install it, and do a bit of setup in our IDE.
+
+
+
+Conveniently, **you can** **`npm install less`** directly into your project - and there is **no need to require it** anywhere.
+
+
+
+The next part of the setup is to **install the** [**Easy Less**](https://github.com/mrcrowl/vscode-easy-less) **extension in VS Code**. This will automatically compile (i.e. "translate") your `.less` files into `.css` files whenever you save.
+
+
+
+That's all! Now **create a folder called** `artisan`**, and in it an** **`index.html`** **and** **`style.less`** **file**, and let's begin.
+
+
+
+**Note:** you do **not** have to create a `.css` file - the extension will create it for you (once you refresh your VS Code), but you do **have to connect your HTML and CSS** files regularly, to your `.css` file which doesn't exist yet. And henceforth in this lesson, **only write CSS code in your** **`.less`** **file**.
\ No newline at end of file
diff --git a/css-extra/materialize-css/README.md b/css-extra/materialize-css/README.md
new file mode 100644
index 0000000..c74fed8
--- /dev/null
+++ b/css-extra/materialize-css/README.md
@@ -0,0 +1,3 @@
+# Materialize Overview
+
+
\ No newline at end of file
diff --git a/design/README.md b/design/README.md
new file mode 100644
index 0000000..6468c1e
--- /dev/null
+++ b/design/README.md
@@ -0,0 +1,6 @@
+# Design
+
+- [Behavioral Patterns](behavioral-patterns/README.md)
+- [Creational Patterns](creational-patterns/README.md)
+- [Solid Principles](solid-principles/README.md)
+- [Structural Patterns](structural-patterns/README.md)
\ No newline at end of file
diff --git a/design/behavioral-patterns/README.md b/design/behavioral-patterns/README.md
new file mode 100644
index 0000000..f096f41
--- /dev/null
+++ b/design/behavioral-patterns/README.md
@@ -0,0 +1,7 @@
+# Intro
+
+In this lesson we are going to talk about behavioral design patterns.
+Behavioral patterns are the patterns related to how objects behave and communicate with each other.
+We are going to dive into the command pattern and the visitor pattern.
+
+Let's go!
\ No newline at end of file
diff --git a/design/creational-patterns/README.md b/design/creational-patterns/README.md
new file mode 100644
index 0000000..ed4f28c
--- /dev/null
+++ b/design/creational-patterns/README.md
@@ -0,0 +1,10 @@
+# Intro
+
+Creational design patterns are those patterns that help us with creating objects a certain way or with certain needs.
+
+We are going to deep dive into these patterns:
+- Singleton
+- Builder
+- Factory
+
+Good luck
\ No newline at end of file
diff --git a/design/solid-principles/README.md b/design/solid-principles/README.md
new file mode 100644
index 0000000..91f34c4
--- /dev/null
+++ b/design/solid-principles/README.md
@@ -0,0 +1,44 @@
+# Intro
+
+You must have noticed by now, that there are many ways we can write an implementation for a specific task.
+These different implementations will affect the code's efficiency, clarity and more.
+In this lesson we are going to explore the impact of the design of our code on the maintenance, flexibility and safety of our program.
+
+We have mentioned principles that are important for high quality code such **generic code**.
+
+For example this code is what we call **hard coded**, and therefor not very flexible.
+```
+
+function initArr() {
+ let numbers = []
+
+ for (let i = 0; i < 3; i++) {
+ numbers[i] = i + 1
+ }
+ return numbers
+}
+```
+
+What if we want to initialize the array with numbers from 10 to 20?
+
+In order to make this code more generic we would want to pass the arguments of start and end to the `initArr` function.
+
+```js
+function initArr(start, end) {
+ let numbers = []
+
+ for (let i = 0; start <= end; i++, start++) {
+ numbers[i] = start
+ }
+ return numbers
+}
+```
+
+In this case we are thinking about the future uses of this code, what other cases it might need to support, such as different numbers we might want to initialize in the array, and which code modifications will we have to do to support these changes. So principles like generic code, helps us write more flexible and easy to maintain code!
+
+# OOD
+In this chapter we will focus on **OOD** (Object Oriented Design) principles. We are going to focus on modules (which can be Classes or built-in Objects) and their interaction with one another.
+
+# SOLID
+There are many approaches and principles to guide us, but now we will focus on 5 important principles called **SOLID principles**.
+These principles were introduced by Robert C. Martin, aka Uncle Bob in 2000, and swiftly became very popular.
\ No newline at end of file
diff --git a/design/structural-patterns/README.md b/design/structural-patterns/README.md
new file mode 100644
index 0000000..1f70de3
--- /dev/null
+++ b/design/structural-patterns/README.md
@@ -0,0 +1,90 @@
+# Adapter
+
+An Adapter pattern acts as a connector between two incompatible interfaces that otherwise cannot be connected directly. An Adapter wraps an existing class with a new interface so that it becomes compatible with the client’s interface.
+
+Using this pattern is necessary mostly when using closed classes that cannot be modified.
+We can wrap this class using composition, and add the functionality required by the interface.
+
+Lets look at an example (based on geeksforgeeks.org).
+In this example, we have `Bird`s, who can `fly()` and `makeSound()`.
+We also have a `ToyDuck` which can `squeak()`.
+
+This is the `Bird` interface:
+```
+interface Bird {
+ fly(): void;
+ makeSound(): void;
+}
+```
+This is the `Sparrow` class which implements the `Bird` interface:
+
+```
+class Sparrow implements Bird {
+ fly(): void {
+ console.log('Flying');
+ }
+ makeSound(): void {
+ console.log('Chirp Chirp');
+ }
+}
+```
+This is the `ToyDuck` interface:
+```
+interface ToyDuck {
+ squeak(): void;
+}
+```
+And a `PlasticDuck` that implements the `ToyDuck` interface:
+```
+class PlasticDuck implements ToyDuck {
+ squeak(): void {
+ console.log('Squeak');
+ }
+}
+```
+These two interfaces, and the two implementing classes, have nothing to do with each other.
+They don't have common methods or any relationship.
+But what if, for our own reasons, we wanted to use a `Bird` as a `ToyDuck`?
+Well, then we will need an adapter.
+
+```
+class BirdAdapter implements ToyDuck {
+ private bird: Bird;
+
+ constructor(bird: Bird) {
+ this.bird = bird;
+ }
+
+ squeak(): void {
+ this.bird.makeSound();
+ }
+}
+```
+This adapter wraps a `Bird`, and implements `ToyDuck`.
+It uses the `Bird`'s `makeSound()` to implement the `ToyDuck` squeak.
+Meaning that the client can now use a `Bird` as a `ToyDuck` since it now has the ability to `squeak()`.
+For the client to use a `Bird` as a `ToyDuck`, it only needs to wrap it with our `BirdAdapter`:
+```
+const sparrow: Sparrow = new Sparrow();
+const toyDuck: ToyDuck = new PlasticDuck();
+
+const birdAdapter: BirdAdapter = new BirdAdapter(sparrow);
+
+console.log("Sparrow:");
+sparrow.fly();
+sparrow.makeSound();
+
+console.log("ToyDuck:");
+toyDuck.squeak();
+
+console.log("BirdAdapter:");
+birdAdapter.squeak();```
+This code prints:
+```
+Sparrow:
+Flying
+Chirp Chirp
+ToyDuck:
+Squeak
+BirdAdapter:
+Chirp Chirp
\ No newline at end of file
diff --git a/design/structural-patterns/_sidebar.md b/design/structural-patterns/_sidebar.md
new file mode 100644
index 0000000..e36ba87
--- /dev/null
+++ b/design/structural-patterns/_sidebar.md
@@ -0,0 +1,10 @@
+- [⬅ Back to Design](../README.md)
+
+- [Adapter](./Adapter.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Decorator](./Decorator.md)
+- [Exercise](./Exercise.md)
+- [Facade](./Facade.md)
+- [Intro](./Intro.md)
+- [Proxy](./Proxy.md)
+- [Spot Check](./Spot-Check.md)
\ No newline at end of file
diff --git a/environment-setup/README.md b/environment-setup/README.md
new file mode 100644
index 0000000..6cdeaf0
--- /dev/null
+++ b/environment-setup/README.md
@@ -0,0 +1,10 @@
+# Environment Setup
+
+- [Git](git/README.md)
+- [Github Setup](github-setup/README.md)
+- [Mongodb](mongodb/README.md)
+- [Node](node/README.md)
+- [Postman](postman/README.md)
+- [Slack](slack/README.md)
+- [Visual Code](visual-code/README.md)
+- [Zoom](zoom/README.md)
\ No newline at end of file
diff --git a/environment-setup/git/README.md b/environment-setup/git/README.md
new file mode 100644
index 0000000..fa8ca5f
--- /dev/null
+++ b/environment-setup/git/README.md
@@ -0,0 +1,37 @@
+# Pre Install
+
+Before we start with git, we recommend you to install a text editor to make working with git simpler.
+
+
+
+By default git works with the built-in text editor Vim.
+
+As many people find Vim not very friendly, we recommend to install one of the following options.
+
+
+
+----------
+
+
+
+**Windows users:**
+
+install at: [https://notepad-plus-plus.org/download/v7.5.9.html](https://notepad-plus-plus.org/download/v7.5.9.html%C2%A0)
+
+
+
+Or just google “Notepad++” and take the latest version.
+
+
+
+
+
+----------
+
+
+
+**Mac users:**
+
+install Atom editor: [https://atom.io/](https://atom.io/%C2%A0)
+
+Or Sublime: [https://www.sublimetext.com/3](https://www.sublimetext.com/3)
\ No newline at end of file
diff --git a/environment-setup/github-setup/README.md b/environment-setup/github-setup/README.md
new file mode 100644
index 0000000..18cc24d
--- /dev/null
+++ b/environment-setup/github-setup/README.md
@@ -0,0 +1,19 @@
+# Intro & Version Control
+
+### Git vs Github
+
+
+**Git** is software that we'll install on our computers (aka we'll be installing it locally). Once installed we can start to use it for local version control ("local" meaning for the files on your computer). Local Version control will track the changes you make on your computer. But that's just half the story. We'll need somewhere to share the code so that many people can work on it at the same time.
+
+
+
+Along with the local software, we'll use remote hosting site called **[Github](https://github.com/)** to help us in all our version control endeavors. It provides online storage for your files and it is based on Git so transferring files from your local Git repository to your remote repository on GitHub, or vice versa is really easy. Try not to confuse Git and Github.
+
+
+
+- **Git** is a free and open-source version control system. It exists on your computer (once you add it) and is primarily operated via the command-line.
+- **Github** is a company that provides a service. They use Git to provide cloud-based version control. More than that, they are a community that provides a bunch of useful tools and mechanisms to aid development work.
+
+
+
+And if you were wondering, [alternatives](https://blog.idrsolutions.com/2014/03/top-5-free-hosted-version-control-sites-compared/) to Github do exist, but remember Github is used more than almost all of them.
\ No newline at end of file
diff --git a/environment-setup/mongodb/README.md b/environment-setup/mongodb/README.md
new file mode 100644
index 0000000..537f6ed
--- /dev/null
+++ b/environment-setup/mongodb/README.md
@@ -0,0 +1,73 @@
+# Basic Commands
+
+The most basic command allows us to see what databases we have available to us. The command looks like this:
+
+
+
+
+```bash
+show dbs
+```
+
+
+
+Initially, this should only show the default DBs, something like this:
+
+
+
+```bash
+admin 0.000GB
+config 0.000GB
+local 0.000GB
+```
+
+
+To create (or access) our own DB, we have the `use` command:
+
+
+
+
+```bash
+use test-db
+```
+
+
+This command will either create a new database called `test-db`, or access an existing one if you've already created it.
+
+Now however (because it didn't exist before), if you `show dbs` again, you won't see anything new. This is because **Mongo will only show you databases that have some data in them**.
+
+As such, let's add our first "document" (we'll explain what this means later):
+
+
+
+
+```bash
+db.firstCollection.insert({name: "You"})
+```
+
+
+Now if you `show dbs` again you will see your `test-db` listed. Not only that, but if you execute this command:
+
+
+
+
+```bash
+show collections
+```
+
+
+Then you'll see `firstCollection` output - again, we'll explain what a collection is in a separate lesson.
+
+But finally, to see the data you've just created, you can run this command:
+
+
+
+
+```bash
+ db.firstCollection.find({})
+```
+----------
+
+
+
+That's it - if you've reached this point, you're ready to start learning Mongo!
\ No newline at end of file
diff --git a/environment-setup/mongodb/_sidebar.md b/environment-setup/mongodb/_sidebar.md
new file mode 100644
index 0000000..b1d70ed
--- /dev/null
+++ b/environment-setup/mongodb/_sidebar.md
@@ -0,0 +1,5 @@
+- [⬅ Back to Environment Setup](../README.md)
+
+- [Basic Commands](./Basic-Commands.md)
+- [Install Mongodb](./Install-MongoDB.md)
+- [Run Mongodb](./Run-MongoDB.md)
\ No newline at end of file
diff --git a/environment-setup/node/README.md b/environment-setup/node/README.md
new file mode 100644
index 0000000..49eab12
--- /dev/null
+++ b/environment-setup/node/README.md
@@ -0,0 +1,7 @@
+# Intro
+
+#### **NODE JS**
+
+
+
+Node JS (a.k.a Node.js, node.js, node js) is a **JavaScript runtime environment** - this just means that it's somewhere we can run JS code that's not the browser. We'll just call it Node* for simplicity.
\ No newline at end of file
diff --git a/environment-setup/postman/README.md b/environment-setup/postman/README.md
new file mode 100644
index 0000000..18d6149
--- /dev/null
+++ b/environment-setup/postman/README.md
@@ -0,0 +1,5 @@
+# Install Postman
+
+[Postman](https://www.postman.com/) is a software development tool. It enables people to test calls to APIs. You'll find out more all about that during the course. For now you just need to download this software.
+
+So go ahead and [download Postman](https://www.getpostman.com/apps), then install it on your computer.
\ No newline at end of file
diff --git a/environment-setup/slack/README.md b/environment-setup/slack/README.md
new file mode 100644
index 0000000..b237cfb
--- /dev/null
+++ b/environment-setup/slack/README.md
@@ -0,0 +1,24 @@
+# Communication
+
+All of our communication will be done through slack.
+
+once you are done with the previous steps. make sure to create a private chat between you and the Bootcamp Staff.
+
+communication with the bootcamp staff will be done in that chat, that includes updating staff on any matter including **progress** in the **Codio**, **Tardiness** and **emergencies**.
+
+you can do so by following the next steps, next to The **Direct Message** title if you hover you can see a **"+"** icon.
+
+
+
+click the icon and it should prompt a search bar.
+
+
+
+in the search bar, look up the **Bootcamp staff's names**.
+for example :
+
+- **instructor** :Lotem Hiki
+- **TA**: Ameer Jamal
+
+after adding both of them. you will create a group chat which you will communicate with the Bootcamp staff through.
+Send a **"Done"** message in the chat to let the staff know that you have done it.
\ No newline at end of file
diff --git a/environment-setup/slack/_sidebar.md b/environment-setup/slack/_sidebar.md
new file mode 100644
index 0000000..056919c
--- /dev/null
+++ b/environment-setup/slack/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Environment Setup](../README.md)
+
+- [Communication](./Communication.md)
+- [Setup](./Setup.md)
\ No newline at end of file
diff --git a/environment-setup/visual-code/README.md b/environment-setup/visual-code/README.md
new file mode 100644
index 0000000..08ca063
--- /dev/null
+++ b/environment-setup/visual-code/README.md
@@ -0,0 +1,7 @@
+# Installing
+
+We will be working with Visual Code Editor in the bootcamp.
+Theoretically, we could write our code anywhere so long as we use the proper file extension.
+However, we will be using this editor - please [download this](https://code.visualstudio.com/download) as well and make sure it's set up before the first day of class.
+
+follow instructions on the website if you are struggling to install it. it should be very simple, but if you do struggle do contact the **Bootcamp TA**
\ No newline at end of file
diff --git a/environment-setup/zoom/README.md b/environment-setup/zoom/README.md
new file mode 100644
index 0000000..f072174
--- /dev/null
+++ b/environment-setup/zoom/README.md
@@ -0,0 +1,4 @@
+# Installing
+
+We will be conduciting our online Meetings via the [ZOOM App](https://zoom.us/download).
+So please make sure to download it to your local machine.
\ No newline at end of file
diff --git a/extended-content/README.md b/extended-content/README.md
new file mode 100644
index 0000000..6af2b61
--- /dev/null
+++ b/extended-content/README.md
@@ -0,0 +1,14 @@
+# Extended Content
+
+- [Calc In Css](calc-in-css/README.md)
+- [Chrome Extensions](chrome-extensions/README.md)
+- [Destructuring Spread Nullish Coalescing](destructuring--spread---nullish-coalescing/README.md)
+- [Docker](docker/README.md)
+- [Elastic Search](elastic-search/README.md)
+- [Flexbox](flexbox/README.md)
+- [Http Status Code](http-status-code/README.md)
+- [Redis](redis/README.md)
+- [Regex](regex/README.md)
+- [Rest Api](rest-api/README.md)
+- [Rgba](rgba/README.md)
+- [Sessions](sessions/README.md)
\ No newline at end of file
diff --git a/extended-content/calc-in-css/README.md b/extended-content/calc-in-css/README.md
new file mode 100644
index 0000000..1966795
--- /dev/null
+++ b/extended-content/calc-in-css/README.md
@@ -0,0 +1,18 @@
+# Calc
+
+Welcome to your **First EC**
+
+In these units you are asked to use external resources to research and understand the topic at hand
+
+an Important **skill** to acquire during our Bootcamp is the ability to be self-dependant.
+
+
+
+## But here are some links:
+
+
+- [W3School](https://www.w3schools.com/cssref/func_calc.asp)
+
+- [Mozilla](https://developer.mozilla.org/en-US/docs/Web/CSS/calc())
+
+- [CSS-Tricks](https://css-tricks.com/a-complete-guide-to-calc-in-css/)
\ No newline at end of file
diff --git a/extended-content/chrome-extensions/README.md b/extended-content/chrome-extensions/README.md
new file mode 100644
index 0000000..0f6f022
--- /dev/null
+++ b/extended-content/chrome-extensions/README.md
@@ -0,0 +1,4 @@
+# What is a Google Chrome Extension?
+
+- Google Chrome extensions are programs that can be installed into Chrome in order to change the browser's functionality
+- This includes adding new features to Chrome or modifying the existing behavior of the program itself to make it more convenient for the user.
\ No newline at end of file
diff --git a/extended-content/destructuring--spread---nullish-coalescing/README.md b/extended-content/destructuring--spread---nullish-coalescing/README.md
new file mode 100644
index 0000000..f8c51fb
--- /dev/null
+++ b/extended-content/destructuring--spread---nullish-coalescing/README.md
@@ -0,0 +1,17 @@
+# Destructuring & Spread and Nullish coalescing
+
+There are alot of different tools that can offer us different functionalities which are extremely useful.
+
+
+
+Some of these tools are the following operators :
+
+- [Destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)
+
+- [Spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax)
+
+- [Nullish coalescing](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)
+
+
+
+Lets get started!
\ No newline at end of file
diff --git a/extended-content/docker/README.md b/extended-content/docker/README.md
new file mode 100644
index 0000000..82fbd27
--- /dev/null
+++ b/extended-content/docker/README.md
@@ -0,0 +1,3 @@
+# Link
+
+[Download the presentation](./RedisEc.pptx)
\ No newline at end of file
diff --git a/extended-content/elastic-search/README.md b/extended-content/elastic-search/README.md
new file mode 100644
index 0000000..60bb29f
--- /dev/null
+++ b/extended-content/elastic-search/README.md
@@ -0,0 +1,17 @@
+# Links
+
+Here are some links on the subject:
+
+Downloads:
+- https://www.elastic.co/downloads/elasticsearch
+
+- https://www.elastic.co/downloads/kibana
+
+Query examples:
+- https://dzone.com/articles/23-useful-elasticsearch-example-queries
+
+Student's project example:
+
+- https://github.com/afeefaz/Elastic-search-demo
+
+Also see attached to this Codio lesson a presentation about Elastic search.
\ No newline at end of file
diff --git a/extended-content/flexbox/README.md b/extended-content/flexbox/README.md
new file mode 100644
index 0000000..6744d9c
--- /dev/null
+++ b/extended-content/flexbox/README.md
@@ -0,0 +1,13 @@
+# Reading Materials
+
+**CSS flexbox** layout allows you to easily format HTML.
+Flexbox makes it simple to align items vertically and horizontally using rows and columns, Items will "flex" to different sizes to fill the space.
+It makes responsive design easier.
+
+Helpful Links:
+
+- [CSS-Tricks](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)
+
+- [W3School](https://www.w3schools.com/css/css3_flexbox.asp)
+
+- [Learn Flexbox in 15min](https://www.youtube.com/watch?v=fYq5PXgSsbE&t=664s)
\ No newline at end of file
diff --git a/extended-content/http-status-code/README.md b/extended-content/http-status-code/README.md
new file mode 100644
index 0000000..5e34760
--- /dev/null
+++ b/extended-content/http-status-code/README.md
@@ -0,0 +1,3 @@
+# Presentation
+
+See [attached](https://docs.google.com/presentation/d/1aVbOTOd1M2e2bEew9lqHMj2B3FaYMfQBOXxbRpgaok4/edit#slide=id.gdfc6fdff6f_0_484) is a presentation on Http Status Codes.
\ No newline at end of file
diff --git a/extended-content/redis/README.md b/extended-content/redis/README.md
new file mode 100644
index 0000000..9a427d9
--- /dev/null
+++ b/extended-content/redis/README.md
@@ -0,0 +1,3 @@
+# Link
+
+See attached to this Codio lesson is a presentation
\ No newline at end of file
diff --git a/extended-content/regex/README.md b/extended-content/regex/README.md
new file mode 100644
index 0000000..c803f3b
--- /dev/null
+++ b/extended-content/regex/README.md
@@ -0,0 +1,17 @@
+# Reading Materials
+
+Regex is a sequence of characters and symbols that specifies a search pattern.
+
+Pattern are usually used for:
+- search / replace / rearrange parts of the string.
+- Validation on Strings.
+- Verifying String structure.
+- Splitting Strings into Tokens.
+
+Here are some recommanded links:
+
+- [Mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
+
+- [W3School](https://www.w3schools.com/jsref/jsref_obj_regexp.asp)
+
+- [RegexR](https://regexr.com/)
\ No newline at end of file
diff --git a/extended-content/rest-api/README.md b/extended-content/rest-api/README.md
new file mode 100644
index 0000000..747e568
--- /dev/null
+++ b/extended-content/rest-api/README.md
@@ -0,0 +1,9 @@
+# Intro
+
+Here is an article that gives best practices for REST conventions:
+
+https://florimond.dev/en/posts/2018/08/restful-api-design-13-best-practices-to-make-your-users-happy/
+
+Focus especially on:
+
+1,2,3,5,6,7,8,10
\ No newline at end of file
diff --git a/extended-content/rest-api/_sidebar.md b/extended-content/rest-api/_sidebar.md
new file mode 100644
index 0000000..f65bc2f
--- /dev/null
+++ b/extended-content/rest-api/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Extended Content](../README.md)
+
+- [Intro](./Intro.md)
+- [Links](./Links.md)
\ No newline at end of file
diff --git a/extended-content/rgba/README.md b/extended-content/rgba/README.md
new file mode 100644
index 0000000..cb97fa8
--- /dev/null
+++ b/extended-content/rgba/README.md
@@ -0,0 +1,7 @@
+# RGBA
+
+In this lesson you will self-learn about CSS colors.
+
+Here is a link to start from: [rgba](https://www.webfx.com/blog/web-design/rgba/)
+
+Feel free to search for more info and examples!
\ No newline at end of file
diff --git a/extended-content/sessions/README.md b/extended-content/sessions/README.md
new file mode 100644
index 0000000..d1828bb
--- /dev/null
+++ b/extended-content/sessions/README.md
@@ -0,0 +1,3 @@
+# General
+
+See attached to this Codio lesson are two presentations about sessions and about cookies
\ No newline at end of file
diff --git a/git-collab/README.md b/git-collab/README.md
new file mode 100644
index 0000000..df4162d
--- /dev/null
+++ b/git-collab/README.md
@@ -0,0 +1,5 @@
+# Git Collab
+
+- [Git Branches](git-branches/README.md)
+- [Git Collaboration](git-collaboration/README.md)
+- [Setting Up Your Github Projects](setting-up-your-github-projects/README.md)
\ No newline at end of file
diff --git a/git-collab/git-branches/README.md b/git-collab/git-branches/README.md
new file mode 100644
index 0000000..47449d4
--- /dev/null
+++ b/git-collab/git-branches/README.md
@@ -0,0 +1,3 @@
+# Local Branches - Overview
+
+
\ No newline at end of file
diff --git a/git-collab/git-collaboration/README.md b/git-collab/git-collaboration/README.md
new file mode 100644
index 0000000..1b7cd94
--- /dev/null
+++ b/git-collab/git-collaboration/README.md
@@ -0,0 +1,3 @@
+# Collaboration Overview
+
+
\ No newline at end of file
diff --git a/git-collab/setting-up-your-github-projects/README.md b/git-collab/setting-up-your-github-projects/README.md
new file mode 100644
index 0000000..0775469
--- /dev/null
+++ b/git-collab/setting-up-your-github-projects/README.md
@@ -0,0 +1,7 @@
+# Intro
+
+Github is a powerful tool. We can use it to backup our code, collaborate with others, and use it as our portfolio. In this lesson, we'll go through how to set up your projects on Github so that they stand out.
+
+
+
+We'll also talk about a few other things to help you build your profile.
\ No newline at end of file
diff --git a/intro/README.md b/intro/README.md
new file mode 100644
index 0000000..4b309fb
--- /dev/null
+++ b/intro/README.md
@@ -0,0 +1,5 @@
+# Intro
+
+- [Course Syllabus](course-syllabus/README.md)
+- [File Setup Basics](file-setup-basics/README.md)
+- [Zoom Onboarding](zoom-onboarding/README.md)
\ No newline at end of file
diff --git a/intro/course-syllabus/README.md b/intro/course-syllabus/README.md
new file mode 100644
index 0000000..7afb757
--- /dev/null
+++ b/intro/course-syllabus/README.md
@@ -0,0 +1,4 @@
+# Page 1
+
+# Syllabus
+
\ No newline at end of file
diff --git a/intro/course-syllabus/_sidebar.md b/intro/course-syllabus/_sidebar.md
new file mode 100644
index 0000000..6ed9545
--- /dev/null
+++ b/intro/course-syllabus/_sidebar.md
@@ -0,0 +1,3 @@
+- [⬅ Back to Intro](../README.md)
+
+- [Page 1](./Page-1.md)
\ No newline at end of file
diff --git a/intro/file-setup-basics/README.md b/intro/file-setup-basics/README.md
new file mode 100644
index 0000000..4a6a290
--- /dev/null
+++ b/intro/file-setup-basics/README.md
@@ -0,0 +1,7 @@
+# Intro
+
+This quick lesson is all about setup. We'll learn:
+
+- How to navigate through your computer from the command-line.
+- How to create new files/folders from the command-line.
+- The setup code (boilerplate) required for every website we build.
\ No newline at end of file
diff --git a/intro/zoom-onboarding/README.md b/intro/zoom-onboarding/README.md
new file mode 100644
index 0000000..7359047
--- /dev/null
+++ b/intro/zoom-onboarding/README.md
@@ -0,0 +1,23 @@
+# Zoooooom
+
+Hi everyone!
+
+
+
+Since we are going to be using zoom in some of our trainings, we've created this short tutorial that show a couple of important features for the student.
+
+
+
+In particular, please note that you can:
+
+- "Raise your hand", and
+- Chat with others
+-- Privately or publicly
+
+
+
+Notice that the trainer will always receive a notification when you "raise your hand", but may not get to you right away as s/he is wrapping up an important point - but don't worry, your questions are important to us =]
+
+
+
+Enjoy the video in the next section - we tried to keep it professional [🐢](https://emojipedia.org/turtle/)
\ No newline at end of file
diff --git a/mid-exam/README.md b/mid-exam/README.md
new file mode 100644
index 0000000..875cee8
--- /dev/null
+++ b/mid-exam/README.md
@@ -0,0 +1,4 @@
+# Mid Exam
+
+- [Mid Exam Retake ](mid-exam--retake-/README.md)
+- [Mid Exam N](mid-exam-n/README.md)
\ No newline at end of file
diff --git a/mid-exam/_sidebar.md b/mid-exam/_sidebar.md
new file mode 100644
index 0000000..0053e40
--- /dev/null
+++ b/mid-exam/_sidebar.md
@@ -0,0 +1,3 @@
+- Mid Exam
+ - [Mid Exam Retake ](mid-exam--retake-/README.md)
+ - [Mid Exam N](mid-exam-n/README.md)
\ No newline at end of file
diff --git a/mid-exam/mid-exam--retake-/README.md b/mid-exam/mid-exam--retake-/README.md
new file mode 100644
index 0000000..6b044b5
--- /dev/null
+++ b/mid-exam/mid-exam--retake-/README.md
@@ -0,0 +1,10 @@
+# Commit And Push
+
+If you are about to push code that doesn't work, **make a note** in the `commit` message. Something like "works until renderer"
+
+
+Push your project to **Github** and send it to the Bootcamp staff !
+
+
+
+{Submit Answer!|assessment}(free-text-285587972)
\ No newline at end of file
diff --git a/mid-exam/mid-exam--retake-/_sidebar.md b/mid-exam/mid-exam--retake-/_sidebar.md
new file mode 100644
index 0000000..29e536c
--- /dev/null
+++ b/mid-exam/mid-exam--retake-/_sidebar.md
@@ -0,0 +1,9 @@
+- [⬅ Back to Mid Exam](../README.md)
+
+- [Commit And Push ](./Commit-and-Push-.md)
+- [Done](./Done.md)
+- [Feature Error Handling](./Feature---Error-Handling.md)
+- [Feature Exclude](./Feature---Exclude.md)
+- [Intro](./Intro.md)
+- [Page 1](./Page-1.md)
+- [Page 2](./Page-2.md)
\ No newline at end of file
diff --git a/mongodb/README.md b/mongodb/README.md
new file mode 100644
index 0000000..9c18f10
--- /dev/null
+++ b/mongodb/README.md
@@ -0,0 +1,9 @@
+# Mongodb
+
+- [Installing Local Mongo Db](installing-local-mongo-db/README.md)
+- [Intro To Databases](intro-to-databases/README.md)
+- [Mongo Db Intro](mongo-db-intro/README.md)
+- [Mongoose Querying Practice](mongoose---querying-practice/README.md)
+- [Mongoose Expenses Project](mongoose-expenses-project/README.md)
+- [Mongoose Intro](mongoose-intro/README.md)
+- [Mongoose Population](mongoose-population/README.md)
\ No newline at end of file
diff --git a/mongodb/installing-local-mongo-db/README.md b/mongodb/installing-local-mongo-db/README.md
new file mode 100644
index 0000000..91b088a
--- /dev/null
+++ b/mongodb/installing-local-mongo-db/README.md
@@ -0,0 +1,39 @@
+# Step 1 Install
+
+Depending on your computer, there are different ways to install Mongo:
+
+|||important
+## MongoDB V5
+
+Please make sure to download V5. you can use this [link as reference](https://www.mongodb.com/download-center/community/releases/archive#:~:text=Archive%3A%20mongodb%2Dwindows%2Dx86_64%2D5.0.14.zip) to see all versions.
+|||
+
+**Windows**:
+
+- Go to [mongo's website](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/#download-mdb-edition) and follow the download instructions with the following notes:
+- At a certain point you will be asked to install MongoD as a Service - **do not** do this
+- You will also be prompted to install MongoDB Compass; this is optional
+- Before running the server for the first time, we must create the directory to which the MongoDB server will write its data
+- By default, this folder is `C:\data\db`
+- As such, go to your `C:\` drive, and create a `data` folder. Inside of `data`, create a `db` folder
+- We can now run Mongo commands from the directory where we installed MongoDB, but we would like to be able to run these commands from anywhere
+- If you know what it means to add the mongo path to your computer's global variables, then go ahead and do so
+- Otherwise, see [this video](https://youtu.be/sBdaRlgb4N8?t=90) for instructions on how to do that
+- If you are windows 10 users see [this video](https://youtu.be/ll2tY6KH8Tk?t=141) (Watch until 4:45 where he starts talking about mongo service)
+- Notice that the first thing we see in the video is where our Mongo files were saved
+- Also notice that once he finishes explaining "adding the path", he talks about creating the `data\db` directory which we've already done
+
+
+
+**Mac:**
+
+Since Apple updated Mac OS to Catalina, there are few steps to do. follow [this article](https://medium.com/better-programming/installing-mongodb-on-macos-catalina-aab1cbe0c836) to install MongoDB correctly. note that this article is for users that have Catalina version, if you have prior version of Mac OS, use the following instruction:
+
+- The easiest way to install MongoDB on a Mac is through Homebrew. If you don't already have Homebrew installed on your Mac by now, enter the below code into a terminal window (without the "$"):
+- `$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
+- then after Homebrew is finished installing:
+- `$ brew update`
+- `$ brew install mongodb`
+- Before running the server for the first time, we must create the directory to which MongoDB server will write its data. By default, this folder is `\data\db` on Mac. You need to create this directory as with the correct permissions so type: `mkdir -p /data/db`. Create those folders now.
+- Ensure that user account running MongoDB has the proper directory permissions by running these commands:
+- `sudo chown -R id -un /data/db` and write your password down
\ No newline at end of file
diff --git a/mongodb/installing-local-mongo-db/_sidebar.md b/mongodb/installing-local-mongo-db/_sidebar.md
new file mode 100644
index 0000000..a90edda
--- /dev/null
+++ b/mongodb/installing-local-mongo-db/_sidebar.md
@@ -0,0 +1,5 @@
+- [⬅ Back to Mongodb](../README.md)
+
+- [Step 1 Install](./Step-1--Install.md)
+- [Step 2 Run](./Step-2--Run.md)
+- [Step 3 Basic Commands](./Step-3--Basic-Commands.md)
\ No newline at end of file
diff --git a/mongodb/intro-to-databases/README.md b/mongodb/intro-to-databases/README.md
new file mode 100644
index 0000000..b28699d
--- /dev/null
+++ b/mongodb/intro-to-databases/README.md
@@ -0,0 +1,11 @@
+# Intro
+
+This short lesson will be a primer to our work with databases. In it we'll learn
+
+- A few common DB (database) terms
+- How to think about databases
+- Where databases fit in our app architecture
+
+
+
+There won't be any exercises, but **these are important concepts you must understand** before you start working with DBs.
\ No newline at end of file
diff --git a/mongodb/mongo-db-intro/README.md b/mongodb/mongo-db-intro/README.md
new file mode 100644
index 0000000..8518c37
--- /dev/null
+++ b/mongodb/mongo-db-intro/README.md
@@ -0,0 +1,3 @@
+# Mongo Terminology
+
+
\ No newline at end of file
diff --git a/mongodb/mongoose---querying-practice/README.md b/mongodb/mongoose---querying-practice/README.md
new file mode 100644
index 0000000..3658fdd
--- /dev/null
+++ b/mongodb/mongoose---querying-practice/README.md
@@ -0,0 +1,7 @@
+# Intro
+
+Alright, you've got a grasp on Mongo and you've learned the basics of using Mongoose to query the DB with our servers.
+
+
+
+This lesson is all about practicing what we know and learning how to do more advanced DB queries with Mongoose.
\ No newline at end of file
diff --git a/mongodb/mongoose-expenses-project/README.md b/mongodb/mongoose-expenses-project/README.md
new file mode 100644
index 0000000..7152620
--- /dev/null
+++ b/mongodb/mongoose-expenses-project/README.md
@@ -0,0 +1,14 @@
+# Intro
+
+Now that you are one with the Mongeese, you'll be building a back-end only expense tracker. This project will use Express, Mongoose, CRUD operations, and a whole lot of pazzaz.
+
+
+
+You'll be able to add new expenses to your tracker, see how much money you've spent on a given category or between certain dates. Let's get started.
+
+
+
+This is a back-end only project, so everything you make will be server-side, and you will interact with the server through Postman.
+
+
+
\ No newline at end of file
diff --git a/mongodb/mongoose-intro/README.md b/mongodb/mongoose-intro/README.md
new file mode 100644
index 0000000..c6d3cb8
--- /dev/null
+++ b/mongodb/mongoose-intro/README.md
@@ -0,0 +1,59 @@
+# Crud Create
+
+Now that we have a `p1` that represents a document based off our schema, we can run this command:
+
+```js
+p1.save()
+```
+
+
+And that, finally, saves data to our Mongo DB - the **C** in **C**RUD: Create.
+
+
+
+To check that this actually exists in the DB, go ahead and run the **Mongo command** (remember to use the correct collection!):
+
+
+
+```js
+db.people.find({})
+```
+
+
+Of course, **run that in the mongo shell** - do **not** try that in your `.js` file as you will get an error.
+
+
+
+You should see something similar to this output:
+
+
+
+```js
+[
+ {
+ "_id": {
+ "$oid": "5c16bbe03f02d41e78416a4d"
+ },
+ "firstName": "Shoobert",
+ "lastName": "Dillard",
+ "age": 25,
+ "__v": 0
+ }
+]
+```
+
+
+At this point you should be wondering, _where the heck did the_ `_people_` _collection come from?_
+
+
+
+The answer is that **mongoose will create a collection for us, and name it based off our Model Name** - since we called our model `Person`, mongoose was clever enough to create a `people` collection for us, and store our document there.
+
+
+
+If, instead, you want to name your collection on your own, you can create a model like this instead:
+
+
+```js
+const Person = mongoose.model('person', personSchema, 'persons'); //<== persons will be the name of the collection
+```
\ No newline at end of file
diff --git a/mongodb/mongoose-intro/_sidebar.md b/mongodb/mongoose-intro/_sidebar.md
new file mode 100644
index 0000000..cefb62b
--- /dev/null
+++ b/mongodb/mongoose-intro/_sidebar.md
@@ -0,0 +1,17 @@
+- [⬅ Back to Mongodb](../README.md)
+
+- [Crud Create](./CRUD---Create.md)
+- [Crud Delete](./CRUD---Delete.md)
+- [Crud Retrieve](./CRUD---Retrieve.md)
+- [Crud Update](./CRUD---Update.md)
+- [Crud Video](./CRUD---Video.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Models](./Models.md)
+- [Mongoose Intro Lecture](./Mongoose-Intro-Lecture.md)
+- [Nested Schema](./Nested-Schema.md)
+- [Schemas](./Schemas.md)
+- [Server Mongoose](./Server---Mongoose.md)
+- [Setup](./Setup.md)
+- [Spot Check 1](./Spot-Check-1.md)
\ No newline at end of file
diff --git a/mongodb/mongoose-population/README.md b/mongodb/mongoose-population/README.md
new file mode 100644
index 0000000..884d2bb
--- /dev/null
+++ b/mongodb/mongoose-population/README.md
@@ -0,0 +1,3 @@
+# Overview - Video
+
+
\ No newline at end of file
diff --git a/python/README.md b/python/README.md
new file mode 100644
index 0000000..f9888a7
--- /dev/null
+++ b/python/README.md
@@ -0,0 +1,3 @@
+# Python
+
+- [Decorators](decorators/README.md)
\ No newline at end of file
diff --git a/python/decorators/README.md b/python/decorators/README.md
new file mode 100644
index 0000000..1d7226d
--- /dev/null
+++ b/python/decorators/README.md
@@ -0,0 +1,38 @@
+# Intro
+
+In this lesson we will learn about **decorators**.
+
+**Decorators** are functions that allows you run some code before and after a function.
+
+
+Let's say that we have written some functions, and for each one of them whenever we execute it, there will be a print of the function variables, before the function starts and the result of the function after the execution.
+
+
+So if we have:
+```python
+def add2(x, y):
+ return x+y
+
+def add3(x, y, z):
+ return x+y+z
+
+def add4(w, x, y, z):
+ return w+x+y+z
+```
+We want to execute:
+```python
+add2(1,2)
+add3(1, 2, 3)
+add4(1,2, 2, 4)
+```
+
+And we want our code to print:
+```console
+args: 1 2
+args: 1 2 3
+args: 1 2 2 4
+```
+
+What are our options of implementation?
+
+Think about it for a minute, and move on to see what python has to offer.
\ No newline at end of file
diff --git a/r-ds/README.md b/r-ds/README.md
new file mode 100644
index 0000000..1f455bc
--- /dev/null
+++ b/r-ds/README.md
@@ -0,0 +1,5 @@
+# R Ds
+
+- [R D Sim 1 Todo List](r-d-sim-1--todo-list/README.md)
+- [R D Sim 2 Python](r-d-sim-2--python/README.md)
+- [Typescript R D](typescript-r-d/README.md)
\ No newline at end of file
diff --git a/r-ds/r-d-sim-1--todo-list/README.md b/r-ds/r-d-sim-1--todo-list/README.md
new file mode 100644
index 0000000..32a1e61
--- /dev/null
+++ b/r-ds/r-d-sim-1--todo-list/README.md
@@ -0,0 +1,10 @@
+# Intro
+
+In this assignment you will need to fix some bugs in a already-written code.
+Make sure to **fork** the following repo and then **clone** it to your local computer.
+
+You'll find everything you need to know in the `README.md` file (in the repo).
+
+Just go to [this](https://github.com/Elevationacademy/rand-sim-1) link and follow the instructions there.
+
+Good Luck!
\ No newline at end of file
diff --git a/r-ds/r-d-sim-2--python/README.md b/r-ds/r-d-sim-2--python/README.md
new file mode 100644
index 0000000..574f584
--- /dev/null
+++ b/r-ds/r-d-sim-2--python/README.md
@@ -0,0 +1,13 @@
+# Intro
+
+In this assignment you will need to understand Python, read some code and add some features.
+
+Make sure to **fork** the following repo and then **clone** it to your local computer.
+
+You'll find everything you need to know in the `README.md` file (in the repo).
+
+Just go to [this](https://github.com/Elevationacademy/rand-sim-3a) link and follow the instructions there.
+
+Extension: If you feel really confident about your coding and learning skills, you can go instead to [this](https://github.com/Elevationacademy/rand-sim-3) repo which is a harder assignment (also in Python)
+
+Good Luck!
\ No newline at end of file
diff --git a/r-ds/typescript-r-d/README.md b/r-ds/typescript-r-d/README.md
new file mode 100644
index 0000000..8fe0aea
--- /dev/null
+++ b/r-ds/typescript-r-d/README.md
@@ -0,0 +1,3 @@
+# Intro
+
+### Read [this](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html), and then move on to the exercise. The exercise is meant to be done in pairs.
\ No newline at end of file
diff --git a/react-advanced/README.md b/react-advanced/README.md
new file mode 100644
index 0000000..92988b0
--- /dev/null
+++ b/react-advanced/README.md
@@ -0,0 +1,5 @@
+# React Advanced
+
+- [Deploying React To Heroku](deploying-react-to-heroku/README.md)
+- [React Bank](react-bank/README.md)
+- [React Lifecycle And The Useeffect Hook](react-lifecycle-and-the-useeffect-hook/README.md)
\ No newline at end of file
diff --git a/react-advanced/deploying-react-to-heroku/README.md b/react-advanced/deploying-react-to-heroku/README.md
new file mode 100644
index 0000000..be8ccb4
--- /dev/null
+++ b/react-advanced/deploying-react-to-heroku/README.md
@@ -0,0 +1,11 @@
+# Intro
+
+There are a few extra steps you need to implement to successfully deploy a React app with a db to Heroku.
+
+
+
+This lesson will be using MongoDB as the project DB.
+
+
+
+This lesson assumes knowledge of a basic Heroku deployment, without React.
\ No newline at end of file
diff --git a/react-advanced/react-bank/README.md b/react-advanced/react-bank/README.md
new file mode 100644
index 0000000..37bafe9
--- /dev/null
+++ b/react-advanced/react-bank/README.md
@@ -0,0 +1,44 @@
+# Backend
+
+## Functionalities
+create a server that will do the following logic / functionalities :
+
+- Retrieving all the transactions.
+- Adding a transaction.
+- Deletion a transaction.
+- Getting a breakdown of the sum of transactions per category.
+
+
+## Guidelines
+1. Make sure your server is running on a **different** port from your react app.
+2. When making requests from the client side to the server, **write out the full path**
+ - i.e, instead of making a GET request to `/transactions`, you'll make it to `http://localhost:/transactions`
+3. Since react is "hosting" our app, there is **no need** to serve any `dist` or `node_modules` from the server
+4. Because we want our server to accept "foreign" requests, we have to explicitly allow this. For simplicity, use the following code:
+
+
+
+```
+app.use(function (req, res, next) {
+ res.header('Access-Control-Allow-Origin', '*')
+ res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With')
+
+ next()
+})
+```
+
+
+Add the above code before your route definitions.
+
+
+
+**Note:** the above steps are only required when we are in _development_ mode. In production mode (i.e when you'll deploy to Heroku, for example) it's different.
+
+
+
+In particular, **never ever add the above** **Access-Control...** **code snippet in your production code** - it allows _anyone_ to access your server with _all_ permissions.
+
+
+
+It is **only safe for development purposes**.
\ No newline at end of file
diff --git a/react-advanced/react-bank/_sidebar.md b/react-advanced/react-bank/_sidebar.md
new file mode 100644
index 0000000..2b0f663
--- /dev/null
+++ b/react-advanced/react-bank/_sidebar.md
@@ -0,0 +1,9 @@
+- [⬅ Back to React Advanced](../README.md)
+
+- [Backend](./Backend.md)
+- [Extensions](./Extensions.md)
+- [Features](./Features.md)
+- [Frontend](./Frontend.md)
+- [Intro](./Intro.md)
+- [Overview](./Overview.md)
+- [Setup](./Setup.md)
\ No newline at end of file
diff --git a/react-advanced/react-lifecycle-and-the-useeffect-hook/README.md b/react-advanced/react-lifecycle-and-the-useeffect-hook/README.md
new file mode 100644
index 0000000..ae2c498
--- /dev/null
+++ b/react-advanced/react-lifecycle-and-the-useeffect-hook/README.md
@@ -0,0 +1,100 @@
+# Cleanup
+
+We have learned how to use the `useEffect` hook, but we still did not cover a very important issue that might cause bugs.
+
+Let's dive in into the cleanup option:
+
+
+
+Here is the App code:
+```
+function App() {
+ const [shouldRemove, setShouldRemove] = useState(false)
+
+ const clickHandler = () => {
+ setShouldRemove(true)
+ }
+
+ return (
+
+ );
+}
+```
+
+This is good to know. It brings us to explore another option. Watch this video where we investigate another case of using cleanups:
+
+
+
+Here is the code:
+```
+function FriendStatus(props) {
+ const [isOnline, setIsOnline] = useState(null);
+
+ useEffect(() => {
+ function handleStatusChange(status) {
+ setIsOnline(status.isOnline);
+ }
+ ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
+
+ return function cleanup() {
+ ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
+ };
+ });
+
+ if (isOnline === null) {
+ return 'Loading...';
+ }
+ return
+ Frind with id {props.friend.id} is {isOnline ? 'Online' : 'Offline'}
+
+}
+```
+
+One last thing that we can add is an optimization. We do want the cleanup function running if the props change, but only if the friend's id has changed.
+At the moment the cleanup function will run on every update.
+To avoid that we can add the id to the dependencies array like that:
+
+```
+ useEffect(() => {
+ function handleStatusChange(status) {
+ setIsOnline(status.isOnline);
+ }
+ ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
+
+ return function cleanup() {
+ ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
+ };
+ }, [props.friend.id]);
+```
+
+Now the cleanup will run only if the id of the friend has changed.
\ No newline at end of file
diff --git a/react-advanced/react-lifecycle-and-the-useeffect-hook/_sidebar.md b/react-advanced/react-lifecycle-and-the-useeffect-hook/_sidebar.md
new file mode 100644
index 0000000..ae963d7
--- /dev/null
+++ b/react-advanced/react-lifecycle-and-the-useeffect-hook/_sidebar.md
@@ -0,0 +1,12 @@
+- [⬅ Back to React Advanced](../README.md)
+
+- [Cleanup](./Cleanup.md)
+- [Components Lifecycle](./Components-Lifecycle.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Dependencies](./Dependencies.md)
+- [Exercises](./Exercises.md)
+- [Fetch Data](./Fetch-Data.md)
+- [Hooks](./Hooks.md)
+- [Intro](./Intro.md)
+- [Side Effects](./Side-Effects.md)
+- [Virtual Dom](./Virtual-Dom.md)
\ No newline at end of file
diff --git a/react-basics/README.md b/react-basics/README.md
new file mode 100644
index 0000000..0dc88eb
--- /dev/null
+++ b/react-basics/README.md
@@ -0,0 +1,15 @@
+# React Basics
+
+- [Catchphrase Socket Project Optional ](catchphrase---socket-project--optional-/README.md)
+- [Hangman Part I](hangman---part-i/README.md)
+- [Hangman Part Ii](hangman---part-ii/README.md)
+- [Pomodoro Project Optional ](pomodoro-project--optional-/README.md)
+- [React Components](react-components/README.md)
+- [React Data Flow](react-data-flow/README.md)
+- [React Input](react-input/README.md)
+- [React Intro](react-intro/README.md)
+- [React Props](react-props/README.md)
+- [React Router](react-router/README.md)
+- [React State](react-state/README.md)
+- [Reflix Project](reflix-project/README.md)
+- [Webpack Ec](webpack-ec/README.md)
\ No newline at end of file
diff --git a/react-basics/catchphrase---socket-project--optional-/README.md b/react-basics/catchphrase---socket-project--optional-/README.md
new file mode 100644
index 0000000..49eb2a1
--- /dev/null
+++ b/react-basics/catchphrase---socket-project--optional-/README.md
@@ -0,0 +1,15 @@
+# Intro
+
+The _Catchphrase_ game is a multi-player game, where the players need to guess a secret word. The game needs to work in different clients, meaning live client-to-client communication (two separate browser tabs/windows).
+
+
+
+Each turn, a player is presented with a secret word that they need to describe to the other player via chat. The second player then needs to guess what the secret words.
+
+
+
+Guessing the correct word will win the player 10 points.
+
+
+
+Each user can start a new game or join an existing one.
\ No newline at end of file
diff --git a/react-basics/hangman---part-i/README.md b/react-basics/hangman---part-i/README.md
new file mode 100644
index 0000000..c9cd911
--- /dev/null
+++ b/react-basics/hangman---part-i/README.md
@@ -0,0 +1,30 @@
+# Components Overview
+
+Let's think about the components we'll need for our hangman game.
+
+
+
+- A component to show the remaining guesses
+- One to show the _ _ _ _ and fill up with letters
+- One for the letters we can choose
+
+
+
+For now that should be enough.
+
+
+
+Starting with the last one, we can break it down some more:
+
+
+
+- A component to hold all our letters
+- A component that represents a single letter
+
+
+
+A component for a single letter may seem extreme. In fact, _how small should we make our components?_ is a popular question. Some will say _as small as possible_ - but that's more of a buzz-phrase than concrete guidance.
+
+
+
+The React docs themselves have a nice [Thinking In React](https://reactjs.org/docs/thinking-in-react.html) section which is worth checking out - but the short of it is that you should make your components small enough so they are maintainable and serve one specific purpose.
\ No newline at end of file
diff --git a/react-basics/hangman---part-i/_sidebar.md b/react-basics/hangman---part-i/_sidebar.md
new file mode 100644
index 0000000..6a6c3b9
--- /dev/null
+++ b/react-basics/hangman---part-i/_sidebar.md
@@ -0,0 +1,5 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Components Overview](./Components-Overview.md)
+- [Intro](./Intro.md)
+- [To Do](./To-Do.md)
\ No newline at end of file
diff --git a/react-basics/pomodoro-project--optional-/README.md b/react-basics/pomodoro-project--optional-/README.md
new file mode 100644
index 0000000..c7dee65
--- /dev/null
+++ b/react-basics/pomodoro-project--optional-/README.md
@@ -0,0 +1,34 @@
+# Intro
+
+Hello, Reacters.
+
+
+
+You're only at the beginning of your React journey but you've learned a lot.
+
+
+
+Think about all the things you know:
+
+- Components
+- JSX
+- Props
+- State
+- Events
+- Proper data flow
+
+
+
+So much power!
+
+
+
+But power is nothing without practice, so it's time to put it together...
+
+
+
+You're going to build **Pomodoro**.
+
+
+
+Here we go.
\ No newline at end of file
diff --git a/react-basics/react-components/README.md b/react-basics/react-components/README.md
new file mode 100644
index 0000000..51beaa0
--- /dev/null
+++ b/react-basics/react-components/README.md
@@ -0,0 +1,47 @@
+# Child Components
+
+Now, even though we saw that we can put any JSX inside the `App`'s `return`, we're going to do something a little different.
+
+We're going to load **child components** in there, instead.
+
+
+
+React is _built_ around components. If we put all our JSX in one place, it would defeat the purpose.
+
+
+
+Consider this code:
+
+
+
+```js
+function Nav() {
+ return (
+
HomeAbout
+ )
+}
+
+function App() {
+ return (
+
+ {/* loading a child component */}
+
Welcome!
+
+ )
+}
+```
+
+
+Generally, **you should create a new file for each component** - but for the sake of this example, we're keeping it all in one file.
+
+
+
+Here we have two components, where the `App` component is **loading** the `Nav` component.
+
+
+
+We say that `App` **is a parent of `Nav`, and `Nav` is a child of `App`** - this should come as no surprise as it is very familiar to our HTML/DOM hierarchy.
+
+
+
+Also notice the syntax: **when we create a component, we can use it like an "HTML" tag** - angled brackets and all.
\ No newline at end of file
diff --git a/react-basics/react-components/_sidebar.md b/react-basics/react-components/_sidebar.md
new file mode 100644
index 0000000..f1fe905
--- /dev/null
+++ b/react-basics/react-components/_sidebar.md
@@ -0,0 +1,12 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Child Components](./Child-Components.md)
+- [Component Tree](./Component-Tree.md)
+- [Components Jsx](./Components---JSX.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
+- [Spot Check 4](./Spot-Check-4.md)
\ No newline at end of file
diff --git a/react-basics/react-data-flow/README.md b/react-basics/react-data-flow/README.md
new file mode 100644
index 0000000..717e5c3
--- /dev/null
+++ b/react-basics/react-data-flow/README.md
@@ -0,0 +1,8 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-2271404646)
+{Check It!|assessment}(multiple-choice-1079840672)
+{Check It!|assessment}(multiple-choice-1016190687)
+{Check It!|assessment}(multiple-choice-3334046330)
+{Check It!|assessment}(multiple-choice-3484771619)
+{Check It!|assessment}(multiple-choice-3610721489)
\ No newline at end of file
diff --git a/react-basics/react-data-flow/_sidebar.md b/react-basics/react-data-flow/_sidebar.md
new file mode 100644
index 0000000..b676b33
--- /dev/null
+++ b/react-basics/react-data-flow/_sidebar.md
@@ -0,0 +1,10 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Data Flow Up I](./Data-Flow---Up---I.md)
+- [Data Flow Up Ii](./Data-Flow---Up---II.md)
+- [Done](./Done.md)
+- [Exercises](./Exercises.md)
+- [React Data Flow](./React-Data-Flow.md)
+- [Recap](./Recap.md)
+- [Spot Check 1](./Spot-Check-1.md)
\ No newline at end of file
diff --git a/react-basics/react-input/README.md b/react-basics/react-input/README.md
new file mode 100644
index 0000000..00660b5
--- /dev/null
+++ b/react-basics/react-input/README.md
@@ -0,0 +1,22 @@
+# Catch All Handler
+
+You now understand the basics of handling input in React. And honestly, there's not much more to it.
+
+
+
+The only "issue" might arise when you have multiple inputs, and you need multiple methods to manage the state changes.
+
+
+
+There's nothing inherently wrong with having a method for each input element - you may very well want to do different things for each input.
+
+However, When we are dealing with states in general we want to combine states that have a common ground into one state.
+This allows us to have generalization in our code.
+
+**That said**, it is silly to have several methods that do exactly the same thing: update one property of `state`.
+
+To that end, **take a look at** [**Handling Multiple Inputs**](https://medium.com/nerd-for-tech/how-to-build-forms-with-multiple-input-fields-using-react-hooks-677da2b851aa).
+
+
+
+They show a clever use of **ES6**'s [computed property names](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names) syntax in conjunction with the name attribute.
\ No newline at end of file
diff --git a/react-basics/react-input/_sidebar.md b/react-basics/react-input/_sidebar.md
new file mode 100644
index 0000000..52f1d32
--- /dev/null
+++ b/react-basics/react-input/_sidebar.md
@@ -0,0 +1,7 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Catch All Handler](./Catch-All-Handler.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Spot Check ](./Spot-Check-.md)
+- [Two Way Binding](./Two-Way-Binding.md)
\ No newline at end of file
diff --git a/react-basics/react-intro/README.md b/react-basics/react-intro/README.md
new file mode 100644
index 0000000..ecc01eb
--- /dev/null
+++ b/react-basics/react-intro/README.md
@@ -0,0 +1,7 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-4160273971)
+
+{Check It!|assessment}(multiple-choice-1026556269)
+
+{Check It!|assessment}(multiple-choice-2722621591)
\ No newline at end of file
diff --git a/react-basics/react-intro/_sidebar.md b/react-basics/react-intro/_sidebar.md
new file mode 100644
index 0000000..ca4a75a
--- /dev/null
+++ b/react-basics/react-intro/_sidebar.md
@@ -0,0 +1,16 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [File Structure](./File-Structure.md)
+- [Introduction](./Introduction.md)
+- [Jsx I](./JSX-I.md)
+- [Jsx Ii](./JSX-II.md)
+- [Jsx Lecture](./JSX-Lecture.md)
+- [React Overview Lecture](./React-Overview-Lecture.md)
+- [React Setup Boilerplate Lecture](./React-Setup---Boilerplate-Lecture.md)
+- [Setup](./Setup.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
+- [Virtual Dom](./Virtual-DOM.md)
\ No newline at end of file
diff --git a/react-basics/react-props/README.md b/react-basics/react-props/README.md
new file mode 100644
index 0000000..28c9eed
--- /dev/null
+++ b/react-basics/react-props/README.md
@@ -0,0 +1,3 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-1601730673)
\ No newline at end of file
diff --git a/react-basics/react-props/_sidebar.md b/react-basics/react-props/_sidebar.md
new file mode 100644
index 0000000..4e85153
--- /dev/null
+++ b/react-basics/react-props/_sidebar.md
@@ -0,0 +1,16 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Data Flow](./Data-Flow.md)
+- [Intro](./Intro.md)
+- [Mapping Props Ii](./Mapping-Props-II.md)
+- [Mapping Props](./Mapping-Props.md)
+- [Prop Keys](./Prop-Keys.md)
+- [Props](./Props.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
+- [Spot Check 4](./Spot-Check-4.md)
+- [Spot Check 5](./Spot-Check-5.md)
+- [Summery](./Summery.md)
+- [Video](./Video.md)
\ No newline at end of file
diff --git a/react-basics/react-router/README.md b/react-basics/react-router/README.md
new file mode 100644
index 0000000..c11bb74
--- /dev/null
+++ b/react-basics/react-router/README.md
@@ -0,0 +1,5 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-886395639)
+{Check It!|assessment}(multiple-choice-1284626046)
+{Check It!|assessment}(multiple-choice-3829301310)
\ No newline at end of file
diff --git a/react-basics/react-router/_sidebar.md b/react-basics/react-router/_sidebar.md
new file mode 100644
index 0000000..c63f112
--- /dev/null
+++ b/react-basics/react-router/_sidebar.md
@@ -0,0 +1,10 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Links](./Links.md)
+- [Route](./Route.md)
+- [Router](./Router.md)
+- [Setup](./Setup.md)
+- [Useparams](./useParams.md)
\ No newline at end of file
diff --git a/react-basics/react-state/README.md b/react-basics/react-state/README.md
new file mode 100644
index 0000000..a16a489
--- /dev/null
+++ b/react-basics/react-state/README.md
@@ -0,0 +1,83 @@
+# Common Fitfalls
+
+## State updates are async operation
+
+Look at this code, and try to find what is wrong
+
+```
+function Counter() {
+ const [count,setCount] = useState(0)
+
+ const updateCounter = () => {
+ setCount(count + 1)
+ console.log(count)
+ }
+
+ return (
+
+
+
{count}
+
+ );
+}
+```
+If you open the console and click the button you will see that the count is "not updating".
+The reason is that the state update is an asynchronous operation, so the count state hasn't been updated yet.
+
+We will see later how to solve it.
+For the mean time, just be aware of it.
+
+
+## State Objects
+When we define a state, some times it will be an object.
+
+For instance, if we have a `classroom` object which has a `students` property in it, and we want to add a student to it, we need to access `classroom.students` first.
+
+
+
+We need to do the following
+
+
+```
+import { useState } from 'react';
+
+const ClassRoom = () => {
+ const [classRoom, setClassRoom] = useState({ students: [] });
+
+ const addStudent = (student) => {
+ let newClassroom = {...classRoom}
+ newClassroom.students = [...classRoom.students, student]
+ setClassRoom(newClassroom);
+ }
+ return
+}
+
+export default ClassRoom;
+```
+
+What we are doing here is that we take the old state and clone it first. Then we mutate it to fit our needs and then replace it fully with the new mutated object.
+
+
+Be careful of situations like this.
+```
+import { useState } from 'react';
+
+const ClassRoom = () => {
+ const [classRoom, setClassRoom] = useState({ students: [] });
+
+ const removeStudent = (student) => {
+ students = classRoom.students
+ students.pop()
+ }
+ return
+}
+
+export default useClassRoom;
+```
+
+
+This is bad because `classRoom.students` is an array, which is a [reference type](https://codeburst.io/explaining-value-vs-reference-in-javascript-647a975e12a0) - that means that even though we've created a new variable, `students`, any modifications we make to that (the `.pop()` on the second line) will still affect the original array in `classRoom`.
+
+
+
+**Check out** how to use the [ES6 spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) to avoid this problem.
\ No newline at end of file
diff --git a/react-basics/react-state/_sidebar.md b/react-basics/react-state/_sidebar.md
new file mode 100644
index 0000000..6132ea3
--- /dev/null
+++ b/react-basics/react-state/_sidebar.md
@@ -0,0 +1,18 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Common Fitfalls](./Common-fitfalls.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Events](./Events.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Note About State Props](./Note-About-State---Props.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
+- [Spot Check 4](./Spot-Check-4.md)
+- [Spot Check 5](./Spot-Check-5.md)
+- [State As State](./State-As-State.md)
+- [State Video](./State-Video.md)
+- [State](./State.md)
+- [Summery](./Summery.md)
+- [Updating The State](./Updating-the-state.md)
\ No newline at end of file
diff --git a/react-basics/reflix-project/README.md b/react-basics/reflix-project/README.md
new file mode 100644
index 0000000..81d3388
--- /dev/null
+++ b/react-basics/reflix-project/README.md
@@ -0,0 +1,9 @@
+# Extension Users
+
+If you've done all of the above, and you fancy a bit of refactoring, give some meaning to the users on the landing page.
+
+
+
+Any user's rented movies and budget should be saved to that particular user - then you should persist everything with LocalStorage.
+
+Good luck =]
\ No newline at end of file
diff --git a/react-basics/reflix-project/_sidebar.md b/react-basics/reflix-project/_sidebar.md
new file mode 100644
index 0000000..e2efd95
--- /dev/null
+++ b/react-basics/reflix-project/_sidebar.md
@@ -0,0 +1,7 @@
+- [⬅ Back to React Basics](../README.md)
+
+- [Extension Users](./Extension---Users.md)
+- [Guidelines Basic](./Guidelines---Basic.md)
+- [Guidlines Features](./Guidlines---Features.md)
+- [Intro](./Intro.md)
+- [Reflix](./Reflix.md)
\ No newline at end of file
diff --git a/react-basics/webpack-ec/README.md b/react-basics/webpack-ec/README.md
new file mode 100644
index 0000000..b6a2ce1
--- /dev/null
+++ b/react-basics/webpack-ec/README.md
@@ -0,0 +1,11 @@
+# Intro
+
+Webpack is an important tool that is used by many developers. Please read the following article to learn a bit about webpack, note that you do not need to spend time coding along, just read through it.
+
+
+
+[https://www.sitepoint.com/webpack-beginner-guide/](https://www.sitepoint.com/webpack-beginner-guide/)
+
+
+
+Once you're done, head onto the exercises in the next session. Feel free to use the [webpack docs](https://webpack.js.org/guides/getting-started/) to help you solve the assignment.
\ No newline at end of file
diff --git a/resources/README.md b/resources/README.md
new file mode 100644
index 0000000..ce76653
--- /dev/null
+++ b/resources/README.md
@@ -0,0 +1,12 @@
+# Resources
+
+- [Can Do Approach](can-do-approach/README.md)
+- [Clean Code](clean-code/README.md)
+- [Css Special Cases](css-special-cases/README.md)
+- [How To Search In Google](how-to-search-in-google/README.md)
+- [How To Solve A Question](how-to-solve-a-question/README.md)
+- [How To Talk About A Project](how-to-talk-about-a-project/README.md)
+- [Project Presentation Template](project-presentation-template/README.md)
+- [Talking About Code](talking-about-code/README.md)
+- [Terms Defention](terms-defention/README.md)
+- [Work Plan Template](work-plan-template/README.md)
\ No newline at end of file
diff --git a/resources/clean-code/README.md b/resources/clean-code/README.md
new file mode 100644
index 0000000..2828793
--- /dev/null
+++ b/resources/clean-code/README.md
@@ -0,0 +1,3 @@
+# Presentation
+
+
\ No newline at end of file
diff --git a/resources/how-to-search-in-google/README.md b/resources/how-to-search-in-google/README.md
new file mode 100644
index 0000000..64f61a9
--- /dev/null
+++ b/resources/how-to-search-in-google/README.md
@@ -0,0 +1,8 @@
+# Page 1
+
+You can download it from the download button.
+
\ No newline at end of file
diff --git a/resources/how-to-search-in-google/_sidebar.md b/resources/how-to-search-in-google/_sidebar.md
new file mode 100644
index 0000000..9b1cac4
--- /dev/null
+++ b/resources/how-to-search-in-google/_sidebar.md
@@ -0,0 +1,3 @@
+- [⬅ Back to Resources](../README.md)
+
+- [Page 1](./Page-1.md)
\ No newline at end of file
diff --git a/script.py b/script.py
new file mode 100644
index 0000000..bef0b10
--- /dev/null
+++ b/script.py
@@ -0,0 +1,89 @@
+import os
+import re
+
+ROOT_DIR = '.' # Your course root
+
+def humanize(name):
+ return name.replace('-', ' ').title()
+
+def generate_root_sidebar(modules):
+ lines = [f'* [{humanize(m)}]({m}/README.md)' for m in sorted(modules)]
+ with open(os.path.join(ROOT_DIR, '_sidebar.md'), 'w', encoding='utf-8') as f:
+ f.write('\n'.join(lines))
+ print('✅ Root _sidebar.md generated.')
+
+def generate_module_sidebar(module_path, chapters):
+ lines = [f'- {humanize(os.path.basename(module_path))}']
+ for chapter in sorted(chapters):
+ lines.append(f' - [{humanize(chapter)}]({chapter}/README.md)')
+ with open(os.path.join(module_path, '_sidebar.md'), 'w', encoding='utf-8') as f:
+ f.write('\n'.join(lines))
+
+def generate_module_readme(module_path, chapters):
+ lines = [f'# {humanize(os.path.basename(module_path))}', '']
+ for chapter in sorted(chapters):
+ lines.append(f'- [{humanize(chapter)}]({chapter}/README.md)')
+ with open(os.path.join(module_path, 'README.md'), 'w', encoding='utf-8') as f:
+ f.write('\n'.join(lines))
+
+def extract_chapter_sidebar_entries(sidebar_path):
+ entries = []
+ with open(sidebar_path, 'r', encoding='utf-8') as f:
+ for line in f:
+ match = re.search(r'\[(.*?)\]\((\.\/.*?\.md)', line.strip())
+ if match:
+ entries.append((match.group(1), match.group(2)))
+ return entries
+
+def generate_chapter_sidebar(chapter_path, entries, module_name):
+ lines = [f'- [⬅ Back to {humanize(module_name)}](../README.md)', '']
+ lines += [f'- [{label}]({path})' for label, path in entries]
+ with open(os.path.join(chapter_path, '_sidebar.md'), 'w', encoding='utf-8') as f:
+ f.write('\n'.join(lines))
+
+def generate_chapter_readme(chapter_path, first_entry):
+ label, path = first_entry
+ content_path = os.path.join(chapter_path, path)
+ if not os.path.exists(content_path):
+ print(f'⚠️ Missing file for README.md: {content_path}')
+ return
+ with open(content_path, 'r', encoding='utf-8') as f:
+ content = f.read()
+ with open(os.path.join(chapter_path, 'README.md'), 'w', encoding='utf-8') as f:
+ f.write(f'# {label}\n\n{content.strip()}')
+
+def process_course():
+ modules = []
+ for module in os.listdir(ROOT_DIR):
+ module_path = os.path.join(ROOT_DIR, module)
+ if not os.path.isdir(module_path) or module.startswith('.'):
+ continue
+ modules.append(module)
+ chapters = []
+ for chapter in os.listdir(module_path):
+ chapter_path = os.path.join(module_path, chapter)
+ if os.path.isdir(chapter_path) and not chapter.startswith('.'):
+ chapters.append(chapter)
+
+ # Process chapter _sidebar.md
+ original_sidebar_path = os.path.join(chapter_path, '_sidebar.md')
+ if os.path.exists(original_sidebar_path):
+ entries = extract_chapter_sidebar_entries(original_sidebar_path)
+ else:
+ # Fallback to .md files if no _sidebar.md exists
+ entries = []
+ for file in sorted(os.listdir(chapter_path)):
+ if file.endswith('.md') and not file.startswith('_') and file != 'README.md':
+ label = humanize(file.replace('.md', ''))
+ entries.append((label, f'./{file}'))
+
+ if entries:
+ generate_chapter_sidebar(chapter_path, entries, module)
+ generate_chapter_readme(chapter_path, entries[0])
+
+ generate_module_sidebar(module_path, chapters)
+ generate_module_readme(module_path, chapters)
+
+ generate_root_sidebar(modules)
+
+process_course()
diff --git a/servers/README.md b/servers/README.md
new file mode 100644
index 0000000..453b6e7
--- /dev/null
+++ b/servers/README.md
@@ -0,0 +1,13 @@
+# Servers
+
+- [Express Crud Router Middleware](express--crud--router----middleware/README.md)
+- [Express Intro Servers Routes Params](express-intro--servers--routes----params/README.md)
+- [Guided Debugging Exercise](guided-debugging-exercise/README.md)
+- [Intro To Servers](intro-to-servers/README.md)
+- [Json Web Tokens](json-web-tokens/README.md)
+- [My Recipes](my-recipes/README.md)
+- [Node](node/README.md)
+- [Npm Node Package Manager](npm---node-package-manager/README.md)
+- [Postman](postman/README.md)
+- [Server Error Handling](server-error-handling/README.md)
+- [Status Codes Practice](status-codes-practice/README.md)
\ No newline at end of file
diff --git a/servers/express--crud--router----middleware/README.md b/servers/express--crud--router----middleware/README.md
new file mode 100644
index 0000000..89f1e1f
--- /dev/null
+++ b/servers/express--crud--router----middleware/README.md
@@ -0,0 +1,56 @@
+# Body Parser
+
+When we make a POST request from the browser, behind the scenes **the browser is turning the data we're sending into a JSON** - this is a good thing because it allows us to forgo the `JSON.stringify` bit.
+
+
+
+However, since we are sending JSON, the server needs to know that it needs to **parse** that JSON.
+
+To do that, we need to add the following to our `server.js`:
+```
+app.use(express.json())
+app.use(express.urlencoded({ extended: false }))
+```
+
+
+* You can add the above code under all the `require`s but above the other lines of `app.use`.
+
+
+
+We'll dive into what `use` is later in this lesson, but for now it's enough to understand that this code allows our server to receive and parse JSON.
+
+
+
+----------
+
+
+
+Now if you restart your server, refresh your page, type in a Wonder and Location, and press the `Add Wonder` button:
+
+
+
+
+
+Click [here](https://s3-us-west-2.amazonaws.com/learn-app/lesson-images/post-from-client-gui.PNG) to emibggen.
+
+
+
+You should see this in your server logs:
+
+
+
+
+
+Excellent! We've sent some data to our server through a POST request - note that this is **different** than sending data through GET parameters!
+
+
+
+When we send data through GET, we're doing it through the **route**, i.e. the URL - this is not always safe or what we want. Plus, it is not convenient when we want to send lots of data - especially if it's more complex data.
+
+
+
+Sending data with a **POST request allows us to send any JS object**. This is great.
+
+
+
+And now, of course, we want to _add_ this object to our `wonders` array in the server.
\ No newline at end of file
diff --git a/servers/express--crud--router----middleware/_sidebar.md b/servers/express--crud--router----middleware/_sidebar.md
new file mode 100644
index 0000000..e5cef83
--- /dev/null
+++ b/servers/express--crud--router----middleware/_sidebar.md
@@ -0,0 +1,16 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Body Parser](./Body-Parser.md)
+- [Crud](./CRUD.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Http Status Codes](./HTTP-Status-Codes.md)
+- [Intro](./Intro.md)
+- [Middleware](./Middleware.md)
+- [Overview Video](./Overview-Video.md)
+- [Post](./POST.md)
+- [Put](./PUT.md)
+- [Router](./Router.md)
+- [Spot Check 1](./Spot-Check-1.md)
+- [Spot Check 2](./Spot-Check-2.md)
+- [Spot Check 3](./Spot-Check-3.md)
\ No newline at end of file
diff --git a/servers/express-intro--servers--routes----params/README.md b/servers/express-intro--servers--routes----params/README.md
new file mode 100644
index 0000000..a65390b
--- /dev/null
+++ b/servers/express-intro--servers--routes----params/README.md
@@ -0,0 +1,3 @@
+# Setup & Basics Video
+
+
\ No newline at end of file
diff --git a/servers/guided-debugging-exercise/README.md b/servers/guided-debugging-exercise/README.md
new file mode 100644
index 0000000..c6cbd9a
--- /dev/null
+++ b/servers/guided-debugging-exercise/README.md
@@ -0,0 +1,57 @@
+# Page 1
+
+### The Task
+Here is some code that contains bugs.
+Your task is to find these bugs and fix them.
+Copy the code and run it in your computer so that you can debug.
+
+### Hint
+The debugger id your friend!
+
+### Guidance
+1. First take a minute to understand what the code is doing
+1. Now find the bugs. Specifically try to find the row of where the bug happens
+1. Fix the bug, so that the code works fine.
+
+```js
+const posts = [
+ {
+ id: 1,
+ text: "Love this product",
+ comments: []
+ },
+ {
+ id: 2,
+ text: "This is the worst. DON'T BUY!",
+ comments: [
+ { id: 1, text: "Idiot has no idea" },
+ { id: 2, text: "Fool!" },
+ { id: 3, text: "I agree!" }
+ ]
+ },
+ {
+ id: 3,
+ text: "So glad I found this. Bought four already!",
+ comments: []
+ }
+]
+
+const removeComment = function (postId, commentId) {
+ for (post in posts) {
+ if (post.id === postId) {
+ removeCommentFromPost(post, commentId);
+ }
+ }
+}
+
+const removeCommentFromPost = function(post, commentId){
+ for (let i =0; i < comments.length; i++) {
+ if (post.comments[i].id === commentId) {
+ post.comments.remove(comment);
+ }
+ }
+}
+
+removeComment(2, 3)
+
+```
\ No newline at end of file
diff --git a/servers/guided-debugging-exercise/_sidebar.md b/servers/guided-debugging-exercise/_sidebar.md
new file mode 100644
index 0000000..fee6fbc
--- /dev/null
+++ b/servers/guided-debugging-exercise/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Page 1](./Page-1.md)
+- [Page 2](./Page-2.md)
\ No newline at end of file
diff --git a/servers/intro-to-servers/README.md b/servers/intro-to-servers/README.md
new file mode 100644
index 0000000..d383e5a
--- /dev/null
+++ b/servers/intro-to-servers/README.md
@@ -0,0 +1,101 @@
+# Barebone Server
+
+To see an example of a simple server, let's create one using node's built-in `http` module.
+
+
+
+Start by opening a new directory called `server-intro` and inside of it create a file called `server.js`
+
+
+
+Inside of this file, add the following code:
+```
+const http = require('http')
+
+const server = http.createServer(function (request, response) {
+ response.writeHead(200, { 'Content-Type': 'text/plain' })
+ response.write('Hello, world')
+ response.end();
+})
+
+const port = 3000
+server.listen(port, function () {
+ console.log(`Node server created at port ${port}`)
+})
+```
+
+
+Now run this file (just like any other JS file in node: `node server.js` in your command line/terminal), and you should see the console log "Node server created at port 3000"
+
+
+
+Now go to your browser, and head to `http://localhost:3000/`
+
+
+
+And that's it. You've used your browser to make a GET request to your server, and the server replied with "Hello, world"
+
+
+
+----------
+
+
+
+Of course, this doesn't seem very exciting yet, but here's what's going on in that code:
+
+- We didn't have to `npm install http` because this module is **built-in** to node
+- One of the things this module can do is invoke the `createServer` method
+ - This method receives one parameter, a callback function, that takes two arguments: a request, and a response
+ - We'll get to `request` later, but `response` is what allows us to reply to a client that sends a request
+- The `response.writehead` is a method that sends **metadata** about the response
+ - This is information about the response the user won't see, but the browser (or whoever is making the request) can access
+ - The `200` is an [HTTP Status Code](https://www.restapitutorial.com/httpstatuscodes.html) that says "everything is OK"
+ - The ``{'Content-Type...}`` tells whoever made the request what kind of data it will receive in return
+- The `response.write` method actually "writes" something to display to whoever makes the request
+- Finally, the `response.end()` closes this **request-response cycle**
+
+
+
+We have the `server.listen` code at the bottom which is what ultimately starts the server. Without this, the server does not exist.
+
+
+
+The `listen` part is important: **servers are always listening for requests. Like functions, they do nothing until called upon** - this means that we can write the best server in the world, but it will do **nothing** except for **serve** whoever makes a ``request``
+
+
+
+In our example, the entity making the request is the browser itself when we go to **localhost:3000** - this initiates a request, the server gets the request, the server creates and sends a response, and the cycle completes.
+
+
+
+Luckily for us, when we start using `express`, the code to run a server will be **much** simpler.
+
+
+
+----------
+
+
+
+Now, go to your terminal and stop the server from running (press `Ctrl+C`), and refresh the page where you were at localhost:3000, you should something like this:
+
+
+
+
+
+
+
+Once you shut down your server, it's no longer listening. The browser (or any client) cannot find **localhost:3000** because it doesn't exist anymore.
+
+
+
+So remember:
+
+1. You create a server
+2. You spin/run/activate/start the server - now it is listening
+3. Clients make requests to the server
+4. The server serves a response
+5. Cycle ends
+
+
+
+The way we'll build our servers, the server will be able to receive many requests simultaneously - but you must consider each one as a separate **request-response cycle** - _even if_ the same client makes 1,000 requests to the same server, each one is a separate cycle.
\ No newline at end of file
diff --git a/servers/intro-to-servers/_sidebar.md b/servers/intro-to-servers/_sidebar.md
new file mode 100644
index 0000000..007a252
--- /dev/null
+++ b/servers/intro-to-servers/_sidebar.md
@@ -0,0 +1,7 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Barebone Server](./Barebone-Server.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Intro](./Intro.md)
+- [Localhost](./Localhost.md)
+- [Ngrok Exposing Your Localhost To The World Optional ](./Ngrok---Exposing-your-Localhost-to-the-World--Optional--.md)
\ No newline at end of file
diff --git a/servers/my-recipes/README.md b/servers/my-recipes/README.md
new file mode 100644
index 0000000..1c1ea19
--- /dev/null
+++ b/servers/my-recipes/README.md
@@ -0,0 +1,5 @@
+# Extensions
+
+Possible Extensions:
+- Improve your CSS :)
+- Add more filter options
\ No newline at end of file
diff --git a/servers/my-recipes/_sidebar.md b/servers/my-recipes/_sidebar.md
new file mode 100644
index 0000000..4541073
--- /dev/null
+++ b/servers/my-recipes/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Extensions](./Extensions.md)
+- [Intro](./Intro.md)
\ No newline at end of file
diff --git a/servers/node/README.md b/servers/node/README.md
new file mode 100644
index 0000000..2fa4b79
--- /dev/null
+++ b/servers/node/README.md
@@ -0,0 +1,3 @@
+# Node JS Intro Video
+
+
\ No newline at end of file
diff --git a/servers/npm---node-package-manager/README.md b/servers/npm---node-package-manager/README.md
new file mode 100644
index 0000000..7058025
--- /dev/null
+++ b/servers/npm---node-package-manager/README.md
@@ -0,0 +1,70 @@
+# Client Vs Server Packages
+
+Though NPM literally has **Node** as the first part of its acronym, we're not limited to node when we use NPM packages. We can also take advantage of NPM (depending on the package) in the browser.
+
+
+
+For example, we've hitherto imported jQuery, Handlebars, and font-awesome like this:
+```
+
+
+
+
+
+```
+
+
+Which is a pain, because we'd always have to go and find those CDNs - but no more! Now you can run the following command:
+
+
+```
+npm install jquery handlebars font-awesome
+```
+
+
+Yes, you can install multiple packages at once - just separate them with a space.
+
+And then add them to our HTML like this:
+
+
+```
+
+
+
+
+
+```
+
+
+Which is much, much cleaner, more straightforward, and definitely more reliable.
+
+
+
+Of course, the code in these packages is the exact same as what you get from the old way (using the CDN) - and it will still only work in JS that you run in the browser, but **NPM is a package manager for any JS code, not just code that runs in node**.
+
+
+
+This might be confusing, but if you realize that humans called this **Node**Package Manager because at first it was just for Node, and you realize that humans don't always think ahead, then you should be able to sleep at night.
+
+
+
+----------
+
+
+
+**Spot check:** Create a directory called npm-jquery-run, and inside of it create two files: index.html and main.js
+
+- Use NPM to install jQuery
+- Import jQuery in your HTML from node_modules
+- Create a small div in your HTML - give it some dimensions and a background color
+- In your JS file, use jQuery to add a listener to the div - when you click it, it should change to the color "#f39c12"
+
+
+
+Once that works, in your JS file make a GET request to the following API, and console log the results:
+```
+https://ele-people-api-8eb0b1bd9b96.herokuapp.com/people
+```
+
+
+Unfortunately, the above GET request won't work (but still do it so you see the error). Let's fix that.
\ No newline at end of file
diff --git a/servers/npm---node-package-manager/_sidebar.md b/servers/npm---node-package-manager/_sidebar.md
new file mode 100644
index 0000000..10292d7
--- /dev/null
+++ b/servers/npm---node-package-manager/_sidebar.md
@@ -0,0 +1,9 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Client Vs Server Packages](./Client-vs--Server-Packages.md)
+- [Comprehension Check](./Comprehension-Check.md)
+- [Exercises](./Exercises.md)
+- [Intro](./Intro.md)
+- [Setting Up](./Setting-Up.md)
+- [The Urllib Package](./The-urllib-Package.md)
+- [Using Npm Packages](./Using-NPM-Packages.md)
\ No newline at end of file
diff --git a/servers/postman/README.md b/servers/postman/README.md
new file mode 100644
index 0000000..ab55062
--- /dev/null
+++ b/servers/postman/README.md
@@ -0,0 +1,89 @@
+# Basic Usage
+
+When you finish installing and logging in, you should see a screen more or less like this:
+
+
+
+
+
+
+
+Click [here](https://s3-us-west-2.amazonaws.com/learn-app/lesson-images/postman-starter.PNG) to emibggen.
+
+
+
+Now, say you're making a GET request to our favorite [user api](https://jsonplaceholder.typicode.com/users) - we can make this request via the browser, or with a `$.get` request - and now we can also make it with Postman. Just enter this URL into the input, press send, and you should soon enough see the result:
+
+
+
+
+
+
+
+Click [here](https://s3-us-west-2.amazonaws.com/learn-app/lesson-images/postman-first-get.PNG) to emibggen.
+
+
+
+It knows to make a GET request because of the GET on the side - but we can change that, it's a drop-down!
+
+
+
+----------
+
+
+
+To test other request types, go ahead **create a** `dummy-server.js` **file** with the following code, then **run** `node dummy-server.js`:
+
+
+```
+const express = require('express')
+const bodyParser = require('body-parser')
+
+const app = express()
+app.use(bodyParser.json())
+app.use(bodyParser.urlencoded({ extended: false }))
+
+app.get('/test/:data', function (req, res) {
+ console.log("Someone is getting!")
+ console.log(req.params.data)
+ res.send("Thanks for the get, here's a potato.")
+})
+
+app.post('/test', function (req, res) {
+ console.log("Someone is posting!")
+ res.send("Thanks for the post, here's a potatoe.")
+})
+
+app.post('/testData', function (req, res) {
+ console.log(req.body)
+ res.end()
+})
+
+const port = 4349
+app.listen(port, function () {
+ console.log(`Server running on ${port}`)
+})
+```
+
+
+We can use Postman to make a GET request to this `get` route as well - we just have to give it the whole path: `http://localhost:4349/test/something`:
+
+
+
+
+
+
+
+Click [here](https://s3-us-west-2.amazonaws.com/learn-app/lesson-images/postman-get-to-custom-api.PNG) to emibggen.
+
+
+
+And of course, we can also use Postman to make a request to our `post` route, we just need to select POST from the dropdown:
+
+
+
+
+
+
+
+Click [here](https://s3-us-west-2.amazonaws.com/learn-app/lesson-images/postman-post-to-custom-api.PNG) to emibggen.
\ No newline at end of file
diff --git a/servers/postman/_sidebar.md b/servers/postman/_sidebar.md
new file mode 100644
index 0000000..74e0d9f
--- /dev/null
+++ b/servers/postman/_sidebar.md
@@ -0,0 +1,7 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Basic Usage](./Basic-Usage.md)
+- [Enjoy](./Enjoy.md)
+- [Intro](./Intro.md)
+- [Overview Video](./Overview-Video.md)
+- [Sending Data](./Sending-Data.md)
\ No newline at end of file
diff --git a/servers/server-error-handling/README.md b/servers/server-error-handling/README.md
new file mode 100644
index 0000000..692a227
--- /dev/null
+++ b/servers/server-error-handling/README.md
@@ -0,0 +1,4 @@
+# Comprehension Check
+
+{Check It!|assessment}(multiple-choice-1966696812)
+{Check It!|assessment}(multiple-choice-2865629610)
\ No newline at end of file
diff --git a/servers/server-error-handling/_sidebar.md b/servers/server-error-handling/_sidebar.md
new file mode 100644
index 0000000..8fd6979
--- /dev/null
+++ b/servers/server-error-handling/_sidebar.md
@@ -0,0 +1,13 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Comprehension Check](./Comprehension-Check.md)
+- [Example Introduction](./Example-introduction.md)
+- [Exercises](./Exercises.md)
+- [First Error](./First-Error.md)
+- [Handle Error](./Handle-Error.md)
+- [Handle Post Errors](./Handle-Post-Errors.md)
+- [Handling Multiple Errors](./Handling-Multiple-Errors.md)
+- [Intro](./Intro.md)
+- [Post Errors](./Post-Errors.md)
+- [Spot Check](./Spot-Check.md)
+- [Summary](./Summary.md)
\ No newline at end of file
diff --git a/servers/status-codes-practice/README.md b/servers/status-codes-practice/README.md
new file mode 100644
index 0000000..8af669e
--- /dev/null
+++ b/servers/status-codes-practice/README.md
@@ -0,0 +1,3 @@
+# Page 2
+
+# Sample content Page 2
\ No newline at end of file
diff --git a/servers/status-codes-practice/_sidebar.md b/servers/status-codes-practice/_sidebar.md
new file mode 100644
index 0000000..dd698ad
--- /dev/null
+++ b/servers/status-codes-practice/_sidebar.md
@@ -0,0 +1,4 @@
+- [⬅ Back to Servers](../README.md)
+
+- [Page 2](./Page-2.md)
+- [Task Code](./Task-Code.md)
\ No newline at end of file
diff --git a/solutions/README.md b/solutions/README.md
new file mode 100644
index 0000000..f45d49e
--- /dev/null
+++ b/solutions/README.md
@@ -0,0 +1,52 @@
+# Solutions
+
+- [Ajax Intro To Apis Solutions](ajax---intro-to-apis---solutions/README.md)
+- [Algorithms Js Solutions](algorithms--js----solutions/README.md)
+- [Big O Time Complexity Js Solutions](big-o---time-complexity--js----solutions/README.md)
+- [Callbacks Arrow Functions Solutions](callbacks---arrow-functions---solutions/README.md)
+- [Closures Modules Solutions](closures---modules---solutions/README.md)
+- [Css 3 Variables Animations Solutions](css-3--variables---animations---solutions/README.md)
+- [Css Basics Solutions](css-basics---solutions/README.md)
+- [Css Grid Solutions](css-grid---solutions/README.md)
+- [Data Flow Solutions](data-flow---solutions/README.md)
+- [Data Structures Solutions](data-structures---solutions/README.md)
+- [Dom Intro Solutions](dom-intro---solutions/README.md)
+- [Dom Traversal With Jquery Solutions](dom-traversal-with-jquery---solutions/README.md)
+- [Es6 Array Methods Solutions](es6-array-methods---solutions/README.md)
+- [Express Crud Router Middleware Solutions](express--crud--router----middleware---solutions/README.md)
+- [Express Intro Servers Routes Params Solutions](express-intro--servers--routes----params---solutions/README.md)
+- [Functions Solutions](functions---solutions/README.md)
+- [Html Basics Solutions](html-basics---solutions/README.md)
+- [Intro To Json Solutions](intro-to-json---solutions/README.md)
+- [Javascript Basics Solutions](javascript-basics---solutions/README.md)
+- [Jquery Solutions](jquery---solutions/README.md)
+- [Js This Solutions](js-this---solutions/README.md)
+- [Local Storage Solutions](local-storage---solutions/README.md)
+- [Matrices Solutions](matrices---solutions/README.md)
+- [Mobx 1 Solutions](mobx-1---solutions/README.md)
+- [Mobx 2 Solutions](mobx-2---solutions/README.md)
+- [Mongo Db Intro Solutions](mongo-db-intro---solutions/README.md)
+- [Mongoose Intro Solutions](mongoose-intro---solutions/README.md)
+- [Mongoose Population Solutions](mongoose-population---solutions/README.md)
+- [Node Solutions](node---solutions/README.md)
+- [Npm Node Package Manager Solutions](npm---node-package-manager---solutions/README.md)
+- [Object Oriented Programming Intro Oop Solutions](object-oriented-programming-intro--oop----solutions/README.md)
+- [Oop Inheritance Solutions](oop-inheritance---solutions/README.md)
+- [Promises Solutions](promises---solutions/README.md)
+- [React Components Solutions](react-components---solutions/README.md)
+- [React Events Set State Solutions](react-events---set-state---solutions/README.md)
+- [React Hooks Solutions](react-hooks---solutions/README.md)
+- [React Input Solutions](react-input---solutions/README.md)
+- [React Intro Solutions](react-intro---solutions/README.md)
+- [React Props State Data Flow Solutions](react-props--state---data-flow---solutions/README.md)
+- [React Routes Solutions](react-routes---solutions/README.md)
+- [Recursion Solutions](recursion---solutions/README.md)
+- [Scope Solutions](scope---solutions/README.md)
+- [Scraping R D Solutions](scraping-r-d---solutions/README.md)
+- [Sql In Node Sequelize Solutions](sql-in-node--sequelize---solutions/README.md)
+- [Sql Intro Js Solutions](sql-intro--js----solutions/README.md)
+- [Sql Join Solutions](sql-join---solutions/README.md)
+- [Stacks Queues Solutions](stacks---queues---solutions/README.md)
+- [Trees And Binary Search Trees Solutions](trees-and-binary-search-trees---solutions/README.md)
+- [Typescript R D Solutions](typescript-r-d---solutions/README.md)
+- [Webpack R D Solutions](webpack-r-d---solutions/README.md)
\ No newline at end of file
diff --git a/solutions/ajax---intro-to-apis---solutions/README.md b/solutions/ajax---intro-to-apis---solutions/README.md
new file mode 100644
index 0000000..0f7c21d
--- /dev/null
+++ b/solutions/ajax---intro-to-apis---solutions/README.md
@@ -0,0 +1,188 @@
+# Solutions
+
+## Exercise 1
+
+```
+const fetch = function (isbn) {
+ $.ajax({
+ method: "GET",
+ url: `https://www.googleapis.com/books/v1/volumes?q=isbn:${isbn}`,
+ success: function (data) {
+ console.log(data);
+ },
+ error: function (xhr, text, error) {
+ console.log(text);
+ }
+ });
+}
+
+fetch(9782806269171)
+```
+
+
+## Exercise 2
+
+```
+const fetch = function (queryType, queryValue) {
+ $.ajax({
+ method: "GET",
+ url: `https://www.googleapis.com/books/v1/volumes?q=${queryType}:${queryValue}`,
+ success: function (data) {
+ console.log(data);
+ },
+ error: function (xhr, text, error) {
+ console.log(text);
+ }
+ });
+}
+
+fetch("title", "The Wise Man's Fears")
+fetch("isbn", 9789814561778)
+```
+
+
+## Exercise 3
+
+```
+const fetch = function (queryType, queryValue) {
+ $.ajax({
+ method: "GET",
+ url: `https://www.googleapis.com/books/v1/volumes?q=${queryType}:${queryValue}`,
+ success: function (data) {
+ data.items.forEach(b => console.log(`Title: ${b.volumeInfo.title}, Author: ${b.volumeInfo.authors}, ISBN: ${b.volumeInfo.industryIdentifiers[0].identifier}`))
+ },
+ error: function (xhr, text, error) {
+ console.log(text);
+ }
+ });
+}
+
+fetch("title", "The Wise Man's Fears")
+```
+
+
+## Exercise 4
+
+```
+const fetch = function () {
+ $.get("http://api.giphy.com/v1/gifs/search?q=cats&api_key=50m5Set06jQuFMy7VNXir7iaNl8ypsEu", function (gifs) {
+ console.log(gifs.data[0].embed_url)
+ $(".gif").append(`