Commit Graph

136 Commits

Author SHA1 Message Date
71ef6fae63 style: improve preview section UI
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- Make preview-header fully transparent
- Add inset shadow to preview-section
- Remove green tint from expected overlay

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 18:34:41 +01:00
697265d1a8 style: make preview-header transparent, remove border
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
2025-12-30 18:28:57 +01:00
73f0e46b13 fix: change preview-header border from bottom to top
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
2025-12-30 18:27:59 +01:00
496ff11252 refactor: shorten compound class names to single words
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- box-model: .margin-box→.outer, .border-box→.sized, .shorthand-box→.spaced,
  .padding-box→.padded, .border-demo→.line
- units-variables: .unit-box→.box, .var-box→.themed, .calc-box→.sized,
  .viewport-box→.view
- responsive: .responsive-box→.panel, .fluid-text→.text, .grid-responsive→.cards
- Move expected toggle below preview area
- Update German translations with same changes
2025-12-30 18:23:54 +01:00
5adff0861d fix: reorder instruction elements - title first, pill second
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- Move h2 lesson-title before module-pill
- Add more spacing before lesson-description
2025-12-30 18:11:11 +01:00
6b86da0cbc refactor: reorder lesson modules and update footer links
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- Reorder modules by learning path: HTML first, then CSS, then Tailwind
- Group modules with comments for clarity
- Change footer link from GitHub to Gitea (librete.ch)
2025-12-30 18:09:47 +01:00
2198a8ccc6 fix: add kbd tags to lesson messages and reorder task/description
- Replace single quotes with <kbd> tags in validation messages
- German and English lessons updated for consistent formatting
- Move task instruction before description in UI (index.html)
2025-12-30 18:08:11 +01:00
87ece530eb refactor: shorten class names in layout lessons for easier typing
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- flexbox.json: .flex-container → .wrap
- grid.json: .grid-container → .grid, .grid-layout → .page,
  .responsive-grid → .cards, .align-grid → .cells, .overlap-grid → .stack
- 07-layouts.json: .flex-container → .flex, .flex-item → .item,
  .grid-container → .grid
- CLAUDE.md: add short class names rule (1-2 syllables max)
2025-12-30 16:47:31 +01:00
42a35895af fix: ensure preview iframe html/body have min-height 100%
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
2025-12-30 16:29:49 +01:00
9853ced6b0 refactor: shorten lesson titles and improve content
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- Shorten verbose lesson titles for better sidebar display
- Minor content improvements across lessons

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:22:48 +01:00
27cbcbabed fix: improve lesson content with kbd tags, solutions, and animation contrast
- Add <kbd> tags to CSS property values and selectors in task descriptions
- Add solution code to all lessons for better guidance
- Improve animation contrast in transitions lesson (black/white instead
  of similar purples, dramatic color changes for visibility)
- Simplify validation messages with kbd formatting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:22:24 +01:00
09d1247c23 Merge branch 'feat/i18n-js' - JS-based internationalization 2025-12-30 16:11:23 +01:00
5e0f2c9936 feat(i18n): add dynamic lesson loading by language
- Import both EN and DE lesson files in lessons.js
- loadModules() now accepts language parameter
- toggleLanguage() reloads lessons in new language
- initializeModules() uses current language from i18n
- Preserves user position when switching languages
2025-12-30 15:43:00 +01:00
a621adada9 test: update renderer tests for i18n changes
Remove expectations for Lessons heading since it's now in
HTML rather than being added by renderModuleList()
2025-12-30 15:12:04 +01:00
b7146f1e79 chore: change port to 1234 and add Makefile/flake.nix
- Change dev server port from 1312 to 1234
- Add Makefile for common development commands
- Add flake.nix for Nix development environment
2025-12-30 15:11:57 +01:00
0f19da423c fix(i18n): update help text to reflect live preview
- Preview updates automatically as you type
- Ctrl+Enter triggers immediate validation, not required for basic use
2025-12-30 15:11:50 +01:00
9a197e0508 refactor(i18n): remove duplicate German files
German content now handled via i18n.js translations module.
Removes index.de.html and app.de.js in favor of single
language-agnostic codebase.
2025-12-30 15:10:57 +01:00
d21233bb63 feat(i18n): integrate translations in app.js
- Import and initialize i18n module
- Add language toggle button handler
- Replace hardcoded strings with t() function calls
- Update dynamic text (progress, success messages, etc.)
2025-12-30 15:10:44 +01:00
f931d22af1 feat(i18n): add JS-based internationalization
- Create i18n.js module with EN/DE translations
- Add data-i18n attributes to index.html for dynamic text
- Update renderer.js to use translation functions
- Language switcher button replaces link to German page
- Stores preference in localStorage, detects browser language
2025-12-30 15:10:38 +01:00
ca7dd78d5d feat: close dialogs on backdrop click
Native dialog elements don't close on backdrop click by default.
Added click handlers that check if click target is the dialog itself
(not its children) to enable this expected UX behavior.
2025-12-30 14:54:49 +01:00
68f93d1b77 docs: expand help dialog with learning modes and editor tools
- Add About section mentioning open-source and no account required
- Add Learning Modes section (CSS, Tailwind, HTML)
- Add Editor Tools section (undo, redo, reset, show expected)
- Add dedicated Keyboard Shortcuts section
- Update Emmet examples to be more practical
2025-12-30 14:54:43 +01:00
51b6645c8f style: widen help dialog from 500px to 600px 2025-12-30 14:54:35 +01:00
f934d8f982 fix: remove redundant Lessons heading from sidebar
The HTML already has an h4 heading for the lessons section with proper
ARIA labeling. The renderer was adding a duplicate h3 heading.
2025-12-30 14:54:28 +01:00
0dff9fe916 refactor: remove placeholder HTML comments from lesson initialCode
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
Clean up lesson files by removing useless HTML comment placeholders
from initialCode fields. Users now start with a clean editor instead
of seeing instructional comments they need to delete.
2025-12-30 12:45:18 +01:00
4807af3cb1 fix(i18n): change button text 'Erneut' to 'Erneut anwenden' 2025-12-30 12:39:08 +01:00
51e726fe76 docs: clarify that progress element is not self-closing
Make explicit that <progress> requires a closing tag and can
contain fallback text, unlike self-closing tags like <input>.
2025-12-30 12:37:54 +01:00
514683550f feat: add Emmet pro tip to FAQ accordion lesson
Explain details*3>summary+p shorthand for quickly scaffolding
multiple disclosure widgets with nested summary and p elements.
2025-12-30 12:36:05 +01:00
0b14471781 docs: add lesson design best practices to CLAUDE.md
Document learnings for creating effective lessons:
- Clear task instructions with selector and property
- Use codePrefix for context
- Simple, human-friendly values
- Named CSS colors for engagement
- Focused validations
- Semantic HTML in examples
2025-12-30 12:25:33 +01:00
6bb8268c9d fix: escape HTML tags in lesson validation messages
Prevent HTML elements like <details>, <option>, <form> from being
rendered as actual elements in hint messages by properly escaping
them with &lt; &gt; and wrapping in <kbd> tags.
2025-12-30 12:25:22 +01:00
085795ae12 refactor: improve lesson clarity and use friendlier values
Flexbox and Box Model lessons:
- Use explicit task instructions with selector AND property
- Include selector in codePrefix for better context
- Replace hex colors with named CSS colors (steelblue, coral, etc.)
- Simplify values (2px instead of 0.125rem, 1rem instead of 1.25rem)
- Remove redundant contains validations
- Wrap code examples in <code> tags for proper styling
2025-12-30 12:25:15 +01:00
ac6b54ae35 style: add code element styling and accessibility enhancements
- Style code elements in task instructions with white alpha background
- Style code elements in lesson descriptions and hints
- Add skip-link CSS for keyboard navigation
- Add sidebar shift animation when drawer is open
- Add focus styles for sidebar navigation items
2025-12-30 12:25:02 +01:00
d06f7c9e6e feat: improve sidebar keyboard accessibility
- Add skip-to-content link for keyboard users
- Convert module headers and lesson items from divs to buttons
- Add ARIA attributes (aria-expanded, aria-controls, aria-label)
- Add focus return to trigger element when closing sidebar
- Shift main content when sidebar is open using CSS :has()
- Add code element styling in instruction boxes
2025-12-30 12:24:53 +01:00
573c6720d8 feat: add CSS lessons matching lecture content (box model, flexbox, responsive, transitions, variables)
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
- Add 5 CSS modules to lessons.js config (EN)
- Create German translations for all 5 CSS modules
- Add CSS modules to lessons.de.js config
- Fix test to use toBeGreaterThanOrEqual for module count

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:26:59 +01:00
79b6ece9ad fix: remove kbd tags from actual HTML code in lessons
- Remove erroneous kbd tags from solution/initialCode fields
- Keep kbd tags only in messages/descriptions where appropriate

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:59:59 +01:00
3b03d35c5f fix: add kbd tags to validation messages for clarity
- Wrap HTML element names in <kbd> tags in all validation messages
- Apply consistent formatting to both English and German lessons
- Make hints clearer about which elements/attributes to use
- Fix mobile editor layout overflow issue

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:55:26 +01:00
6f550a36ea fix: improve WCAG compliance and mobile editor height
- Add aria-describedby to password inputs for screen readers
- Connect hint text to input via id reference
- Increase mobile editor min-height to 50vh

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:28:11 +01:00
3c34cea37b fix: add minimum height for code editor on mobile
- Set min-height: 200px for editor-section
- Set min-height: 150px for editor-content
- Ensures editor is usable on small screens

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:27:03 +01:00
2f48917f3a feat: add module pill indicator and cross-module navigation
- Add module title pill above lesson title showing current category
- Enable next/prev buttons to cross module boundaries
- Automatically advance to next module when completing last lesson
- Go to last lesson of previous module when navigating back

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:25:39 +01:00
d799ced207 fix: remove placeholder comments and improve German translations
- Remove placeholder comments from initialCode fields
- Fix typo: "wichtig Wort" -> "wichtigen Wort" in de/20-html-elements.json
- Improve German validation messages for readability
- Use consistent terminology (Eingabefeld instead of Input)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:16:31 +01:00
71945cce37 feat: add 10 new HTML5 lesson modules (EN + DE)
New lesson modules covering native HTML5 features:
- Details & Summary: disclosure widgets
- Progress & Meter: progress bars and gauges
- Datalist: autocomplete inputs
- Data Attributes: custom data-* attributes
- Dialog: native modal dialogs
- Forms with Fieldset: grouped form controls
- Figure & Figcaption: self-contained content
- Tables: structured data with caption, thead, tbody, tfoot
- Marquee: classic scrolling text (deprecated but fun)
- SVG Basics: drawing circles, rectangles, and lines

Each module includes 2-3 progressive lessons with fancy
styling (pastel gradients, 100vh layouts, etc).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 14:23:37 +01:00
c4df288471 refactor: simplify HTML lessons to use semantic elements only
- Remove presentational classes (.form-group, .required, .hint, .checkbox-group)
- Replace <span class="required">*</span> with plain * in label text
- Replace <div class="hint"> with semantic <small> element
- Simplify checkbox markup to use native label wrapping pattern
- Update previewBaseCSS to style semantic elements directly
- Add code quality standards to CLAUDE.md emphasizing WCAG compliance and native HTML

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-12-24 01:55:47 +01:00
8236aad1bc feat: rename success message to "CRISPY!" with Japanese smiley
- Update overlay text: "Perfect Match!" → "CRISPY! ٩(◕‿◕)۶"
- Update success hint in English and German versions
- Fun branding touch matching the app name
2025-12-24 01:43:26 +01:00
3b00ce7a7f refactor: replace custom modal with native HTML dialog element
- Convert help and reset modals to native <dialog> elements
- Content is now in HTML, not dynamically generated via JS
- Use dialog.showModal() and dialog.close() native API
- Dialog handles Escape key natively for closing
- Fix list indentation in help dialog with proper padding
- Add styled kbd elements for keyboard shortcuts
- Separate dialogs for help and reset confirmation
- Apply same changes to German version

Benefits:
- Better accessibility (native focus trapping, escape handling)
- Simpler JavaScript (no DOM manipulation for content)
- Content visible in HTML source for easier editing
- Native backdrop styling via ::backdrop

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:57:24 +01:00
bcb7519389 feat: add language switcher between English and German
- Add language toggle button in header (EN/DE)
- Link directly to the other language version
- Style consistent with existing header buttons
- Accessible with proper aria-labels

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:51:54 +01:00
991965b78e feat: add complete German translation of the website
- Add German HTML entry point (index.de.html)
- Add German app.js with translated UI strings (app.de.js)
- Add German lesson config (lessons.de.js)
- Add German translations of all 6 lesson modules:
  - HTML Elements: Block vs Inline
  - HTML Forms: Basic Inputs
  - HTML Forms: Validation
  - CSS: Basic Selectors
  - CSS: Advanced Selectors
  - Tailwind: Basics

All IDs, variable names, and code examples remain in English.
Only user-facing text has been translated to German.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:32:07 +01:00
31664c4fe9 fix: remove unused validation percentage indicator
The 0% indicator next to the Run button was not providing useful
feedback. Removed from HTML, CSS, and app.js.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 00:17:28 +01:00
4cdffdfa21 feat: add undo/redo/reset editor tools with keyboard shortcuts
- Add history extension to CodeMirror for undo/redo support
- Ctrl+Z for undo, Ctrl+Shift+Z for redo now work
- Add toolbar buttons: ↶ Undo, ↷ Redo, ⟲ Reset
- Reset button restores editor to initial lesson code
- Add .btn-icon and .editor-tools CSS styles

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 23:14:32 +01:00
28dd033fca fix: align HTML lesson task instructions with solution code
Update task instructions to explicitly specify all content that appears
in the solution, so students can complete lessons without guessing:

- semantic-containers: specify "My Website", "Welcome to my site!", "Copyright 2025"
- form-structure: specify label text "Name:" and attribute values
- input-types: specify label texts "Email:" and "Password:"
- input-constraints: specify placeholder text "Enter password"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 09:39:07 +01:00
5088ffee7a fix: rename solutionCode to solution in HTML lesson files
Consistent property naming across all lesson files - the LessonEngine
expects 'solution' property for rendering expected preview.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 10:38:53 +01:00
e38d5bc901 fix: hide original textarea to prevent browser form restoration artifact
- Add display:none to initial textarea (CodeMirror replaces it)
- Add autocomplete=off to prevent browser from restoring old form values

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 10:06:55 +01:00