Commit Graph

373 Commits

Author SHA1 Message Date
7676aa77b7 Merge pull request 'fix: rewrite colors and box-model tasks to describe outcomes instead of answers' (#10) from 009-colors-boxmodel-tasks into main 2026-03-29 00:01:08 +01:00
c3f1824059 feat: implement #9 — rewrite colors and box-model task descriptions
Rewrite task text in Colors (4 lessons) and Box Model (8 lessons x 6
locales) to describe visual outcomes instead of giving copy-paste CSS
answers. Colors validations changed from property_value to regex
accepting multiple valid named colors per lesson.
2026-03-28 23:56:55 +01:00
6b285b4a2e docs: add spec, plan, and tasks for colors and box-model task wording fix (#9) 2026-03-28 23:51:13 +01:00
056cd35845 Merge pull request 'feat: add JavaScript learning section with starter lessons and sidebar section headers' (#8) from feat/impl-feature-20260328-200101-ecae into main 2026-03-28 21:32:38 +01:00
45a9766e8a Merge pull request 'fix: rewrite validation messages to guide learning instead of revealing answers' (#7) from 004-validation-messages into main 2026-03-28 21:32:31 +01:00
b9c90112a3 feat: add JavaScript learning section with starter lessons and sidebar section headers
Implementation following plan:
- S01: Foundation: schema, section config, and router
- S02: Install CodeMirror JavaScript language support
- S03: Create JavaScript lesson JSON files (variables, DOM, events)
- S04: Register JavaScript lessons in module stores
- S05: Add JavaScript validation logic
- S06: Add JavaScript mode to LessonEngine preview rendering
- S07: Add JavaScript mode to CodeEditor
- S08: Update app.js for JavaScript mode support
- S09: Update navigation HTML and CSS theming for JavaScript section
- S10: Add section grouping headers in sidebar navigation
- S11: Update and write tests
2026-03-28 20:22:50 +01:00
825a2cb23f fix: rewrite validation messages to guide learning instead of revealing answers (#4) 2026-03-28 20:10:04 +01:00
a54828815d Merge pull request 'fix: rewrite flexbox tasks to describe outcomes instead of answers' (#5) from 003-flexbox-task-wording into main 2026-03-28 19:59:24 +01:00
ad352aa986 fix: rewrite flexbox task descriptions to describe outcomes instead of answers (#3)
Replace copy-pasteable CSS declarations in all 6 flexbox lesson tasks with
outcome-oriented descriptions. Update validation error messages to hint at
properties without revealing exact declarations. Add regex validation for
flexbox-6 to accept both flex: 1 and flex-grow: 1.
2026-03-28 19:25:32 +01:00
9b22ac0db5 docs: add spec, plan, and tasks for flexbox task wording fix (#3) 2026-03-28 19:17:48 +01:00
b3c51537d5 fix(security): add Content-Security-Policy meta tag
Restricts script sources to self and known CDNs, connect sources to
self and Supabase, blocks unauthorized resource loading. Allows
unsafe-inline for styles (CodeMirror requirement) and blob: for
sandboxed preview iframes.

Addresses SEC-5 (HIGH) from security audit.
2026-03-28 17:01:32 +01:00
743060f71b fix(security): sandbox preview iframes to prevent XSS
Add sandbox='allow-scripts' to all preview iframes. This isolates
user-executed code from the parent page's localStorage (auth tokens),
cookies, and DOM. Switch from document.write() to srcdoc attribute
since sandboxed iframes can't use document.write().

Addresses SEC-1 (critical) from security audit.
2026-03-28 16:38:56 +01:00
253e61d75d fix: replace github personas with gitea, add ontology telos 2026-03-28 16:19:15 +01:00
1da897acf8 test: add 182 new tests for router, sections, renderer, and validator
Generated by wave test-gen pipeline. Coverage:
- router.js: 0% → ~85% (33 tests, all 7 exports)
- sections.js: 0% → ~90% (29 tests, all 5 exports)
- renderer.js: partial → extended (36 tests, difficulty, feedback, sidebar)
- validator.js: partial → extended (84 tests, all types + edge cases)

Total: 43 → 225 tests
2026-03-28 16:14:52 +01:00
62cffa61f7 chore: update wave.yaml to latest wave version with corrected project config 2026-03-28 15:58:46 +01:00
cd3c88c004 ignore auto claude files 2026-01-27 16:53:47 +01:00
a62ffe36be chore(nix): add flake with claude-code in devShell 2026-01-25 21:28:16 +01:00
c3655da9ff chore: temporarily disable Tailwind CSS section
- Comment out Tailwind nav links in header and sidebar
- Comment out Tailwind card on landing page
- Remove tailwind from router SECTIONS array
- Remove tailwind from landing page progress tracking

Tailwind content and styles remain in codebase for easy re-enabling.
2026-01-25 15:40:53 +01:00
9068287694 feat: add Markdown learning module with 8 beginner lessons
- Add markdown-basics module with lessons for headings, text formatting,
  lists, links, and inline code
- Integrate markdown section with blue color theme (#5b8dd9)
- Add markdown mode support in CodeEditor and LessonEngine
- Add markdown preview rendering using marked library
- Add section overview page with educational content
- Add markdown reference page with syntax guide
- Add i18n translations for 6 languages (EN, DE, PL, ES, AR, UK)
- Update router to recognize #markdown as section route
- Add all section-specific CSS styles for markdown theme
2026-01-25 11:27:07 +01:00
8ed6a908a8 feat(app): pass codePrefix/codeSuffix to editor on lesson load
- Update loadCurrentLesson() to pass prefix/suffix to editor
- Use getEditableValue() in runCode() to get only user code
2026-01-25 02:00:07 +01:00
3a1c0a36f9 style: add styling for read-only editor zones
Dimmed appearance with subtle background for codePrefix/codeSuffix regions.
2026-01-25 01:59:59 +01:00
c1b627674d feat(editor): add read-only zones support for codePrefix/codeSuffix
- Add initWithContext() method for prefix/suffix initialization
- Implement changeFilter to prevent edits in read-only zones
- Add transactionFilter to constrain cursor to editable area
- Add visual decorations with cm-readonly-zone class
- Update getValue/setValue to handle editable portions correctly
2026-01-25 00:39:09 +01:00
c8a1172eba fix: restore gradient scaling and distribute milestone colors evenly 2026-01-16 23:45:19 +01:00
a471de9566 fix: milestone colors now correctly reflect position in 0-100 gradient 2026-01-16 23:40:38 +01:00
f5151706c1 fix: progress bar now shows milestone progress instead of overall progress 2026-01-16 23:21:41 +01:00
044b14c1b4 fix: shorten German reset progress label to 'Fortschritt' 2026-01-16 22:01:15 +01:00
2f85df98cb feat: add lesson difficulty indicators and improve mobile sidebar
- Add computeLessonDifficulty function to determine lesson difficulty
  based on selector complexity (easy/medium/hard)
- Display difficulty badge with bar indicator in lesson title row
- Add mobile navigation links (CSS, HTML, Tailwind) to sidebar
- Add mobile auth trigger button in sidebar
- Redesign settings section with card layout and native toggles
- Add difficulty translations for all 6 languages
- Fix module pill overflow on narrow screens
2026-01-16 21:47:47 +01:00
cd43482048 fix: update German CTA to 'Jetzt gleich anfangen' 2026-01-16 16:53:38 +01:00
2abc995a70 fix: update German landing hero text to 'Lerne Web Entwicklung mit CODE CRISPIES' 2026-01-16 16:41:17 +01:00
ca95f8eb7d feat: redesign sidebar progress to show milestone progress and total lessons 2026-01-16 16:37:23 +01:00
10e067c06b fix: show Next button disabled in playground instead of hiding it 2026-01-16 15:32:21 +01:00
ca526052f5 fix: remove centered class toggle - grid layout handles positioning 2026-01-16 15:31:17 +01:00
cafeba2c6b fix: add gap between game controls grid items 2026-01-16 15:29:44 +01:00
3990b69f42 fix: use CSS grid for game controls to keep pill centered when next is hidden 2026-01-16 15:28:45 +01:00
ee21a2bd09 fix: change 'Crispy Code' to 'Code Crispy' in landing page title 2026-01-16 15:27:14 +01:00
a89a078da4 fix: move device notice under section cards on landing page 2026-01-16 15:26:10 +01:00
b5b7188bf9 fix: make copyright year dynamic in footer 2026-01-16 15:25:04 +01:00
Michael Czechowski
989d8af519 Merge pull request #2 from nextlevelshit/feature/new-lessons
Feature/new lessons
2026-01-16 15:20:31 +01:00
c3c793414e feat: add more Umami tracking events
New events:
- run_code (with module, lesson, playground flag)
- logo_click
- privacy_open
- imprint_open
- setting_change (with setting name and value)
2026-01-16 15:18:23 +01:00
1f439307e5 feat: add Umami analytics tracking for auth events
Track the following events:
- auth_login (with method: email, github, google)
- auth_signup (with method: email)
- auth_logout
- auth_delete_account
2026-01-16 15:15:50 +01:00
00b018ec3a feat: keep preview glow permanently after animation completes 2026-01-16 15:14:43 +01:00
dc0c9c4fa6 fix: keep preview glow visible after animation ends 2026-01-16 15:11:39 +01:00
5d71c1f91a feat: improve progress display with gradient milestones
- Progress text now says "X of Y lessons completed" in all languages
- Each milestone badge shows a portion of the gradient based on position
- Progress bar shows full gradient, cropped to current progress percentage

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:08:57 +01:00
3e92464396 fix: remove border-left from nav-link-ref, use margin instead 2026-01-16 15:05:46 +01:00
3b1e4dc7c7 feat: add section color coding to overview first paragraphs
The strong and code elements in .section-overview now use
section-specific colors (purple/pink/teal) instead of default purple.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:05:12 +01:00
d26e1447ad fix: clean up OAuth debug logging
Remove temporary console.log statements used during OAuth debugging.
2026-01-16 15:04:24 +01:00
41fb8208d2 fix: simplify playground navigation - just hide Next button
Previous button stays "Previous" and works the same everywhere.
Only difference in playground: Next button is hidden.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:01:44 +01:00
578be3de2e fix: playground back button goes to previous lesson
The Back button in playground now works the same as Previous button
on other pages - it navigates to the previous lesson.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:00:13 +01:00
33b4b64f13 fix: use same button position/style for playground back button
Instead of a separate back button, the Previous button is repurposed
as "Back" in playground mode - same position (left), same style.
Only the Next button is hidden in playground mode.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:58:25 +01:00
f1fa285c56 feat: add back button to playground and fix dice icon color
- Add back button to game-controls (shown only in playground mode)
- Replace dice img with inline SVG using currentColor for consistent styling
- Add SVG sizing rule to .btn-icon
- Add "back" translation to all 6 languages

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:55:11 +01:00