feat: add collections management and study coach features
Test / backend (push) Failing after 13s
Test / frontend (push) Successful in 25s

- Implemented collection repository with CRUD operations for user collections.
- Created routes for managing collections, including listing, creating, updating, and deleting collections.
- Added sharing functionality for exams, allowing users to share and clone exams.
- Developed a study coach service that analyzes exam results and provides study tips based on weak areas.
- Introduced frontend components for managing collections, sharing exams, and displaying study coach insights.
- Enhanced user experience with loading states and error handling in shared components.
This commit is contained in:
LaurensBartelds committed 2026-05-02 16:55:08 +02:00
1 parent 7755e77039
commit 1ec1633dd9
26 files changed
+2557 -127

No files matched your search

+58 -1
View File
@@ -154,6 +154,7 @@
},
"workspace": {
"myWorkspace": "My Workspace",
"overview": "Overview",
"myExams": "My Exams",
"results": "Results",
"settings": "Settings",
@@ -162,6 +163,30 @@
"noSavedExamsDesc": "Upload an exam from the home page, or create a new one to get started.",
"createFirstExam": "Create Your First Exam",
"takeExam": "Take exam",
"totalAttempts": "Total Attempts",
"avgScore": "Avg. Score",
"questionsAnswered": "Questions Answered",
"uploadExam": "Upload Exam",
"uploadDropzone": "Drop JSON or click to browse",
"studyCoachTitle": "Study Coach",
"streakDay": "day streak",
"streakDays": "day streak",
"studyTips": "Study Tips",
"retakeWeakest": "Retake Weakest Exam",
"performanceTrends": "Performance Trends",
"sharedWithMe": "Shared with Me",
"noSharedExams": "No shared exams yet",
"noSharedExamsDesc": "Exams shared by others will appear here when you save them to your workspace.",
"shareMode": "Share mode",
"shareModeClone": "Cloneable",
"shareModeView": "View only",
"importFromUrl": "Import from URL",
"importUrlPlaceholder": "Paste a raw JSON URL…",
"import": "Import",
"importing": "Importing…",
"viewAllResults": "View all results",
"recentResults": "Recent Results",
"viewAll": "View all",
"noAttempts": "No attempts yet",
"noAttemptsDesc": "Take an exam to see your results here.",
"attempts": "attempt",
@@ -211,7 +236,27 @@
"deleteExamConfirm": "Delete this exam? This cannot be undone.",
"deleteResultConfirm": "Delete this result? This cannot be undone.",
"storageWarningHigh": "You are using over 80% of your storage.",
"storageWarningCritical": "You are using over 95% of your storage. Delete some items to free up space."
"storageWarningCritical": "You are using over 95% of your storage. Delete some items to free up space.",
"searchExams": "Search exams…",
"noSearchResults": "No exams match your search",
"noSearchResultsDesc": "Try a different keyword or clear the search.",
"pin": "Pin to top",
"unpin": "Unpin",
"duplicate": "Duplicate",
"export": "Export JSON",
"collections": "Collections",
"newCollection": "New Collection",
"allExams": "All Exams",
"uncategorized": "Uncategorized",
"moveTo": "Move to",
"removeFromCollection": "Remove from collection",
"collectionNamePlaceholder": "Collection name…",
"create": "Create",
"rename": "Rename",
"deleteCollectionConfirm": "Delete this collection? Exams will be moved to uncategorized.",
"batchSelectAll": "Select all",
"batchSelected": "{{count}} selected",
"batchDeleteConfirm": "Delete selected exams? This cannot be undone."
},
"admin": {
"aiGrading": {
@@ -346,6 +391,9 @@
"correctOrder": "Correct Order",
"correctOrderHint": "The correct order is the order shown above. Reorder items to set the correct sequence.",
"setCurrentOrder": "Set Current Order as Correct",
"tagsLabel": "Tags",
"tagsPlaceholder": "Add tag…",
"addTag": "Add",
"examTitleRequired": "Exam title is required",
"atLeastOneQuestion": "Add at least one question",
"sourceLanguage": "Source Language",
@@ -398,6 +446,15 @@
"backToHome": "Back to Home",
"noToken": "No verification token found."
},
"share": {
"share": "Share",
"shared": "Shared",
"generateLink": "Generate share link",
"copyLink": "Copy link",
"revokeLink": "Revoke link",
"takeExam": "Take this exam",
"saveToWorkspace": "Save to my workspace"
},
"resetPassword": {
"resetPassword": "Reset Password",
"enterEmail": "Enter your email address and we'll send you a link to reset your password.",