diff --git a/data/projects.json b/data/projects.json
index 39e1ccf..ef0d353 100644
--- a/data/projects.json
+++ b/data/projects.json
@@ -143,4 +143,37 @@
"categoryKey": "data",
"difficulty": "easy"
}
+ ,
+ {
+ "title": "Number Guessing Game",
+ "slug": "number-guessing-game",
+ "description": "Guess a random number with feedback and attempt tracking.",
+ "category": "Small Games",
+ "categoryKey": "games",
+ "difficulty": "easy"
+ },
+ {
+ "title": "Text Encryption / Decryption Tool",
+ "slug": "text-encryption-decryption",
+ "description": "Encrypt and decrypt text using simple algorithms.",
+ "category": "Productivity",
+ "categoryKey": "productivity",
+ "difficulty": "easy"
+ },
+ {
+ "title": "Rock-Paper-Scissors Game",
+ "slug": "rock-paper-scissors",
+ "description": "Play rock-paper-scissors against the computer with score tracking.",
+ "category": "Small Games",
+ "categoryKey": "games",
+ "difficulty": "easy"
+ },
+ {
+ "title": "QR Code Generator & Scanner",
+ "slug": "qr-code-generator-scanner",
+ "description": "Generate and scan QR codes from text or images.",
+ "category": "Mini Data",
+ "categoryKey": "data",
+ "difficulty": "medium"
+ }
]
\ No newline at end of file
diff --git a/projects/number-guessing-game/index.html b/projects/number-guessing-game/index.html
new file mode 100644
index 0000000..f70b83a
--- /dev/null
+++ b/projects/number-guessing-game/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Number Guessing Game
+
+
+
+
Number Guessing Game
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/number-guessing-game/main.js b/projects/number-guessing-game/main.js
new file mode 100644
index 0000000..64d8fa1
--- /dev/null
+++ b/projects/number-guessing-game/main.js
@@ -0,0 +1,15 @@
+// TODO: Generate a random number
+// TODO: Handle user guess input
+// TODO: Compare guess to target number
+// TODO: Provide feedback (too high, too low, correct)
+// TODO: Track number of attempts
+// TODO: Restart game functionality
+
+function initNumberGuessingGame() {
+ // TODO: Generate random number
+ // TODO: Handle user input and feedback
+ // TODO: Track attempts
+ // TODO: Restart game
+}
+
+window.addEventListener('DOMContentLoaded', initNumberGuessingGame);
\ No newline at end of file
diff --git a/projects/number-guessing-game/styles.css b/projects/number-guessing-game/styles.css
new file mode 100644
index 0000000..95f3d47
--- /dev/null
+++ b/projects/number-guessing-game/styles.css
@@ -0,0 +1 @@
+/* TODO: Style game container, input, button, feedback, attempts, restart button */
\ No newline at end of file
diff --git a/projects/qr-code-generator-scanner/index.html b/projects/qr-code-generator-scanner/index.html
new file mode 100644
index 0000000..da91799
--- /dev/null
+++ b/projects/qr-code-generator-scanner/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ QR Code Generator & Scanner
+
+
+
+
QR Code Generator & Scanner
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/qr-code-generator-scanner/main.js b/projects/qr-code-generator-scanner/main.js
new file mode 100644
index 0000000..5e1eae6
--- /dev/null
+++ b/projects/qr-code-generator-scanner/main.js
@@ -0,0 +1,14 @@
+// TODO: Generate QR code from input text/URL
+// TODO: Display generated QR code
+// TODO: Download QR code image
+// TODO: Scan uploaded QR code image
+// TODO: Display scanned QR code result
+
+function initQRCodeGeneratorScanner() {
+ // TODO: Generate QR code from input
+ // TODO: Scan QR code from image
+ // TODO: Display results
+ // TODO: Download QR code
+}
+
+window.addEventListener('DOMContentLoaded', initQRCodeGeneratorScanner);
\ No newline at end of file
diff --git a/projects/qr-code-generator-scanner/styles.css b/projects/qr-code-generator-scanner/styles.css
new file mode 100644
index 0000000..8cd3811
--- /dev/null
+++ b/projects/qr-code-generator-scanner/styles.css
@@ -0,0 +1 @@
+/* TODO: Style QR container, input, QR code display, download button, scan input, result display */
\ No newline at end of file
diff --git a/projects/rock-paper-scissors/index.html b/projects/rock-paper-scissors/index.html
new file mode 100644
index 0000000..e55fee6
--- /dev/null
+++ b/projects/rock-paper-scissors/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Rock-Paper-Scissors Game
+
+
+
+
Rock-Paper-Scissors Game
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/rock-paper-scissors/main.js b/projects/rock-paper-scissors/main.js
new file mode 100644
index 0000000..089cdee
--- /dev/null
+++ b/projects/rock-paper-scissors/main.js
@@ -0,0 +1,14 @@
+// TODO: Handle user selection (rock, paper, scissors)
+// TODO: Generate computer choice
+// TODO: Determine winner/loser/draw
+// TODO: Update and display scoreboard
+// TODO: Restart game functionality
+
+function initRockPaperScissors() {
+ // TODO: Handle user choice
+ // TODO: Generate computer choice
+ // TODO: Determine winner
+ // TODO: Update scoreboard
+}
+
+window.addEventListener('DOMContentLoaded', initRockPaperScissors);
\ No newline at end of file
diff --git a/projects/rock-paper-scissors/styles.css b/projects/rock-paper-scissors/styles.css
new file mode 100644
index 0000000..bfbf614
--- /dev/null
+++ b/projects/rock-paper-scissors/styles.css
@@ -0,0 +1 @@
+/* TODO: Style RPS container, buttons, choices display, scoreboard, restart button */
\ No newline at end of file
diff --git a/projects/text-encryption-decryption/index.html b/projects/text-encryption-decryption/index.html
new file mode 100644
index 0000000..8fe3990
--- /dev/null
+++ b/projects/text-encryption-decryption/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Text Encryption / Decryption Tool
+
+
+
+
Text Encryption / Decryption Tool
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/text-encryption-decryption/main.js b/projects/text-encryption-decryption/main.js
new file mode 100644
index 0000000..b57141e
--- /dev/null
+++ b/projects/text-encryption-decryption/main.js
@@ -0,0 +1,14 @@
+// TODO: Encrypt input text (e.g., Caesar cipher)
+// TODO: Decrypt input text
+// TODO: Handle input and output display
+// TODO: Copy result to clipboard
+// TODO: Select encryption algorithm
+
+function initTextEncryptionDecryption() {
+ // TODO: Handle text input
+ // TODO: Encrypt and decrypt functions
+ // TODO: Display result
+ // TODO: Copy to clipboard
+}
+
+window.addEventListener('DOMContentLoaded', initTextEncryptionDecryption);
\ No newline at end of file
diff --git a/projects/text-encryption-decryption/styles.css b/projects/text-encryption-decryption/styles.css
new file mode 100644
index 0000000..b05f384
--- /dev/null
+++ b/projects/text-encryption-decryption/styles.css
@@ -0,0 +1 @@
+/* TODO: Style tool container, textarea, buttons, result display, algorithm selector */
\ No newline at end of file