diff --git a/demos/coding-practice.html b/demos/coding-practice.html
new file mode 100644
index 00000000..240b94ef
--- /dev/null
+++ b/demos/coding-practice.html
@@ -0,0 +1,191 @@
+---
+title: JavaScript Coding Practice
+layout: default
+---
+
+
+
+
+
+
JavaScript Coding Practice
+
+
Welcome to the interactive JavaScript coding practice! This tool allows you to write, run, and test JavaScript code directly in your browser.
+
+
+
+
+
+
+
+
Hello World
+
+ Write a JavaScript function that returns the string "Hello, World!".
+
+
+
+
+
+
+
+
+
+
+
+
Output will appear here...
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demos/css/code-practice.css b/demos/css/code-practice.css
new file mode 100644
index 00000000..f04d3c48
--- /dev/null
+++ b/demos/css/code-practice.css
@@ -0,0 +1,206 @@
+/**
+ * Styles for the JavaScript Coding Practice feature
+ */
+
+/* Main container styles */
+.code-practice-container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 20px;
+ font-family: Arial, sans-serif;
+}
+
+/* Code editor container */
+.code-editor-container {
+ display: flex;
+ flex-direction: column;
+ margin: 20px 0;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ overflow: hidden;
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
+}
+
+/* Code editor header */
+.code-editor-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10px 15px;
+ background-color: #2c3e50;
+ color: white;
+ font-weight: bold;
+}
+
+/* Editor area - when CodeMirror is not available */
+.code-editor {
+ width: 100%;
+ height: 300px;
+ font-family: 'Courier New', monospace;
+ font-size: 14px;
+ padding: 10px;
+ border: none;
+ resize: vertical;
+ background-color: #272822;
+ color: #f8f8f2;
+}
+
+/* CodeMirror specific styles */
+.CodeMirror {
+ height: auto;
+ min-height: 300px;
+ font-family: 'Courier New', monospace;
+ font-size: 14px;
+ line-height: 1.5;
+}
+
+/* Output container */
+.output-container {
+ padding: 15px;
+ background-color: #f9f9f9;
+ border-top: 1px solid #ccc;
+ min-height: 100px;
+ max-height: 200px;
+ overflow-y: auto;
+ font-family: 'Courier New', monospace;
+}
+
+/* Button container */
+.button-container {
+ display: flex;
+ justify-content: space-between;
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ccc;
+}
+
+/* Run button */
+.run-button {
+ padding: 8px 16px;
+ background-color: #27ae60;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-weight: bold;
+ transition: background-color 0.2s;
+}
+
+.run-button:hover {
+ background-color: #2ecc71;
+}
+
+/* Reset button */
+.reset-button {
+ padding: 8px 16px;
+ background-color: #e74c3c;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-weight: bold;
+ transition: background-color 0.2s;
+}
+
+.reset-button:hover {
+ background-color: #c0392b;
+}
+
+/* Challenge container */
+.challenge-container {
+ margin: 20px 0;
+ padding: 20px;
+ background-color: #ecf0f1;
+ border-left: 5px solid #3498db;
+ border-radius: 4px;
+}
+
+/* Challenge title */
+.challenge-title {
+ font-size: 20px;
+ font-weight: bold;
+ margin-bottom: 15px;
+ color: #2c3e50;
+}
+
+/* Challenge description */
+.challenge-description {
+ margin-bottom: 15px;
+ line-height: 1.5;
+ color: #34495e;
+}
+
+/* Challenge selector */
+.challenge-selector {
+ margin: 20px 0;
+}
+
+.challenge-selector select {
+ padding: 8px 12px;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ background-color: white;
+ font-size: 16px;
+ min-width: 200px;
+}
+
+/* Test results */
+.test-results {
+ margin-top: 20px;
+ padding: 15px;
+ background-color: #f8f9fa;
+ border-radius: 4px;
+ border: 1px solid #e9ecef;
+}
+
+.test-results h3 {
+ margin-top: 0;
+ color: #2c3e50;
+}
+
+.test-item {
+ margin: 8px 0;
+ padding: 8px;
+ border-radius: 4px;
+}
+
+.test-pass {
+ background-color: #d4edda;
+ color: #155724;
+}
+
+.test-fail {
+ background-color: #f8d7da;
+ color: #721c24;
+}
+
+/* Console output styling */
+.console-log {
+ padding: 2px 0;
+ font-family: 'Courier New', monospace;
+}
+
+.console-error {
+ color: #e74c3c;
+ font-weight: bold;
+}
+
+/* Responsive adjustments */
+@media (max-width: 768px) {
+ .code-editor-container {
+ margin: 10px 0;
+ }
+
+ .challenge-selector select {
+ width: 100%;
+ }
+
+ .button-container {
+ flex-direction: column;
+ gap: 10px;
+ }
+
+ .run-button, .reset-button {
+ width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/demos/index.html b/demos/index.html
index 29bafe2d..ad9c2e23 100644
--- a/demos/index.html
+++ b/demos/index.html
@@ -45,6 +45,9 @@