Add admin payments with status, provider, and plan category filters. Introduce app versions and subscription plan management in settings, change-password security flow, and dark theme support. Reorganize sidebar, improve activity log actor details, analytics, and related UI polish.
Co-authored-by: Cursor <cursoragent@cursor.com>
Surface education, occupation, learning goals, and language challenges on the analytics page with normalized dashboard API parsing. Add email template management, accept-invite onboarding, and role-based team invitations.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove description fields from course, unit, and module create/edit dialogs. Add unit sort order on create, lesson publish status and sort order, video duration on lesson cards, and personas API integration for Learn English practice flows.
Move Manage Question Types to the new content hub, add Reorder Content page with hierarchy drag-and-drop, shared practice review UI, module practice cards, and publish-practice controls on course listings.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Add LessonPracticesPage with GET /lessons/:id/practices and polished UI
- Route and module lesson navigation; view practices icon on VideoCard hover
- Question type definitions API, DynamicSchemaSlotField, definition helpers
- AddPracticeFlow and practice steps; AddQuestionPage and PracticeQuestionEditorFields
Co-authored-by: Cursor <cursoragent@cursor.com>
- VideoCard: optional onAddPractice for lesson-scoped CTA
- ModuleDetailPage: navigate to add-practice with lessonId and lessonTitle
- AddPracticeFlow: show context banner when opened from a lesson
Co-authored-by: Cursor <cursoragent@cursor.com>
- Add practiceDynamicQuestionPayload helper to build stimulus/response slots
- Extend PracticeQuestionEditorFields with DYNAMIC type, definition picker, and per-slot values (JSON-capable)
- Wire AddNewPracticePage and AddNewLessonPage createQuestion to send question_type_definition_id and dynamic_payload
- Use lesson/practice save status (DRAFT/PUBLISHED) for created questions instead of always PUBLISHED
Co-authored-by: Cursor <cursoragent@cursor.com>
Handle environments where sub-module lesson detail is missing by falling back to question-set detail, and keep lesson form/status typing safe.
Made-with: Cursor
For lessons, fetch related questions by lesson question_set_id and render a styled question bank panel (same UX as practice), including add/edit/delete with proper refresh.
Made-with: Cursor
Fetch selected lesson details from the sub-module lesson endpoint so the inline detail panel shows the latest question count and lesson metadata.
Made-with: Cursor
Load human language lesson edit data from the dedicated sub-module lesson detail API so lesson metadata stays aligned with the backend response shape.
Made-with: Cursor
Retry scroll restoration until the page is tall enough so refreshes restore to the saved position smoothly, while keeping reduced-motion fallback.
Made-with: Cursor
Replace ad-hoc Loader2 loading indicators with SpinnerIcon so loading states across content and notifications pages use the same Circular-indeterminate progress indicator.
Made-with: Cursor
Route published lesson success back to the Human Language page so prior scroll position is restored, and explicitly guard practice question rendering by fetch status.
Made-with: Cursor
Filter course options by exact selected category_id in flows to prevent first-load course mismatch that changed module counts after refresh.
Made-with: Cursor
Keep retrying hierarchy fetch for a short period when the tab is active and still empty, so data appears automatically without manual refresh.
Made-with: Cursor
Trigger hierarchy fetch whenever the Human Language route is selected so data appears immediately when switching tabs from Content Management.
Made-with: Cursor