Skip to content

feat: add persistent course bookmarks and student wishlist #19

Description

@Jidnyasa-P

Description

Students can browse and search courses, but they currently have no way to save interesting courses for later without enrolling.

Add a persistent wishlist that allows authenticated students to bookmark courses and manage them from a dedicated dashboard section.

Proposed Features

  • Add a bookmark button to:

    • Course cards
    • Course detail pages
  • Add a dedicated Saved Courses page.

  • Store bookmarks per authenticated user.

  • Prevent duplicate bookmarks.

  • Allow bookmarks to be removed.

  • Show whether a course is already saved.

  • Add filters by:

    • Category
    • Free or paid
    • Course availability
  • Add sorting by:

    • Recently saved
    • Course title
    • Price
  • Display a saved-course count in navigation.

  • Remove or clearly mark deleted courses.

  • Add optimistic UI updates with rollback on failure.

  • Include loading, empty, and error states.

Backend Requirements

Create bookmark endpoints to:

  • Save a course
  • Remove a saved course
  • Retrieve the current user’s saved courses
  • Check whether one or more courses are saved

Store bookmarks using either:

  • A dedicated bookmark model, or
  • A user wishlist field containing course references

Enforce uniqueness using user ID and course ID.

Frontend Requirements

Create reusable components or hooks such as:

  • BookmarkButton
  • SavedCourses
  • useBookmarks

The bookmark state should stay consistent across catalog cards, course details, and the saved-courses page.

Acceptance Criteria

  • Authenticated students can bookmark courses.
  • Duplicate bookmarks are prevented.
  • Students see only their own saved courses.
  • Bookmark state remains correct after page refresh.
  • Bookmark state stays synchronized across pages.
  • Students can remove saved courses.
  • Saved courses can be filtered and sorted.
  • Deleted courses are handled safely.
  • Loading, empty, and error states are implemented.
  • The interface is keyboard accessible.
  • Existing enrollment functionality is unaffected.

Kindly assign this issue to me under ECSOC26

Metadata

Metadata

Assignees

Labels

ECSoC26Required label for a PR to be eligible for Sentinel scoringenhancementNew feature or improvement request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions