Run multiple delayed hierarchy retries on first tab navigation to prevent empty-state flicker and avoid requiring manual page refresh.
Made-with: Cursor
Match lesson review and success screens to the practice-style UI and add a single retry for initial hierarchy fetches so content management data appears immediately after login.
Made-with: Cursor
Auto-process intro video URLs on blur with preview support, improve local upload reliability, and refine Step 1 + Review styling for the lesson creation wizard.
Made-with: Cursor
Restore a stable practice-style step indicator in Add New Lesson so active and completed steps are clearly visible and connectors render correctly.
Made-with: Cursor
Restyle the lesson creation flow to match the polished practice experience with cleaner step visuals and section layouts, and reduce high-contrast accents in the lessons panel for a calmer UI.
Made-with: Cursor
Enable selecting and deleting multiple lessons at once in the human language panel, and persist page scroll so users return to their previous position after reload.
Made-with: Cursor
Introduce lesson edit and delete actions in the human language list using question set updates/deletes, and refine lesson card/status styling for lower visual contrast with richer detail presentation.
Made-with: Cursor
Load sub-module QUIZ question sets into lesson rows so newly created lessons appear immediately, and upgrade lesson cards/detail panel styling to show status, question counts, and intro video previews.
Made-with: Cursor
Replace technical API wording in the lesson intro video action with user-friendly text while keeping the same /files/upload behavior.
Made-with: Cursor
Remove practice-specific fields from the lesson page and keep the flow focused on question_sets + sub_module_lessons while preserving intro video upload/import and preview behavior.
Made-with: Cursor
Update the lesson wizard intro video section to support both file upload and general URL import via /files/upload, with Vimeo-safe normalization and inline video preview.
Made-with: Cursor
Introduce a practice-style Add New Lesson page routed from human language sub-modules, wire it to sub_module_lessons-compatible save logic, and remove the temporary lesson modal path.
Made-with: Cursor
Add a Create Lesson dialog in the human language panel so lesson creation mirrors the practice UX while targeting sub_module_lessons data requirements.
Made-with: Cursor
Create lessons via question-set + sub-module-lesson attachment instead of video-only handling, and update new-level creation to reuse existing CEFR levels when present.
Made-with: Cursor
Improve role card visual hierarchy and add clearer metadata (role type, id, created date, description preview) so the list feels less sparse and more informative.
Made-with: Cursor
Add deletion controls for course categories and avoid full-page loading overlay during module/sub-module creation so button-level spinners remain the only loading indicator.
Made-with: Cursor
Show a New lesson button in the lessons tab alongside the practice action so lesson creation is directly accessible from each sub-module panel.
Made-with: Cursor
Use module delete operations for level/module removal so removed levels disappear correctly, and suppress success toasts for module/sub-module creation to keep the flow cleaner and faster.
Made-with: Cursor
Create additional modules/sub-modules directly under existing level and module IDs instead of re-running the lesson bootstrap flow, which prevented adding a second module.
Made-with: Cursor
Wire delete actions and confirmation dialogs for selected sub-categories and courses, backed by the new sub-category delete API route.
Made-with: Cursor
Create a real sub-category under Human Language and pass sub_category_id when creating the course so the new path renders immediately in the hierarchy panel.
Made-with: Cursor
Render intro video preview in Step 4 Review & publish so users can verify Vimeo/file playback before publishing instead of seeing only the URL text.
Made-with: Cursor
Normalize Vimeo page URLs to embed URLs for intro video fields instead of forcing /files/upload URL import that can fail behind verification gates.
Made-with: Cursor
Expand edit-practice modal to include full question-set metadata fields, raise recorder modal overlay, and add module/sub-module collapse toggles to match path and level expand/collapse behavior.
Made-with: Cursor
Improve Step 4 Basic Information description rendering with formatted-text preview, and resolve media object keys so practice audio prompts are playable in Human Language question cards while showing sample answer text.
Made-with: Cursor
Import intro video URLs through /files/upload, keep Vimeo-friendly URL handling, and render inline video preview for uploaded/imported links in Step 1 context.
Made-with: Cursor
Use the dedicated add-practice route from Human Language so question-set creation uses the richer speaking-style multi-step UI instead of the inline create modal.
Made-with: Cursor
Improve visual hierarchy across header, filters, and nested content cards to make the Human Language management view cleaner and easier to scan.
Made-with: Cursor
- Add PracticeQuestionEditorFields for Step-3-style MCQ/T-F/short/audio UI
- Wire Human Language question dialog to shared editor and fix dialog padding
- Refactor AddNewPracticePage step 3 to reuse the same component
Made-with: Cursor
Defer opening the dialog until details load; improve API mapping for true/false and types; add audio answer field; show edit loading on the row action.
Made-with: Cursor
Support creating, editing, and deleting practices and questions inline; add client-side validation with disabled save and inline field feedback.
Made-with: Cursor
Improve question-bank presentation with clearer hierarchy, richer badges/callouts, and labeled media previews for lesson/practice content.
Made-with: Cursor
Dedicated routes under /content/human-language/.../sub-module/:id for lesson videos and practice cards (aligned with existing sub-course styling); confirm removals via Dialog on hierarchy page; wire add-practice and questions back navigation for HL paths.
Made-with: Cursor
Move Add next CEFR level and detailed management into each course path header; add expand/collapse for path bodies; drop global resolved-course controls.
Made-with: Cursor
Render each course path (e.g. English - Speaking) as the top card with CEFR levels, modules, and sub-modules nested inside; use per-path collapse keys for level rows.
Made-with: Cursor
Resolve course id when filters imply a single course so Add next CEFR level works without forcing Course selection; show incremental CEFR sections; tighten remove actions; use optional chaining on module lists.
Made-with: Cursor
Avoid nested button markup so remove-level controls render reliably, keep level rows visible for all CEFR levels, and add clearer guidance/labeling for incremental level creation starting from A1.
Made-with: Cursor
Add AUDIO question support to the shared practice creation page and preserve human-language navigation context so back/cancel returns to the Human Language page.
Made-with: Cursor
Adopt a structured empty-state layout similar to sub-category management screens, auto-create the Human Language category when missing, hide level listing until a path exists, and surface first-path creation clearly.
Made-with: Cursor
Allow creating the initial subcategory/course path directly from the Human Language page empty state so module and sub-module creation can start immediately.
Made-with: Cursor
Keep course rows visible even when module count is zero so Add Module is accessible immediately, and show a clear empty-state hint before first module creation.
Made-with: Cursor
Provide incremental Module-N and Module-N.M creation buttons, plus direct sub-module actions to manage lesson media and practice/audio question creation.
Made-with: Cursor
Integrate the admin Human Language page with the new hierarchy API and present subcategory/course/level/module/sub-module tree including videos and practices.
Made-with: Cursor
Hide Speaking from content tabs and update Human Language filters to subcategory and course-focused selection for the single descriptive language category flow.
Made-with: Cursor
Drop the practice-level edit action and modal from the Speaking page while preserving collapsible groups, searchable practice filtering, and question bulk actions.
Made-with: Cursor
Improve Speaking tab UX with collapsible practice sections, searchable practice filter picker, whole-practice selection controls, and a practice metadata editor wired to the backend practice update API.
Made-with: Cursor
Group audio questions under practices on the Speaking tab, add client-side search and image previews, and support multi-select bulk deletion of audio questions.
Made-with: Cursor
Filter speaking practice options using returned AUDIO question rows instead of total_count so unrelated practices are excluded reliably.
Made-with: Cursor
Limit the Speaking page practice filter options to sets that contain AUDIO questions and clear stale selected filter values when unavailable.
Made-with: Cursor
Show a live intro video preview from the entered URL, using Vimeo embed playback when applicable and HTML5 video fallback for direct links.
Made-with: Cursor
Ensure the speaking question set is created when moving from setup to questions, rename Set status to Status, and default new set status to PUBLISHED.
Made-with: Cursor
Re-fetch practice options after creating a speaking practice and auto-select the new set so freshly created practices appear immediately in the filter and question list.
Made-with: Cursor
- Flows: Parent category sequence (reorder all parents), sub category sequence per parent, sub category structure (courses/questions/feedback)
- Fix Flow page white screen (useEffect deps: selectedSubCategoryId/selectedParentCategoryId)
- Loading state: visible refresh icon (white card, brand-600) on AllCourses, Courses, CourseFlowBuilder, SubCourses
- Add team member page, team API and types, route /team/add
Made-with: Cursor