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 = `