diff --git a/Domains/Frontend/MiniProjects/BMICalculator/README.md b/Domains/Frontend/MiniProjects/BMICalculator/README.md
new file mode 100644
index 00000000..9a2d372b
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/BMICalculator/README.md
@@ -0,0 +1,58 @@
+# ๐๏ธโโ๏ธ BMI Calculator
+
+**Contributor:** [Sanjeev Deori](https://github.com/SanjeevDeori)
+
+## ๐งพ Description
+A **simple and responsive BMI Calculator** web app that allows users to calculate their Body Mass Index (BMI) based on weight and height. The app provides instant health feedback with animated results and supports dark/light mode.
+
+---
+
+## ๐ Features
+- Input fields for **weight (kg)** and **height (cm)**
+- Calculate BMI on button click
+- Display **BMI value** and **health category**
+ - Underweight
+ - Normal
+ - Overweight
+ - Obese
+- Responsive design for mobile and desktop
+
+---
+
+## ๐ก Bonus Features
+- Dark/Light mode toggle
+- Animated feedback when displaying BMI result
+
+---
+
+## ๐งฉ Tech Stack
+- **HTML5** โ Structure and layout
+- **CSS3** โ Styling, responsiveness, dark/light theme
+- **JavaScript (Vanilla)** โ BMI calculation, animations, theme toggle
+
+---
+
+## ๐น๏ธ How to Use
+1. Open `index.html` in your browser.
+2. Enter your **weight (kg)** and **height (cm)**.
+3. Click **Calculate BMI**.
+4. View your BMI value and category with animated feedback.
+5. Toggle **Dark/Light mode** using the checkbox in the header.
+
+---
+
+## ๐ธ Screenshots
+*(Add screenshots or GIFs here to showcase the UI, BMI calculation, and dark/light mode.)*
+
+---
+
+## ๐๏ธ Setup & Run Locally
+1. Clone the repository:
+ ```bash
+ git clone https://github.com/SanjeevDeori/bmi-calculator.git
+2. Navigate to the project folder:
+```bash
+cd bmi-calculator
+
+
+3. Open index.html in your browser.
\ No newline at end of file
diff --git a/Domains/Frontend/MiniProjects/BMICalculator/index.html b/Domains/Frontend/MiniProjects/BMICalculator/index.html
new file mode 100644
index 00000000..55bc08a7
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/BMICalculator/index.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+ BMI Calculator
+
+
+
+
+
+
BMI Calculator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Your BMI: โ
+
Category: โ
+
+
+
+
+
+
+
+
+
diff --git a/Domains/Frontend/MiniProjects/BMICalculator/script.js b/Domains/Frontend/MiniProjects/BMICalculator/script.js
new file mode 100644
index 00000000..3ab3788b
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/BMICalculator/script.js
@@ -0,0 +1,58 @@
+// script.js
+
+const weightInput = document.getElementById("weight");
+const heightInput = document.getElementById("height");
+const calculateBtn = document.getElementById("calculateBtn");
+const bmiValue = document.getElementById("bmiValue");
+const bmiCategory = document.getElementById("bmiCategory");
+const resultDiv = document.getElementById("result");
+const themeToggle = document.getElementById("themeToggle");
+
+// Dark/Light mode
+function initTheme() {
+ const saved = localStorage.getItem("bmi_theme");
+ if(saved==="dark") document.body.classList.add("dark"), themeToggle.checked=true;
+}
+initTheme();
+
+themeToggle.addEventListener("change", () => {
+ if(themeToggle.checked){
+ document.body.classList.add("dark");
+ localStorage.setItem("bmi_theme","dark");
+ }else{
+ document.body.classList.remove("dark");
+ localStorage.setItem("bmi_theme","light");
+ }
+});
+
+// BMI Calculation
+function calculateBMI(){
+ const weight = parseFloat(weightInput.value);
+ const heightCm = parseFloat(heightInput.value);
+ if(!weight || !heightCm){
+ alert("Please enter valid weight and height");
+ return;
+ }
+
+ const heightM = heightCm / 100;
+ const bmi = weight / (heightM * heightM);
+ const roundedBMI = bmi.toFixed(1);
+ bmiValue.textContent = roundedBMI;
+
+ let category = "";
+ let color = "";
+
+ if(bmi<18.5){category="Underweight"; color="#ffd86b";}
+ else if(bmi<25){category="Normal"; color="#7cf59b";}
+ else if(bmi<30){category="Overweight"; color="#ffb86b";}
+ else{category="Obese"; color="#ff5f5f";}
+
+ bmiCategory.textContent = category;
+ resultDiv.style.color = color;
+
+ // Simple animation
+ resultDiv.style.transform="scale(1.1)";
+ setTimeout(()=>resultDiv.style.transform="scale(1)",300);
+}
+
+calculateBtn.addEventListener("click", calculateBMI);
diff --git a/Domains/Frontend/MiniProjects/BMICalculator/styles.css b/Domains/Frontend/MiniProjects/BMICalculator/styles.css
new file mode 100644
index 00000000..f016b119
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/BMICalculator/styles.css
@@ -0,0 +1,109 @@
+:root {
+ --bg: #f4f7fb;
+ --card: #ffffff;
+ --text: #17202a;
+ --muted: #536170;
+ --accent: #0066ff;
+ --radius: 12px;
+ --danger: #e64c65;
+ --success: #3ae374;
+}
+
+*{box-sizing:border-box;}
+body{
+ margin:0;
+ font-family:Inter, sans-serif;
+ background: var(--bg);
+ color: var(--text);
+ display:flex;
+ justify-content:center;
+ align-items:flex-start;
+ min-height:100vh;
+ padding:20px;
+ transition: background 0.3s, color 0.3s;
+}
+
+.container{
+ max-width: 400px;
+ width:100%;
+}
+
+.header{
+ display:flex;
+ justify-content:space-between;
+ align-items:center;
+ margin-bottom:16px;
+}
+
+.header h1{margin:0;font-size:1.6rem;}
+.theme-toggle{display:flex;align-items:center;gap:8px;font-size:0.9rem;}
+.theme-toggle input{width:18px;height:18px;}
+
+.card{
+ background: var(--card);
+ padding:20px;
+ border-radius:var(--radius);
+ box-shadow:0 6px 18px rgba(23,32,42,0.06);
+}
+
+.input-group{
+ display:flex;
+ flex-direction:column;
+ margin-bottom:12px;
+}
+
+.input-group label{
+ font-size:0.9rem;
+ margin-bottom:4px;
+}
+
+.input-group input{
+ padding:10px;
+ font-size:1rem;
+ border-radius:8px;
+ border:1px solid #e6eef7;
+}
+
+.btn{
+ width:100%;
+ padding:10px;
+ border:0;
+ border-radius:8px;
+ cursor:pointer;
+ font-weight:600;
+ margin-top:8px;
+}
+
+.btn.primary{
+ background: linear-gradient(90deg, var(--accent), #3aa1ff);
+ color:white;
+}
+
+.result{
+ margin-top:16px;
+ text-align:center;
+ font-weight:600;
+ font-size:1rem;
+ transition: transform 0.3s, color 0.3s;
+}
+
+.footer{
+ text-align:center;
+ margin-top:12px;
+ color: var(--muted);
+ font-size:0.85rem;
+}
+
+/* Dark mode */
+body.dark{
+ --bg:#0f1720;
+ --card:#0b1220;
+ --text:#e6eef8;
+ --muted:#a8b3c3;
+}
+
+body.dark .input-group input{
+ background:#071427;
+ color:var(--text);
+ border:1px solid #0f2436;
+}
diff --git a/Domains/Frontend/MiniProjects/RandomPasswordGenrator/README.md b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/README.md
new file mode 100644
index 00000000..3484704a
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/README.md
@@ -0,0 +1,65 @@
+# ๐ Secure Password Generator
+
+**Contributor:** [Sanjeev Deori](https://github.com/SanjeevDeori)
+
+## ๐งพ Description
+A **secure and customizable password generator** web app that helps users create strong passwords for online accounts. Includes options for password length, character types, live strength estimation, and the ability to save passwords locally.
+
+---
+
+## ๐ Features
+- Generate passwords of user-defined length
+- Include options for:
+ - Uppercase letters (AโZ)
+ - Lowercase letters (aโz)
+ - Numbers (0โ9)
+ - Symbols (!@#$%^&*)
+- Copy password to clipboard
+- Display password strength visually
+- Save generated passwords locally
+- Responsive layout for desktop and mobile
+
+---
+
+## ๐ก Bonus Features
+- Dark/Light mode toggle
+- Save passwords with custom labels
+- Manage saved passwords: Copy, Use, Delete
+- LocalStorage-backed saved password list
+
+---
+
+## ๐งฉ Tech Stack
+- **HTML5** โ Structure and layout
+- **CSS3** โ Styling, responsiveness, and dark/light theme
+- **JavaScript (Vanilla)** โ Password generation logic, clipboard functionality, localStorage
+
+---
+
+## ๐น๏ธ How to Use
+1. Open `index.html` in your browser.
+2. Select the desired password length and character options.
+3. Click **Generate** to create a new password.
+4. Use the **Copy** button to copy it to the clipboard.
+5. Optionally, save the password with a label using the **Save** button.
+6. View, use, or delete saved passwords in the saved passwords section.
+
+---
+
+## ๐ธ Screenshots
+*(Add screenshots or GIFs here to showcase the UI, dark/light mode, and saved passwords feature.)*
+
+---
+
+## ๐๏ธ Setup & Run Locally
+1. Clone the repository:
+ ```bash
+ git clone https://github.com/SanjeevDeori/password-generator.git
+
+2. Open the project folder:
+```bash
+
+cd password-generator
+
+
+3. Open index.html in your browser to use the app.
\ No newline at end of file
diff --git a/Domains/Frontend/MiniProjects/RandomPasswordGenrator/index.html b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/index.html
new file mode 100644
index 00000000..0e243586
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/index.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+ Password Generator
+
+
+
+
+
+
Secure Password Generator
+
+
+
+
+
+
+
Create a password
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
โ
+
+
+
+
+
+
Saved Passwords
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Domains/Frontend/MiniProjects/RandomPasswordGenrator/script.js b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/script.js
new file mode 100644
index 00000000..25b787bd
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/RandomPasswordGenrator/script.js
@@ -0,0 +1,285 @@
+// script.js
+(() => {
+ // Character sets
+ const SETS = {
+ upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ lower: "abcdefghijklmnopqrstuvwxyz",
+ numbers: "0123456789",
+ symbols: "!@#$%^&*()_+[]{}|;:,.<>?/~`-=",
+ };
+
+ // Elements
+ const passwordOutput = document.getElementById("passwordOutput");
+ const lengthRange = document.getElementById("lengthRange");
+ const lengthValue = document.getElementById("lengthValue");
+ const upper = document.getElementById("upper");
+ const lower = document.getElementById("lower");
+ const numbers = document.getElementById("numbers");
+ const symbols = document.getElementById("symbols");
+ const generateBtn = document.getElementById("generateBtn");
+ const copyBtn = document.getElementById("copyBtn");
+ const saveBtn = document.getElementById("saveBtn");
+ const meterFill = document.getElementById("meterFill");
+ const strengthLabel = document.getElementById("strengthLabel");
+ const saveForm = document.getElementById("saveForm");
+ const saveLabel = document.getElementById("saveLabel");
+ const savedList = document.getElementById("savedList");
+ const clearAllBtn = document.getElementById("clearAllBtn");
+ const themeToggle = document.getElementById("themeToggle");
+
+ // LocalStorage keys
+ const LS_SAVED = "pwgen_saved";
+ const LS_THEME = "pwgen_theme";
+
+ // Helper: random integer
+ function randInt(max) {
+ return Math.floor(Math.random() * max);
+ }
+
+ // Generate password
+ function generatePassword(length) {
+ const chosenSets = [];
+ if (upper.checked) chosenSets.push(SETS.upper);
+ if (lower.checked) chosenSets.push(SETS.lower);
+ if (numbers.checked) chosenSets.push(SETS.numbers);
+ if (symbols.checked) chosenSets.push(SETS.symbols);
+
+ if (!chosenSets.length) {
+ alert("Select at least one character type.");
+ return "";
+ }
+
+ // Ensure at least one from each chosen set for better strength
+ const guaranteed = chosenSets.map(s => s[randInt(s.length)]);
+ let allChars = chosenSets.join("");
+ let remaining = length - guaranteed.length;
+ let resultChars = [];
+
+ for (let i = 0; i < remaining; i++) {
+ resultChars.push(allChars[randInt(allChars.length)]);
+ }
+
+ // merge guaranteed and remaining and shuffle
+ resultChars = resultChars.concat(guaranteed);
+ // Fisher-Yates shuffle
+ for (let i = resultChars.length - 1; i > 0; i--) {
+ const j = randInt(i + 1);
+ [resultChars[i], resultChars[j]] = [resultChars[j], resultChars[i]];
+ }
+
+ return resultChars.join("");
+ }
+
+ // Strength estimator (simple, intuitive)
+ function estimateStrength(pw) {
+ let pool = 0;
+ if (/[A-Z]/.test(pw)) pool += 26;
+ if (/[a-z]/.test(pw)) pool += 26;
+ if (/[0-9]/.test(pw)) pool += 10;
+ if (/[^A-Za-z0-9]/.test(pw)) pool += 32;
+
+ // entropy bits ~ length * log2(pool)
+ let bits = pw.length * (pool ? Math.log2(pool) : 0);
+ // normalize into 0-100
+ const score = Math.max(0, Math.min(100, Math.round((bits / 60) * 100)));
+
+ let label = "Too weak";
+ if (score < 25) label = "Weak";
+ else if (score < 50) label = "Fair";
+ else if (score < 75) label = "Good";
+ else label = "Excellent";
+
+ return { score, label, bits: Math.round(bits) };
+ }
+
+ // Update strength UI
+ function updateStrengthUI(pw) {
+ if (!pw) {
+ meterFill.style.width = "0%";
+ strengthLabel.textContent = "โ";
+ meterFill.style.background = "transparent";
+ return;
+ }
+ const { score, label } = estimateStrength(pw);
+ meterFill.style.width = `${score}%`;
+ strengthLabel.textContent = label;
+ // color mapping
+ if (score < 25) meterFill.style.background = "#ff5f5f";
+ else if (score < 50) meterFill.style.background = "#ffb86b";
+ else if (score < 75) meterFill.style.background = "#ffd86b";
+ else meterFill.style.background = "#7cf59b";
+ }
+
+ // Save/Load saved passwords
+ function loadSaved() {
+ try {
+ const raw = localStorage.getItem(LS_SAVED);
+ return raw ? JSON.parse(raw) : [];
+ } catch {
+ return [];
+ }
+ }
+ function saveSaved(list) {
+ localStorage.setItem(LS_SAVED, JSON.stringify(list));
+ }
+
+ function renderSaved() {
+ const items = loadSaved();
+ savedList.innerHTML = "";
+ if (!items.length) {
+ savedList.innerHTML = `