diff --git a/lessons/00-welcome.json b/lessons/00-welcome.json
index ce3c572..bcf8724 100644
--- a/lessons/00-welcome.json
+++ b/lessons/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies is a free, open-source platform for learning web development through hands-on exercises. No account required!
What you'll learn:
• HTML - Semantic elements, forms, tables, SVG (HTML Block & Inline, HTML Forms, HTML Tables)
• CSS - Selectors, box model, flexbox, animations (CSS Selectors, CSS Box Model, CSS Flexbox)
• Responsive Design - Media queries and mobile-first layouts
How it works:
1. Read the task in the left panel
2. Write code in the editor
3. See live results in the preview
4. Get instant feedback with hints
Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo
More resources:
• HTML over JS - Native HTML vs JavaScript solutions
• Web Engineering Mandala - JavaScript technology roadmap",
"task": "Write Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "
Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{
diff --git a/lessons/05-units-variables.json b/lessons/05-units-variables.json
index d4e89e0..caf64a5 100644
--- a/lessons/05-units-variables.json
+++ b/lessons/05-units-variables.json
@@ -32,7 +32,7 @@
{
"id": "units-2",
"title": "CSS Custom Properties",
- "description": "Define and reuse variables (--custom properties) to centralize your theme values.",
+ "description": "Define and reuse variables (--custom properties) to centralize your theme values.
:root {\n --main-color: #6200ee;\n}\n.element {\n color: var(--main-color);\n}",
"task": "Create a --main-color variable in :root with #6200ee and apply it as the border color on .themed.",
"previewHTML": "Variable Box
",
"previewBaseCSS": "body { font-family: sans-serif; padding: 1rem; } .themed { padding: 1rem; border: 0.125rem solid #ddd; }",
@@ -66,7 +66,7 @@
{
"id": "units-3",
"title": "Unit Calculations (calc)",
- "description": "Use the calc() function to combine different units in one expression.",
+ "description": "Use the calc() function to combine different units in one expression.
.element {\n width: calc(100% - 2rem);\n height: calc(50vh + 1rem);\n}",
"task": "Set the width of .sized to calc(100% - 2rem) and min-height to calc(10vh + 1rem).",
"previewHTML": "Calc Demo
",
"previewBaseCSS": "body { font-family: sans-serif; padding: 1rem; } .sized { background: #e8f5e9; padding: 1rem; }",
diff --git a/lessons/08-responsive.json b/lessons/08-responsive.json
index 0da4143..43de4e5 100644
--- a/lessons/08-responsive.json
+++ b/lessons/08-responsive.json
@@ -8,7 +8,7 @@
{
"id": "responsive-1",
"title": "Media Queries",
- "description": "Understand the syntax and use cases for CSS media queries to apply styles conditionally based on viewport characteristics.",
+ "description": "Understand the syntax and use cases for CSS media queries to apply styles conditionally based on viewport characteristics.
@media (max-width: 600px) {\n .element {\n background: lightcoral;\n }\n}",
"task": "Write a media query with @media (max-width: 600px) that changes .panel background to lightcoral.",
"previewHTML": "Resize the window
",
"previewBaseCSS": "body { font-family: sans-serif; padding: 1rem; } .panel { padding: 1rem; background: lightblue; }",
diff --git a/lessons/99-goodbye.json b/lessons/99-goodbye.json
new file mode 100644
index 0000000..7a34dea
--- /dev/null
+++ b/lessons/99-goodbye.json
@@ -0,0 +1,67 @@
+{
+ "$schema": "../schemas/code-crispies-module-schema.json",
+ "id": "goodbye",
+ "title": "What's Next?",
+ "description": "Congratulations on completing your learning journey!",
+ "mode": "html",
+ "difficulty": "beginner",
+ "lessons": [
+ {
+ "id": "congratulations",
+ "title": "Well Done!",
+ "description": "Congratulations! You've made it through Code Crispies!
You've learned:
• HTML - Semantic elements, forms, tables, and more
• CSS - Selectors, box model, flexbox, grid, animations
• Responsive Design - Media queries and mobile-first layouts
These are the building blocks of every website on the internet. Keep practicing and building!",
+ "task": "Type Thank you!",
+ "previewHTML": "",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } p { font-size: 1.5rem; color: #6366f1; }",
+ "sandboxCSS": "",
+ "initialCode": "",
+ "solution": "Thank you!
",
+ "previewContainer": "preview-area",
+ "validations": [
+ {
+ "type": "contains",
+ "value": "Thank you",
+ "message": "Type Thank you!"
+ }
+ ]
+ },
+ {
+ "id": "contribute",
+ "title": "Contribute",
+ "description": "Help others learn!
Code Crispies is open source and always looking for new lessons. You can contribute by:
• Writing new lessons - Share your knowledge on topics we haven't covered
• Translating lessons - Help make Code Crispies accessible in more languages
• Fixing bugs - Found something broken? Help us fix it!
• Improving content - Make existing lessons clearer and better
Get started:
• Gitea Repository - Main source code
• GitHub Mirror - Alternative access
Lessons are simple JSON files in the lessons/ folder. Check existing lessons for the format!",
+ "task": "Click Next to continue",
+ "previewHTML": "Your First Lesson
Create a JSON file in lessons/
{\n \"id\": \"my-lesson\",\n \"title\": \"My Lesson\",\n \"lessons\": [...]\n} ",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; } .card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 20px; } h2 { color: #6366f1; margin-top: 0; } pre { background: #1e293b; color: #e2e8f0; padding: 12px; border-radius: 4px; overflow-x: auto; }",
+ "sandboxCSS": "",
+ "initialCode": "\n
Your First Lesson
\n
Create a JSON file in lessons/
\n
{\n \"id\": \"my-lesson\",\n \"title\": \"My Lesson\",\n \"lessons\": [...]\n}\n
",
+ "solution": "\n
Your First Lesson
\n
Create a JSON file in lessons/
\n
{\n \"id\": \"my-lesson\",\n \"title\": \"My Lesson\",\n \"lessons\": [...]\n}\n
",
+ "previewContainer": "preview-area",
+ "validations": [
+ {
+ "type": "contains",
+ "value": "card",
+ "message": "Click Next to continue"
+ }
+ ]
+ },
+ {
+ "id": "keep-learning",
+ "title": "Keep Learning",
+ "description": "Your journey continues!
Recommended resources:
• MDN Web Docs - The definitive web development reference
• CSS-Tricks - Practical CSS techniques and tutorials
• web.dev - Modern web development best practices
Practice projects:
• Build your personal portfolio website
• Recreate your favorite website's layout
• Create a responsive landing page
• Build a CSS-only interactive component
Remember: The best way to learn is by building. Start small, iterate, and have fun!
Thank you for learning with Code Crispies!",
+ "task": "Explore the Playground",
+ "previewHTML": "🎉Happy Coding!
See you in the code!
",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; display: flex; align-items: center; justify-content: center; min-height: 200px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .message { text-align: center; color: white; } .emoji { font-size: 4rem; display: block; margin-bottom: 1rem; } h1 { margin: 0 0 0.5rem; } p { margin: 0; opacity: 0.9; }",
+ "sandboxCSS": "",
+ "initialCode": "\n
🎉\n
Happy Coding!
\n
See you in the code!
\n
",
+ "solution": "\n
🎉\n
Happy Coding!
\n
See you in the code!
\n
",
+ "previewContainer": "preview-area",
+ "validations": [
+ {
+ "type": "contains",
+ "value": "message",
+ "message": "Explore the Playground"
+ }
+ ]
+ }
+ ]
+}
diff --git a/lessons/ar/00-welcome.json b/lessons/ar/00-welcome.json
index 4f6450a..c5fbdb6 100644
--- a/lessons/ar/00-welcome.json
+++ b/lessons/ar/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies is a free, open-source platform for learning web development through hands-on exercises. No account required!
What you'll learn:
• HTML - Semantic elements, forms, tables, SVG (HTML Block & Inline, HTML Forms, HTML Tables)
• CSS - Selectors, box model, flexbox, animations (CSS Selectors, CSS Box Model, CSS Flexbox)
• Responsive Design - Media queries and mobile-first layouts
How it works:
1. Read the task in the left panel
2. Write code in the editor
3. See live results in the preview
4. Get instant feedback with hints
Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo
More resources:
• HTML over JS - Native HTML vs JavaScript solutions
• Web Engineering Mandala - JavaScript technology roadmap",
"task": "Write Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{
diff --git a/lessons/de/00-welcome.json b/lessons/de/00-welcome.json
index b2b9ea3..8c29486 100644
--- a/lessons/de/00-welcome.json
+++ b/lessons/de/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies ist eine kostenlose Open-Source-Plattform zum Erlernen von Webentwicklung durch praktische Übungen. Kein Konto erforderlich!
Was du lernst:
• HTML - Semantische Elemente, Formulare, Tabellen, SVG (HTML Block & Inline, HTML Formulare, HTML Tabellen)
• CSS - Selektoren, Box-Model, Flexbox, Animationen (CSS Selektoren, CSS Box-Model, CSS Flexbox)
• Responsive Design - Media Queries und Mobile-First Layouts
So funktioniert's:
1. Lies die Aufgabe im linken Bereich
2. Schreibe Code im Editor
3. Sieh Live-Ergebnisse in der Vorschau
4. Bekomme sofortiges Feedback mit Hinweisen
Tastenkürzel: Strg+Z rückgängig, Strg+Umschalt+Z wiederholen
Weitere Ressourcen:
• HTML over JS - Native HTML vs JavaScript-Lösungen
• Web Engineering Mandala - JavaScript Technologie-Roadmap",
"task": "Schreibe Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{
diff --git a/lessons/es/00-welcome.json b/lessons/es/00-welcome.json
index 4f6450a..c5fbdb6 100644
--- a/lessons/es/00-welcome.json
+++ b/lessons/es/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies is a free, open-source platform for learning web development through hands-on exercises. No account required!
What you'll learn:
• HTML - Semantic elements, forms, tables, SVG (HTML Block & Inline, HTML Forms, HTML Tables)
• CSS - Selectors, box model, flexbox, animations (CSS Selectors, CSS Box Model, CSS Flexbox)
• Responsive Design - Media queries and mobile-first layouts
How it works:
1. Read the task in the left panel
2. Write code in the editor
3. See live results in the preview
4. Get instant feedback with hints
Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo
More resources:
• HTML over JS - Native HTML vs JavaScript solutions
• Web Engineering Mandala - JavaScript technology roadmap",
"task": "Write Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{
diff --git a/lessons/flexbox.json b/lessons/flexbox.json
index cc75563..e028f1b 100644
--- a/lessons/flexbox.json
+++ b/lessons/flexbox.json
@@ -8,7 +8,7 @@
{
"id": "flexbox-1",
"title": "Container",
- "description": "Learn how to create a flex container and understand the main and cross axes.",
+ "description": "Learn how to create a flex container and understand the main and cross axes.
.container {\n display: flex;\n justify-content: center;\n align-items: center;\n}",
"task": "Add display: flex to .wrap to create a flexbox layout.",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 1rem; } .box { background: steelblue; color: white; padding: 1rem; margin: 8px; text-align: center; font-weight: bold; }",
diff --git a/lessons/grid.json b/lessons/grid.json
index 33967fe..d0be2de 100644
--- a/lessons/grid.json
+++ b/lessons/grid.json
@@ -8,7 +8,7 @@
{
"id": "grid-1",
"title": "Grid Container Basics",
- "description": "Learn how to create a grid container and define basic grid structures.",
+ "description": "Learn how to create a grid container and define basic grid structures.
.container {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 1rem;\n}",
"task": "Create a .grid with display: grid, grid-template-columns: repeat(3, 1fr), and gap: 1rem.",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui, -apple-system, sans-serif; padding: 1.25rem; } .item { background-color: #9b59b6; color: white; padding: 1.25rem; text-align: center; font-weight: bold; }",
diff --git a/lessons/pl/00-welcome.json b/lessons/pl/00-welcome.json
index 4f6450a..c5fbdb6 100644
--- a/lessons/pl/00-welcome.json
+++ b/lessons/pl/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies is a free, open-source platform for learning web development through hands-on exercises. No account required!
What you'll learn:
• HTML - Semantic elements, forms, tables, SVG (HTML Block & Inline, HTML Forms, HTML Tables)
• CSS - Selectors, box model, flexbox, animations (CSS Selectors, CSS Box Model, CSS Flexbox)
• Responsive Design - Media queries and mobile-first layouts
How it works:
1. Read the task in the left panel
2. Write code in the editor
3. See live results in the preview
4. Get instant feedback with hints
Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo
More resources:
• HTML over JS - Native HTML vs JavaScript solutions
• Web Engineering Mandala - JavaScript technology roadmap",
"task": "Write Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{
diff --git a/lessons/uk/00-welcome.json b/lessons/uk/00-welcome.json
index 4f6450a..c5fbdb6 100644
--- a/lessons/uk/00-welcome.json
+++ b/lessons/uk/00-welcome.json
@@ -12,10 +12,10 @@
"description": "Code Crispies is a free, open-source platform for learning web development through hands-on exercises. No account required!
What you'll learn:
• HTML - Semantic elements, forms, tables, SVG (HTML Block & Inline, HTML Forms, HTML Tables)
• CSS - Selectors, box model, flexbox, animations (CSS Selectors, CSS Box Model, CSS Flexbox)
• Responsive Design - Media queries and mobile-first layouts
How it works:
1. Read the task in the left panel
2. Write code in the editor
3. See live results in the preview
4. Get instant feedback with hints
Keyboard shortcuts: Ctrl+Z to undo, Ctrl+Shift+Z to redo
More resources:
• HTML over JS - Native HTML vs JavaScript solutions
• Web Engineering Mandala - JavaScript technology roadmap",
"task": "Write Hello World",
"previewHTML": "",
- "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; } h1 { color: #6366f1; }",
+ "previewBaseCSS": "body { font-family: system-ui, sans-serif; padding: 20px; text-align: center; font-size: 2rem; color: #6366f1; font-weight: bold; }",
"sandboxCSS": "",
"initialCode": "",
- "solution": "Hello World
",
+ "solution": "Hello World",
"previewContainer": "preview-area",
"validations": [
{