Add full practice edit via GET/PUT .../full endpoints with question reorder and collapsible cards. Integrate bulk and scheduled SMS, email, push, and in-app notifications with a scheduled jobs page and improved recipient picker search.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire GET /notifications/:id for topbar and notifications page detail views, harden notification WebSocket lifecycle, paginate question type and app version lists from API, and expand dynamic question type schema labels and slot editing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Learn English practice and question-type builder integrations with dynamic schema slots and HTML table editor. Remove API path labels from admin pages and standardize table page-size options to 5, 10, 30, 50, and 100.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>
- 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>
- 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>
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
- 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