Skip to content

feat(#127): drive video player from real course data - #1

Closed
dair7 wants to merge 20 commits into
devfrom
feature/127-video-player-upgrade
Closed

feat(#127): drive video player from real course data#1
dair7 wants to merge 20 commits into
devfrom
feature/127-video-player-upgrade

Conversation

@dair7

@dair7 dair7 commented Jul 26, 2026

Copy link
Copy Markdown
Owner
  • Replace hardcoded files.vidstack.io demo subtitles/thumbnails with real course captions, sourced only from data.subtitles/data.chapters
  • Add chapter markers (VTT or array) with graceful degrade when absent
  • Persist playback rate/volume/muted to localStorage across courses
  • Add clear error state for missing/broken video instead of blank player
  • Add discoverable keyboard-shortcuts help and a focusable, labelled player
  • Lazy-load the player component to keep Vidstack off the initial bundle

Progress/resume tracking intentionally left to Deen-Bridge#108.

Closes Deen-Bridge#127

TheBigWealth89 and others added 20 commits July 23, 2026 08:09
- course-create-form.jsx: fixed duplicated htmlFor=title on all four
  labels (description/category/price labels pointed at the title
  input instead of their own field); added matching id to
  Input/Textarea; fixed Label id=thumbail/id=file typos to
  htmlFor=thumbnail/file so the upload section labels actually
  associate.
- ComboBox.jsx (CategoryCombobox): added an id prop forwarded to the
  trigger button so the course-category label can associate with it.
- Searchbox.jsx: added a visually-hidden (sr-only) label wired via
  useId, giving the search input an accessible name beyond just a
  placeholder.
- TransactionHistory.jsx: added an aria-label to the icon-only
  explorer link and aria-hidden to its icon.
- ReelActionButton.jsx: added aria-label to the button and
  aria-hidden to the icon span, so icon-only reel actions have an
  accessible name.

StarRate.jsx already had a proper aria-label/role=img for read-only
ratings, so left untouched.

Scope note: this covers the concrete labeling/accessible-name items
from Deen-Bridge#134 pointers. Contrast audit, skip-to-content link, shell
landmarks, and wiring an automated a11y check are separate, larger
pieces of this issue not yet addressed here.

npm run lint and npm run build both pass.
…progress bars

- Add useCourseProgress hook with localStorage write-behind and throttled API writes
- Add useAllCourseProgress for batched progress on course listing pages
- Extend VidPlayerBox with startTime, onTimeUpdate, and onEnded props
- Add resume/start-over UX on course detail page with progress indicator
- Add progress bars and completion badges to CourseCard for owned courses
- Graceful degradation: works via localStorage when backend endpoints unavailable
- Completion marked at >=90% watched or on player ended event

Closes Deen-Bridge#108
…e-progress-tracking

feat(course-progress): add resume playback, completion tracking, and progress bars
… (CodeRabbit)

label holds the visible count (e.g. 42), not an action name, so
aria-label={label} announced a bare number with no context for
like/love/comments/share buttons - or nothing at all where label
was numeric 0. Added a separate accessibleLabel prop used for
aria-label, and set it to Like/Love/Comments/Share at all 8
ReelActionButton call sites (desktop + mobile layouts) in
ReelCard.jsx. label remains the visible count only.
…allet-onboarding

Revert 137 feat/wallet onboarding
…deRabbit)

- accessibleLabel now folds in the visible count (e.g. "Like, 42")
  instead of just the action name, so screen readers announce both.
- Added a pressed prop to ReelActionButton that renders aria-pressed,
  wired to pressed={viewerLiked}/{viewerLoved} on the like/love
  instances only, so assistive tech can tell whether a reaction is
  currently active. Not applied to comments/share since those are not
  toggle buttons.
- Add /educators/[profileid] public route accessible without authentication
- Add EducatorProfileHeader with avatar, bio, role, stats, follower count
- Add PublicCourseCard, PublicBookCard, PublicSpaceCard (no auth dependencies)
- Add tabbed navigation for courses, books, and spaces
- Add share button with Web Share API and clipboard fallback
- Add auth-aware follow: logged-out users redirect to /login?next=...
- Add privacy guard: shows not-found for missing/private profiles
- Rewire instructor links on courseCard, libraryCard, spaceCard to /educators/[id]
- Add 'View public page' link on authenticated profile page
- Add generateMetadata for SEO (title, description, OpenGraph)

Closes Deen-Bridge#116
…s-media-134

fix: a11y label associations and accessible names (Deen-Bridge#134)
…c-educator-storefront

feat(educators): add public educator storefront pages
- Replace hardcoded files.vidstack.io demo subtitles/thumbnails with
  real course captions, sourced only from data.subtitles/data.chapters
- Add chapter markers (VTT or array) with graceful degrade when absent
- Persist playback rate/volume/muted to localStorage across courses
- Add clear error state for missing/broken video instead of blank player
- Add discoverable keyboard-shortcuts help and a focusable, labelled player
- Lazy-load the player component to keep Vidstack off the initial bundle

Progress/resume tracking intentionally left to Deen-Bridge#108.
@dair7
dair7 force-pushed the feature/127-video-player-upgrade branch from 20313eb to 304d8e8 Compare July 26, 2026 03:06
@dair7 dair7 closed this Jul 26, 2026
@dair7

dair7 commented Jul 26, 2026

Copy link
Copy Markdown
Owner Author

Superseded by Deen-Bridge#151

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants