Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"type": "card",
"attributes": {
"name": "Homework Grader",
"summary": "The HomeworkGrader component is a comprehensive card interface designed for assessing and providing feedback on student homework assignments. It visually summarizes the overall grade, question-by-question scores, and detailed feedback, offering an interactive experience for instructors to review answers, assign grades, and monitor grading progress. The component supports multiple display formats for different device sizes, facilitates real-time grading updates, and integrates with AI-based grading skills. Its primary purpose is to streamline the grading process by presenting scores, feedback, and grading controls in an organized, adaptable layout.",
"summary": "Grading a stack of homework means reading every answer twice — once to score it, once to write feedback the student can actually learn from. Homework Grader does both in one pass: an assignment card holds your questions and each student's answers, and with a grading skill linked, one click returns an A–F grade, a score for every question, and a short written comment under each answer. Change the questions and stale grades clear themselves, so the score always matches what's on the page.\n\nOpen the demo to see it shine: History Homework shows a finished report — a 96/100 hero with a per-question score breakdown — and the Questions tab puts each answer's feedback right where the student wrote. Press Re-grade Assignment to watch the AI grade the arithmetic set live, or start from the blank assignment and type new questions and answers directly on the card.",
"cardInfo": {
"name": null,
"notes": null,
Expand All @@ -18,6 +18,26 @@
}
},
"relationships": {
"images.0": {
"links": {
"self": "../Screenshots/01-hero-graded.png"
}
},
"images.1": {
"links": {
"self": "../Screenshots/02-empty-assignment.png"
}
},
"images.2": {
"links": {
"self": "../Screenshots/03-question-feedback.png"
}
},
"images.3": {
"links": {
"self": "../Screenshots/04-grade-with-ai.png"
}
},
"tags.0": {
"links": {
"self": "../../Tag/ai"
Expand All @@ -43,11 +63,6 @@
"self": "../Spec/5455e5c1-1d62-41c9-ae39-f2ff09da9b83"
}
},
"images.0": {
"links": {
"self": "../Screenshots/homework-grader-screenshot.png"
}
},
"skills.0": {
"links": {
"self": "../Skill/dc116967-432e-4864-93aa-d7ea3f335d24"
Expand Down Expand Up @@ -82,7 +97,12 @@
"links": {
"self": "../ListingThumbnails/homeworkgrader-73e64906.png"
}
},
"examples.2": {
"links": {
"self": "../HomeworkGrader/fresh-assignment"
}
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@
25,
46
],
"overallFeedback": "Excellent work! Your responses demonstrate exceptional understanding of US History with thorough analysis, specific historical examples, and clear connections between events and their impacts.\n\n**Question 1: The American Revolution (25/25 points)**\nOutstanding analysis of the American Revolution's causes. You effectively identified three major causes with specific acts and dates, provided strong justification for why taxation without representation was most significant, and made excellent connections to how these grievances shaped early American government. Your use of specific legislation (Sugar Act 1764, Stamp Act 1765, Townshend Acts 1767, Quartering Act 1765, Coercive Acts 1774) demonstrates strong factual knowledge. The connection between colonial grievances and constitutional principles — including the Third Amendment and the federal system — was very well-developed. Full marks!\n\n**Question 2: Civil War Impact (25/25 points)**\nExemplary examination of the Civil War's long-term impacts. Your response expertly covered all required elements: the immediate Reconstruction era, the shift in federal-state power, and lasting racial impacts. The specific examples (13th–15th Amendments, Freedmen's Bureau, sharecropping, Jim Crow laws) and your analysis of how these issues persisted into the Civil Rights Movement showed sophisticated historical thinking. Your note on the economic transformation from an agricultural to an industrial power was particularly insightful. Full marks!\n\n**Question 3: The Progressive Era (46/50 points)**\nVery strong evaluation of Progressive Era reforms. You identified a comprehensive range of reform categories, provided detailed analysis of two major initiatives with specific outcomes, and effectively connected these reforms to modern America. Your choices of the Pure Food and Drug Act and Women's Suffrage were well-supported with solid evidence. The connections to modern regulatory agencies (EPA, OSHA, FDA) were excellent. Minor deductions: You could have explored some limitations or unintended consequences of Progressive reforms (e.g., the exclusion of minorities from many labor protections), and discussed opposition to these reforms in greater detail.\n\n**Overall Assessment:**\nYour writing is clear, well-organized, and demonstrates an excellent command of historical chronology and causation. You consistently support arguments with specific evidence and make meaningful connections between historical events and their long-term consequences. Keep up the outstanding work!\n\n**Total Score: 96 out of 100 points (96% — A)**"
"overallFeedback": "Excellent work! Your responses demonstrate exceptional understanding of US History with thorough analysis, specific historical examples, and clear connections between events and their impacts.",
"questionFeedbacks": [
"Outstanding analysis of the American Revolution's causes. You effectively identified three major causes with specific acts and dates, provided strong justification for why taxation without representation was most significant, and made excellent connections to how these grievances shaped early American government. Your use of specific legislation (Sugar Act 1764, Stamp Act 1765, Townshend Acts 1767, Quartering Act 1765, Coercive Acts 1774) demonstrates strong factual knowledge. The connection between colonial grievances and constitutional principles — including the Third Amendment and the federal system — was very well-developed. Full marks!",
"Exemplary examination of the Civil War's long-term impacts. Your response expertly covered all required elements: the immediate Reconstruction era, the shift in federal-state power, and lasting racial impacts. The specific examples (13th–15th Amendments, Freedmen's Bureau, sharecropping, Jim Crow laws) and your analysis of how these issues persisted into the Civil Rights Movement showed sophisticated historical thinking. Your note on the economic transformation from an agricultural to an industrial power was particularly insightful. Full marks!",
"Very strong evaluation of Progressive Era reforms. You identified a comprehensive range of reform categories, provided detailed analysis of two major initiatives with specific outcomes, and effectively connected these reforms to modern America. Your choices of the Pure Food and Drug Act and Women's Suffrage were well-supported with solid evidence. The connections to modern regulatory agencies (EPA, OSHA, FDA) were excellent. Minor deductions: You could have explored some limitations or unintended consequences of Progressive reforms (e.g., the exclusion of minorities from many labor protections), and discussed opposition to these reforms in greater detail.\n\nOverall Assessment:\nYour writing is clear, well-organized, and demonstrates an excellent command of historical chronology and causation. You consistently support arguments with specific evidence and make meaningful connections between historical events and their long-term consequences. Keep up the outstanding work!\n\nTotal Score: 96 out of 100 points (96% — A)"
]
},
"cardInfo": {
"name": "History Homework",
Expand Down Expand Up @@ -63,4 +68,4 @@
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,22 @@
"type": "card",
"attributes": {
"grade": {
"overallGrade": "E",
"overallGrade": "B",
"overallFeedback": "Strong work overall — 20 out of 25 points (80%). Your addition, division, multiplication, and word-problem skills are solid. The one slip was subtraction: slow down and double-check with the inverse operation (add your answer back to the number you subtracted).",
"questionPoints": [
5,
0,
5,
0
5,
0,
5
],
"overallFeedback": "### Homework Grade: E (50%)\n\n**Question-by-Question Feedback:**\n\n1. **Addition (15 + 27 = ?)**: Your answer \"42\" is **CORRECT!** ✓ (5/5 points)\n - Great work! 15 + 27 = 42.\n\n2. **Division (48 ÷ 6 = ?)**: **NO ANSWER PROVIDED** ✗ (0/5 points)\n - The correct answer is **8**.\n - Tip: Division and multiplication are inverses — 6 × 8 = 48, so 48 ÷ 6 = 8.\n\n3. **Multiplication (13 × 4 = ?)**: Your answer \"52\" is **CORRECT!** ✓ (5/5 points)\n - Well done! You can verify with (10 × 4) + (3 × 4) = 40 + 12 = 52.\n\n4. **Subtraction (45 - 19 = ?)**: Your answer \"100\" is **INCORRECT** ✗ (0/5 points)\n - The correct answer is **26**.\n - Tip: Try 45 - 20 = 25, then add back 1 to get 26.\n\n**Total Score: 10 out of 20 points (50%)**\n\n**Areas for Improvement:**\n- Attempt every question — a blank answer guarantees 0 points.\n- Review division as the inverse of multiplication.\n- Double-check subtraction answers; 45 - 19 cannot be larger than 45!\n- Show your working to help catch arithmetic mistakes early.\n\n**What You Did Well:**\n- Strong performance on addition and multiplication — keep it up!\n- When you attempt a problem, your method appears solid.\n\n**Next Steps:**\n- Practice division and subtraction fact families.\n- Always sanity-check answers (e.g., a subtraction result can't exceed the starting number).\n- Attempt every question, even if unsure — partial credit is better than zero!\n\nYou clearly have a good grasp of addition and multiplication. Focus on division and subtraction practice, and always attempt every question to maximise your score!"
"questionFeedbacks": [
"Correct! 15 + 27 = 42. Clean addition with carrying.",
"Correct! 48 ÷ 6 = 8. You can verify with 6 × 8 = 48.",
"Correct! 13 × 4 = 52. Nice use of (10 × 4) + (3 × 4).",
"Incorrect — the answer is 26, not 100. Try 45 − 20 = 25, then add back 1. Always sanity-check: subtracting should make the number smaller.",
"Correct! 6 eggs × 7 boxes = 42 eggs. Good translation of a word problem into multiplication."
]
},
"cardInfo": {
"name": "Math Homework",
Expand All @@ -26,31 +34,38 @@
},
"questions": [
{
"cardTitle": "Addition",
"cardTitle": null,
"questionText": "What is 15 + 27?",
"answer": "42",
"maxPoints": 5
},
{
"cardTitle": "Division",
"cardTitle": null,
"questionText": "What is 48 ÷ 6?",
"answer": "",
"answer": "8",
"maxPoints": 5
},
{
"cardTitle": "Multiplication",
"cardTitle": null,
"questionText": "What is 13 × 4?",
"answer": "52",
"maxPoints": 5
},
{
"cardTitle": "Subtraction",
"questionText": "What is 45 - 19?",
"cardTitle": null,
"questionText": "What is 45 19?",
"answer": "100",
"maxPoints": 5
},
{
"cardTitle": null,
"questionText": "A box holds 6 eggs. How many eggs are in 7 boxes?",
"answer": "42",
"maxPoints": 5
}
],
"instructions": "Solve the following arithmetic problems. Show your work where necessary."
"instructions": "Solve the following arithmetic problems. Show your work where necessary.",
"cardTitle": "Basic Arithmetic Practice"
},
"relationships": {
"gradingSkill": {
Expand All @@ -70,4 +85,4 @@
}
}
}
}
}
44 changes: 44 additions & 0 deletions 25f2fc-homework-grader/HomeworkGrader/fresh-assignment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"data": {
"type": "card",
"attributes": {
"instructions": null,
"questions": [],
"grade": {
"overallGrade": null,
"overallFeedback": null,
"questionPoints": [],
"questionFeedbacks": []
},
"cardInfo": {
"name": null,
"notes": null,
"summary": "",
"cardThumbnailURL": null
}
},
"relationships": {
"gradingSkill": {
"links": {
"self": "../Skill/dc116967-432e-4864-93aa-d7ea3f335d24"
}
},
"cardInfo.theme": {
"links": {
"self": null
}
},
"cardInfo.cardThumbnail": {
"links": {
"self": null
}
}
},
"meta": {
"adoptsFrom": {
"module": "../homework-grader",
"name": "HomeworkGrader"
}
}
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
},
"commands": [],
"cardDescription": null,
"instructions": "THE USER ASKING IS THE STUDENT.\n\nGrade the student's homework assignment and provide an overall letter grade (A, B, C, D, E, F) along with detailed feedback. \n\nGrading Process:\n1. Examine each question and award points based on correctness (up to each question's maxPoints)\n2. Create a questionPoints array with the SAME LENGTH as the questions array\n3. Calculate overall letter grade from total points earned vs total possible\n4. Provide constructive feedback\n\nGRADING SCALE (MUST FOLLOW EXACTLY):\n- A: 90-100% (Excellent work)\n- B: 80-89% (Good work)\n- C: 70-79% (Average work)\n- D: 60-69% (Below average work)\n- E: 50-59% (Poor work)\n- F: 0-49% (Failing work)\n\nGRADE CALCULATION:\n1. Sum all questionPoints to get total earned points\n2. Sum all maxPoints from questions to get total possible points\n3. Calculate percentage: (total earned / total possible) \u00d7 100\n4. Apply the grading scale above to determine letter grade"
"instructions": "THE USER ASKING IS THE STUDENT.\n\nGrade the student's homework assignment and provide an overall letter grade (A, B, C, D, E, F) along with detailed feedback. \n\nGrading Process:\n1. Examine each question and award points based on correctness (up to each question's maxPoints)\n2. Create a questionPoints array with the SAME LENGTH as the questions array\n3. Create a questionFeedbacks array with the SAME LENGTH as the questions array — one short, specific feedback string per question (what was right, what was missing, how to improve). Write each entry for that question alone; do NOT repeat the per-question detail in the overall feedback.\n4. Calculate overall letter grade from total points earned vs total possible\n5. Provide overallFeedback as a brief summary of the whole assignment (strengths, main themes to work on) — the per-question detail belongs in questionFeedbacks\n\nGRADING SCALE (MUST FOLLOW EXACTLY):\n- A: 90-100% (Excellent work)\n- B: 80-89% (Good work)\n- C: 70-79% (Average work)\n- D: 60-69% (Below average work)\n- E: 50-59% (Poor work)\n- F: 0-49% (Failing work)\n\nGRADE CALCULATION:\n1. Sum all questionPoints to get total earned points\n2. Sum all maxPoints from questions to get total possible points\n3. Calculate percentage: (total earned / total possible) × 100\n4. Apply the grading scale above to determine letter grade"
},
"relationships": {
"cardInfo.theme": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"name": "GradeField",
"module": "../homework-grader"
},
"readMe": null,
"readMe": "# GradeField\n\n## Summary\n\nGradeField holds the AI's grading result for an assignment: `overallGrade` (letter A–F), `overallFeedback` (a brief markdown summary of the whole assignment), `questionPoints` (containsMany numbers, one per question, same order as the questions array), `questionFeedbacks` (containsMany markdown, one focused feedback entry per question), and a computed `overallPoints` that sums the per-question points. The grading skill fills all of these in one act-mode patch; `isGradeConsistent` (exported from `../homework-grader`) checks the arrays line up with the question count.\n\n## Usage as a Field\n\n```ts\n@field grade = contains(GradeField);\n```\n\n## Template Usage\n\n```handlebars\n<@fields.grade />\n{{@model.grade.overallGrade}} · {{@model.grade.overallPoints}} pts\n```\n",
"cardInfo": {
"name": null,
"notes": null,
Expand Down Expand Up @@ -58,4 +58,4 @@
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"name": "HomeworkGrader",
"module": "../homework-grader"
},
"readMe": "## Summary\n\nThe `HomeworkGrader` card allows users to view, answer, and get feedback on homework assignments. It includes features such as an overview of the assignment, a detailed view of each question, and a feedback section with the overall grade and score breakdown.\n\n## Import\n\n```\nimport { HomeworkGrader } from '../homework-grader';\n```\n\n## Usage as a Field\n\nTo use the `HomeworkGrader` card as a field within a consuming card or field:\n\n```json\n{\n \"type\": \"card\",\n \"attributes\": {\n \"cardTitle\": \"Homework Assignment\",\n \"cardDescription\": \"Complete the homework and get feedback from the AI tutor.\"\n },\n \"relationships\": {\n \"homework\": {\n \"data\": {\n \"type\": \"card\",\n \"id\": \"../homework-grader\"\n }\n }\n }\n}\n```\n\n## Template Usage\n\nTo display the `HomeworkGrader` card within a template:\n\n```hbs\n<@fields.homework />\n```\n\nThis will render the `HomeworkGrader` card in the consuming card or field.",
"readMe": "## Summary\n\nThe `HomeworkGrader` card allows users to view, answer, and get feedback on homework assignments. It includes features such as an overview of the assignment, a detailed view of each question, and a feedback section with the overall grade and score breakdown.\n\n## Import\n\n```\nimport { HomeworkGrader } from '../homework-grader';\n```\n\n## Template Usage\n\nTo display the `HomeworkGrader` card within a template:\n\n```hbs\n<@fields.homework />\n```\n\nThis will render the `HomeworkGrader` card in the consuming card or field.",
"cardInfo": {
"name": null,
"notes": null,
Expand Down Expand Up @@ -42,4 +42,4 @@
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"data": {
"type": "card",
"attributes": {
"readMe": null,
"readMe": "# QuestionField\n\n## Summary\n\nQuestionField is one assignment question: `cardTitle` (the question's short name), `questionText` (markdown prompt), `answer` (the student's markdown answer, edited inline from the isolated view), `maxPoints`, and a computed `isAnswered`. The grader holds questions in a `containsMany`, and the AI awards `questionPoints[i]` / writes `questionFeedbacks[i]` against the same index.\n\n## Usage as a Field\n\n```ts\n@field questions = containsMany(QuestionField);\n```\n\n## Template Usage\n\n```handlebars\n{{#each @model.questions as |q|}}{{q.cardTitle}}{{/each}}\n```\n\nEach question renders with its own embedded and fitted views; the fitted view embeds an editable answer field.\n",
"ref": {
"module": "../homework-grader",
"name": "QuestionField"
Expand Down Expand Up @@ -42,4 +42,4 @@
}
}
}
}
}
Loading
Loading