diff --git a/README.md b/README.md
index 0f57702..af383c5 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,15 @@
-# HTML-CSS-JavaScript-projects-for-beginners
-
-This is the source code of the YouTube video (10 projects) https://www.youtube.com/watch?v=ePzOFu2xXUQ.
-
-Part 2 (16 projects) : https://youtu.be/EWv2jnhZErc
-
-NEW HTML CSS JavaScript Projects Interesting HTML CSS JavaScript projects Learn HTML, CSS, and JavaScript 2021 to create modern websites. Fun learning HTML, CSS, and JavaScript!
-
-I'm Sahand, a web developer in computer science. I've been doing this for over a decade. This course was created to share my knowledge and experience with you. Build simple websites using HTML, CSS, and JavaScript. Responsive web design employs HTML, CSS, and JavaScript. This is a skill you'll learn in this course. This new course teaches students how to install Visual Studio Code and its extensions. Then we start from scratch with each project. After finishing HTML, it's on to CSS and JavaScript. Building in HTML, CSS, or JavaScript is fine. This guide explains HTML, CSS, and JavaScript syntax.
-
-Every project is started from scratch and finished without using copied code. Then they are used on the project to ensure everyone understands. This program's exciting project-based curriculum includes building modern, super cool, and responsive websites! Let's get started learning HTML, CSS, and JavaScript.
-
-Contact me if you have any questions through my twitter: @codewithsahand.
+# HTML CSS JavaScript Projects
+
+This is the source code of the website: 100 HTML CSS JavaScript Projects
+
+
+
About
+
Hi there! I'm Sahand, a web developer with over a decade of experience. This course, "HTML CSS JavaScript Projects ," was created to share my knowledge and experience with you. In this course, you'll learn how to build simple, responsive websites using HTML, CSS, and JavaScript.
+
In this course, you'll learn how to install Visual Studio Code and its extensions, and then we'll start from scratch with each project. After finishing HTML, we'll move on to CSS and JavaScript. Building in HTML, CSS, or JavaScript is fine, and this guide will explain HTML, CSS, and JavaScript syntax.
+
Each project in this course is started from scratch and finished without using copied code. Then, we'll go over the code together to ensure that everyone understands. This program's exciting project-based curriculum includes building modern, super cool, and responsive websites!
+
If you have any questions, please feel free to contact me through my email: codewithsahand@gmail.com
+
Visit my website
+
diff --git a/projects/Navbar-project/index.html b/projects/Navbar-project/index.html
deleted file mode 100644
index 4975da5..0000000
--- a/projects/Navbar-project/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- Sahand Ghavidel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/projects/age-calculator/index.html b/projects/age-calculator/index.html
new file mode 100644
index 0000000..7ef5c27
--- /dev/null
+++ b/projects/age-calculator/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ Age Calculator
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/age-calculator/index.js b/projects/age-calculator/index.js
new file mode 100644
index 0000000..b2888ee
--- /dev/null
+++ b/projects/age-calculator/index.js
@@ -0,0 +1,31 @@
+const btnEl = document.getElementById("btn");
+const birthdayEl = document.getElementById("birthday");
+const resultEl = document.getElementById("result");
+
+function calculateAge() {
+ const birthdayValue = birthdayEl.value;
+ if (birthdayValue === "") {
+ alert("Please enter your birthday");
+ } else {
+ const age = getAge(birthdayValue);
+ resultEl.innerText = `Your age is ${age} ${age > 1 ? "years" : "year"} old`;
+ }
+}
+
+function getAge(birthdayValue) {
+ const currentDate = new Date();
+ const birthdayDate = new Date(birthdayValue);
+ let age = currentDate.getFullYear() - birthdayDate.getFullYear();
+ const month = currentDate.getMonth() - birthdayDate.getMonth();
+
+ if (
+ month < 0 ||
+ (month === 0 && currentDate.getDate() < birthdayDate.getDate())
+ ) {
+ age--;
+ }
+
+ return age;
+}
+
+btnEl.addEventListener("click", calculateAge);
diff --git a/projects/age-calculator/style.css b/projects/age-calculator/style.css
new file mode 100644
index 0000000..0229675
--- /dev/null
+++ b/projects/age-calculator/style.css
@@ -0,0 +1,63 @@
+body {
+ margin: 0;
+ padding: 20px;
+ font-family: "Montserrat", sans-serif;
+ background-color: #f7f7f7;
+}
+
+.container {
+ background-color: white;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
+ padding: 20px;
+ max-width: 600px;
+ margin: 0 auto;
+ border-radius: 5px;
+ margin-top: 50px;
+}
+
+h1 {
+ font-size: 36px;
+ text-align: center;
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+.form {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+label {
+ font-weight: bold;
+ margin-bottom: 10px;
+}
+
+input {
+ padding: 8px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ width: 100%;
+ max-width: 300px;
+}
+
+button {
+ background-color: #007bff;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 5px;
+ margin-top: 10px;
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+}
+
+button:hover {
+ background-color: #0062cc;
+}
+
+#result {
+ margin-top: 20px;
+ font-size: 24px;
+ font-weight: bold;
+}
diff --git a/projects/amine-pics-generator/index.html b/projects/amine-pics-generator/index.html
new file mode 100644
index 0000000..0cb6e43
--- /dev/null
+++ b/projects/amine-pics-generator/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ Anime Pics Generator
+
+
+
+
+
Anime Pics Generator
+ Get Anime
+
+
+
Anime Name
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/amine-pics-generator/index.js b/projects/amine-pics-generator/index.js
new file mode 100644
index 0000000..ab0dfe5
--- /dev/null
+++ b/projects/amine-pics-generator/index.js
@@ -0,0 +1,25 @@
+const btnEl = document.getElementById("btn");
+const animeContainerEl = document.querySelector(".anime-container");
+const animeImgEl = document.querySelector(".anime-img");
+const amineNameEl = document.querySelector(".anime-name");
+
+btnEl.addEventListener("click", async function () {
+ try {
+ btnEl.disabled = true;
+ btnEl.innerText = "Loading...";
+ amineNameEl.innerText = "Updating...";
+ animeImgEl.src = "spinner.svg";
+ const response = await fetch("https://api.catboys.com/img");
+ const data = await response.json();
+ btnEl.disabled = false;
+ btnEl.innerText = "Get Anime";
+ animeContainerEl.style.display = "block";
+ animeImgEl.src = data.url;
+ amineNameEl.innerText = data.artist;
+ } catch (error) {
+ console.log(error);
+ btnEl.disabled = false;
+ btnEl.innerText = "Get Anime";
+ amineNameEl.innerText = "An error happened, please try again";
+ }
+});
diff --git a/projects/amine-pics-generator/spinner.svg b/projects/amine-pics-generator/spinner.svg
new file mode 100644
index 0000000..fd9b80a
--- /dev/null
+++ b/projects/amine-pics-generator/spinner.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/amine-pics-generator/style.css b/projects/amine-pics-generator/style.css
new file mode 100644
index 0000000..077c804
--- /dev/null
+++ b/projects/amine-pics-generator/style.css
@@ -0,0 +1,56 @@
+body{
+ margin: 0;
+ background: linear-gradient(to right, lightblue, yellow);
+ display: flex;
+ height: 100vh;
+ justify-content: center;
+ align-items: center;
+ font-family: 'Courier New', Courier, monospace;
+}
+
+.container{
+ background: aliceblue;
+ border-radius: 10px;
+ box-shadow: 0 10px 20px rgba(0,0,0,0.3);
+ text-align: center;
+ padding: 10px;
+ width: 450px;
+ margin: 5px;
+}
+
+.btn{
+ background-color: green;
+ color: aliceblue;
+ padding: 10px 30px;
+ font-size: 16px;
+ margin-bottom: 30px;
+ border-radius: 6px;
+ cursor: pointer;
+
+}
+
+.btn:disabled{
+ background-color: gray;
+ cursor: not-allowed;
+}
+
+.anime-img{
+ height: 300px;
+ width: 300px;
+ border-radius: 50%;
+ border: 3px solid green;
+}
+
+.anime-name{
+ margin: 20px;
+ background-color: green;
+ color: aliceblue;
+ padding: 10px;
+ border-radius: 6px;
+ font-size: 17px;
+ font-weight: 600;
+}
+
+.anime-container{
+ display: none;
+}
\ No newline at end of file
diff --git a/projects/anime-pics-genrator/index.html b/projects/anime-pics-genrator/index.html
deleted file mode 100644
index aeedb6f..0000000
--- a/projects/anime-pics-genrator/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Random Anime profile
-
-
-
-
-
-
-
-
-
Anime Pics Genrator
-
genrates Random Animes profile pics
-
Get Anime
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/projects/anime-pics-genrator/script.js b/projects/anime-pics-genrator/script.js
deleted file mode 100644
index 9772363..0000000
--- a/projects/anime-pics-genrator/script.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const getBTN = document.getElementById("btn");
-const animeBox = document.querySelector(".anime-box");
-const anime = document.querySelector(".anime");
-const animeName = document.querySelector(".hero-name");
-
-const api_url = `https://api.catboys.com/img`;
-
-getBTN.addEventListener("click", async function () {
- const response = await fetch(api_url);
- const data = await response.json();
- anime.src = data.url;
- animeBox.style.display = "block";
- animeName.textContent = data.artist;
-});
diff --git a/projects/anime-pics-genrator/style.css b/projects/anime-pics-genrator/style.css
deleted file mode 100644
index d4471af..0000000
--- a/projects/anime-pics-genrator/style.css
+++ /dev/null
@@ -1,88 +0,0 @@
-@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap");
-
-* {
- box-sizing: border-box;
-}
-
-body {
- font-family: "Poppins", sans-serif;
- font-weight: normal;
- background: linear-gradient(to right, #00afff, #00ff6c);
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- height: 100vh;
- overflow: hidden;
- margin: 0;
-}
-
-.main-container {
- background-color: rgba(255, 255, 255, 0.863);
- border-radius: 10px;
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.1);
- text-align: center;
- padding: 10px;
- max-width: 100%;
- width: 800px;
-}
-
-.anime-container h3 {
- font-size: 20px;
- font-weight: 600;
- text-transform: capitalize;
- padding-bottom: 10px;
- letter-spacing: 0.9px;
-}
-
-.anime-container h2 {
- line-height: 30px;
- word-spacing: 1px;
- margin-bottom: 30px;
- position: relative;
-}
-
-.get-anime {
- margin-bottom: 30px;
- background-color: rgba(0, 0, 0, 0.774);
- color: #fff;
- padding: 10px 30px;
- border: none;
- border-radius: 6px;
- outline: none;
- font-size: 16px;
- font-weight: 200;
- cursor: pointer;
- letter-spacing: 1px;
-}
-
-.anime-box {
- display: none;
-}
-
-.anime-box img {
- height: 300px;
- width: 300px;
- border-radius: 50%;
- border: 10px solid #005da3;
- align-items: center;
-}
-
-.hero-name {
- margin-bottom: 30px;
- background-color: rgba(0, 0, 0, 0.774);
- color: #fff;
- padding: 10px 30px;
- border: none;
- border-radius: 6px;
- outline: none;
- font-size: 17px;
- font-weight: bold;
-}
-
-@media screen and (max-width: 500px) {
- .main-container {
- width: 450px;
- flex-wrap: wrap;
- }
-}
diff --git a/projects/background-video-project/background-video.mp4 b/projects/background-video/background-video.mp4
similarity index 100%
rename from projects/background-video-project/background-video.mp4
rename to projects/background-video/background-video.mp4
diff --git a/projects/background-video-project/index.html b/projects/background-video/index.html
similarity index 100%
rename from projects/background-video-project/index.html
rename to projects/background-video/index.html
diff --git a/projects/background-video-project/index.js b/projects/background-video/index.js
similarity index 100%
rename from projects/background-video-project/index.js
rename to projects/background-video/index.js
diff --git a/projects/background-video-project/preloader.gif b/projects/background-video/preloader.gif
similarity index 100%
rename from projects/background-video-project/preloader.gif
rename to projects/background-video/preloader.gif
diff --git a/projects/background-video-project/styles.css b/projects/background-video/styles.css
similarity index 100%
rename from projects/background-video-project/styles.css
rename to projects/background-video/styles.css
diff --git a/projects/basic-calculator/index.html b/projects/basic-calculator/index.html
new file mode 100644
index 0000000..432ea60
--- /dev/null
+++ b/projects/basic-calculator/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ Basic Calculator
+
+
+
+
+
+
+ C
+ /
+ *
+ -
+ 7
+ 8
+ 9
+ +
+ 4
+ 5
+ 6
+ =
+ 1
+ 2
+ 3
+ 0
+ .
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/basic-calculator/index.js b/projects/basic-calculator/index.js
new file mode 100644
index 0000000..40fa6e8
--- /dev/null
+++ b/projects/basic-calculator/index.js
@@ -0,0 +1,29 @@
+const buttonsEl = document.querySelectorAll("button");
+
+const inputFieldEl = document.getElementById("result");
+
+for (let i = 0; i < buttonsEl.length; i++) {
+ buttonsEl[i].addEventListener("click", () => {
+ const buttonValue = buttonsEl[i].textContent;
+ if (buttonValue === "C") {
+ clearResult();
+ } else if (buttonValue === "=") {
+ calculateResult();
+ } else {
+ appendValue(buttonValue);
+ }
+ });
+}
+
+function clearResult() {
+ inputFieldEl.value = "";
+}
+
+function calculateResult() {
+ inputFieldEl.value = eval(inputFieldEl.value);
+}
+
+function appendValue(buttonValue) {
+ inputFieldEl.value += buttonValue;
+ // inputFieldEl.value = inputFieldEl.value + buttonValue;
+}
diff --git a/projects/basic-calculator/style.css b/projects/basic-calculator/style.css
new file mode 100644
index 0000000..baf4abd
--- /dev/null
+++ b/projects/basic-calculator/style.css
@@ -0,0 +1,68 @@
+* {
+ box-sizing: border-box;
+ margin: 0;
+}
+
+.calculator {
+ background-color: #f2f2f2;
+ padding: 20px;
+ max-width: 400px;
+ margin: 0 auto;
+ border: solid 1px #ccc;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+ border-radius: 5px;
+ margin-top: 40px;
+}
+
+#result{
+ width: 100%;
+ padding: 10px;
+ font-size: 24px;
+ border: none;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3) inset;
+ border-radius: 5px;
+}
+
+.buttons{
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ grid-gap: 10px;
+ margin-top: 20px;
+}
+
+button{
+ padding: 10px;
+ font-size: 24px;
+ border: none;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+ border-radius: 5px;
+ cursor: pointer;
+ transition: background-color 0.3s ease;
+
+}
+
+button:hover{
+ background-color: #ddd;
+}
+
+.clear{
+ background-color: #ff4136;
+ color: #fff;
+}
+
+.number, .decimal{
+ background-color: #fff;
+ color: #333;
+
+}
+
+.operator{
+ background-color: #0074d9;
+ color: #fff;
+}
+
+.equals{
+ background-color: #01ff70;
+ grid-row: span 3;
+ color: #fff;
+}
\ No newline at end of file
diff --git a/projects/bmi-calculator/index.html b/projects/bmi-calculator/index.html
index 77c1be9..fd167fe 100644
--- a/projects/bmi-calculator/index.html
+++ b/projects/bmi-calculator/index.html
@@ -4,31 +4,20 @@
-
- BMI
-
+ BMI Calculator
+
-