Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/0xchriswilder/journey/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Homework types define weekly assignments with detailed requirements, grading rubrics, and starter/solution code.

Types

Homework

Represents a weekly homework assignment.
id
string
required
Unique identifier for the homeworkExample: “hw-1”, “hw-2”
title
string
required
Homework titleExample: “FHE Concepts & Setup Verification”, “Build a Confidential Counter”
description
string
required
Overview of what students need to accomplishExample: “Demonstrate your understanding of FHE fundamentals and verify your development environment is fully configured.”
requirements
Requirement[]
required
Array of specific requirements students must complete
gradingCriteria
GradingCriterion[]
required
Array of grading criteria with weights and rubrics
starterCode
CodeSnippet
Optional starter code template for students
solutionCode
CodeSnippet
Optional solution code for instructor reference
estimatedHours
number
required
Expected time commitment in hours
submissionInstructions
string[]
required
Step-by-step submission instructionsExample:
[
  "Create a folder named 'homework-1-[yourname]'",
  "Include a file 'answers.md' with your written responses",
  "Zip the folder and submit"
]

Requirement

A specific task within the homework assignment.
id
string
required
Unique identifier for the requirementExample: “hw1-q1”, “hw2-contract”
title
string
required
Requirement titleExample: “Conceptual Questions”, “EncryptedCounter Contract”
description
string
required
Detailed description of what to deliverExample: “Answer 10 written questions about FHE, FHEVM, and the Zama Protocol. Submit as a markdown file.”
type
'code' | 'written' | 'practical' | 'screenshot'
required
The type of deliverable expected
  • code: Submit source code files
  • written: Submit written explanations or essays
  • practical: Perform a task (e.g., deploy a contract)
  • screenshot: Submit screenshots as proof

GradingCriterion

A grading dimension with weight and rubric.
name
string
required
Criterion nameExample: “Conceptual Understanding”, “Contract Correctness”, “Test Quality”
weight
number
required
Percentage weight of this criterion (total across all criteria should sum to 100)Example: 40 (40% of total grade)
description
string
required
What this criterion evaluatesExample: “Accuracy and depth of answers to conceptual questions”
rubric
{ score: string; description: string }[]
required
Grading levels with score ranges and descriptionsExample:
[
  { 
    score: "Excellent (90-100%)", 
    description: "All answers correct with additional insight" 
  },
  { 
    score: "Good (70-89%)", 
    description: "Most answers correct with minor gaps" 
  },
  { 
    score: "Needs Work (50-69%)", 
    description: "Several incorrect answers, fundamental gaps" 
  },
  { 
    score: "Incomplete (<50%)", 
    description: "Missing answers or major misunderstandings" 
  }
]

Type Definitions

export interface Homework {
  id: string;
  title: string;
  description: string;
  requirements: Requirement[];
  gradingCriteria: GradingCriterion[];
  starterCode?: CodeSnippet;
  solutionCode?: CodeSnippet;
  estimatedHours: number;
  submissionInstructions: string[];
}

export interface Requirement {
  id: string;
  title: string;
  description: string;
  type: 'code' | 'written' | 'practical' | 'screenshot';
}

export interface GradingCriterion {
  name: string;
  weight: number; // percentage
  description: string;
  rubric: { score: string; description: string }[];
}

Usage Example

import { curriculum } from '@/data/curriculum';

// Access homework for first week
const homework = curriculum.weeks[0].homework;

console.log(homework.title); // "FHE Concepts & Setup Verification"
console.log(`Estimated time: ${homework.estimatedHours} hours`);

// List all requirements
homework.requirements.forEach((req, index) => {
  console.log(`${index + 1}. ${req.title} (${req.type})`);
  console.log(`   ${req.description}`);
});

// Display grading breakdown
console.log('\nGrading Criteria:');
homework.gradingCriteria.forEach((criterion) => {
  console.log(`- ${criterion.name}: ${criterion.weight}%`);
  console.log(`  ${criterion.description}`);
  
  criterion.rubric.forEach((level) => {
    console.log(`  - ${level.score}: ${level.description}`);
  });
});

// Show submission instructions
console.log('\nSubmission:');
homework.submissionInstructions.forEach((instruction, i) => {
  console.log(`${i + 1}. ${instruction}`);
});

// Access starter code if available
if (homework.starterCode) {
  console.log('\nStarter Code:');
  console.log(`Language: ${homework.starterCode.language}`);
  console.log(`File: ${homework.starterCode.filename}`);
}

Grading Example

interface StudentSubmission {
  requirementId: string;
  score: number; // 0-100
}

function calculateFinalGrade(
  homework: Homework,
  submissions: StudentSubmission[]
): number {
  let totalScore = 0;
  
  homework.gradingCriteria.forEach((criterion) => {
    // Find matching submission
    const submission = submissions.find(
      (s) => s.requirementId === criterion.name
    );
    
    if (submission) {
      // Weight the score by criterion weight
      totalScore += (submission.score * criterion.weight) / 100;
    }
  });
  
  return totalScore;
}

// Example usage
const studentScores: StudentSubmission[] = [
  { requirementId: "Conceptual Understanding", score: 95 },
  { requirementId: "Setup Verification", score: 85 },
  { requirementId: "Bonus Exploration", score: 75 }
];

const finalGrade = calculateFinalGrade(homework, studentScores);
console.log(`Final Grade: ${finalGrade}%`);