- CourseCard: raise image from h-40 to h-52 (less cropping)
- CourseCard: use -webkit-line-clamp inline style to hard-clip title overflow
- CourseCard: reduce footer bottom padding (pb-1)
- StreamEmbed: pass both current hostname and localhost as Twitch parent
params to fix error 2000 in local/dev environments
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
LeaderBoard:
- Fix bug: allUsers now loaded before logsResource on mount
- Fallback: show users with 0 points when Energy Point Log is empty
- Replace FontAwesome with lucide-vue-next (Crown, Medal, Trophy, User)
- Replace all hardcoded hex colors with Frappe UI CSS variables
StudentProfile:
- Remove ~40 debug console.log statements
- Increase avatar to 96px, use amber CSS token gradient
- All scoped CSS colors converted to rgb(var(--color-*)) tokens
Olympiads admin:
- Add OlympiadForm.vue for create/edit with all fields
- Add routes /olympiads/new and /olympiads/:name/edit
- Add "Create Olympiad" button for moderators/instructors
- Add sidebar entry for admin users
Russian translations:
- Add Olympiad module strings to lms/locale/ru.po
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove greeting for admin view, render stream fullscreen (no scroll)
- AdminHome: stream fills full viewport height via flex layout
- StreamEmbed: fills parent height instead of fixed aspect-ratio
- Set Twitch channel to lofigirl
- CourseCard: clamp title to 2 lines with fixed min-height
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add StreamEmbed component supporting Twitch and YouTube embeds
with live badge, platform icon, aspect-ratio 16:9, external link
- Replace AudioPlayer on AdminHome with StreamEmbed (configure
channel name in streamConfig ref)
- Move course progress % to bottom-right footer corner alongside
price/cert badge; remove separate progress row above footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add AudioPlayer component with playlist, seek, volume, animated EQ
- Replace "Courses Created" section on AdminHome with AudioPlayer
- Fix CourseCard stats row: use flex-1 spacer so stats + footer are
always anchored to the bottom regardless of description length
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
External web pages (chatgpt-schoolchild, ai-teachers, my-child)
removed from addEnlightCustomItems() — they should be managed
via the new "More +" sidebar page manager in v2.46.0.
Only Vue-router pages remain hardcoded:
- LeaderBoard (/leaderboard)
- MyPoints (/mypoints)
- Role-based profiles (StudentProfile, SchoolchildrenProfile,
CourseCreatorProfile, ParentProfile)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two bugs fixed:
1. updateSidebarLinks() was called AFTER custom add functions,
resetting sidebarLinks.value and erasing all custom items
2. Custom items were pushed as flat objects but the template
expects grouped structure { label, hideLabel, items: [] }
Refactored all custom functions into a single addEnlightCustomItems()
that builds a proper group and pushes it AFTER updateSidebarLinks().
Items: LeaderBoard, MyPoints, ChatGPT (role-based), MyChild, Profile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>