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

Lesson types define individual learning units with sections, objectives, quizzes, and code examples.

Types

Lesson

Represents a single lesson within a week.
id
string
required
Unique identifier for the lesson (e.g., “welcome-to-fhevm”, “environment-setup”)
title
string
required
Human-readable lesson titleExample: “Your First FHEVM Contract”
description
string
required
Brief summary of what the lesson coversExample: “Build an EncryptedCounter contract from scratch with encrypted state variables”
estimatedMinutes
number
required
Expected time to complete the lesson in minutes
icon
string
required
Lucide icon name for UI displayExample: “Code”, “Shield”, “Settings”, “Globe”
sections
Section[]
required
Array of content sections within the lesson
quiz
Quiz
Optional quiz to test understanding
instructorNotes
string[]
required
Teaching tips and common pitfalls for instructorsExample:
[
  "This is the first hands-on coding lesson. Have students type along.",
  "Common mistake: forgetting FHE.allowThis() after modifying encrypted state."
]
codeTemplate
CodeTemplate
Optional starter and solution code for hands-on exercises
objectives
string[]
required
Specific learning objectives for this lessonExample:
[
  "Create a Solidity contract that imports and uses FHE types",
  "Implement functions that accept encrypted inputs"
]

Section

A content block within a lesson (text, code, video, interactive, etc.).
id
string
required
Unique identifier for the section
title
string
required
Section heading
type
'text' | 'code' | 'interactive' | 'video' | 'diagram' | 'quiz'
required
The type of content this section contains
content
string[]
required
Array of paragraphs or content blocksExample:
[
  "Fully Homomorphic Encryption (FHE) allows computation on encrypted data.",
  "Think of it as performing math on a locked safe without opening it."
]
code
CodeSnippet
Code example (present when type is ‘code’)
tips
string[]
Helpful tips or best practicesExample:
[
  "FHE.select() is the encrypted equivalent of the ternary operator",
  "You cannot use if/else with encrypted conditions"
]
keyPoints
string[]
Key takeaways from this section
videoId
string
YouTube video ID (present when type is ‘video’)
diagramCode
string
Mermaid diagram code (present when type is ‘diagram’)
componentId
string
Reference to an interactive component (present when type is ‘interactive’)Example: “connect-wallet”, “fhe-basics-contracts”

CodeSnippet

Represents a code example with syntax highlighting.
language
string
required
Programming language for syntax highlightingExample: “solidity”, “typescript”, “bash”, “javascript”
code
string
required
The actual code content
filename
string
Suggested filename for the codeExample: “EncryptedCounter.sol”, “deploy.ts”
description
string
Brief description of what the code does

Type Definitions

export interface Lesson {
  id: string;
  title: string;
  description: string;
  estimatedMinutes: number;
  icon: string; // lucide icon name
  sections: Section[];
  quiz?: Quiz;
  instructorNotes: string[];
  codeTemplate?: CodeTemplate;
  objectives: string[];
}

export interface Section {
  id: string;
  title: string;
  type: 'text' | 'code' | 'interactive' | 'video' | 'diagram' | 'quiz';
  content: string[];
  code?: CodeSnippet;
  tips?: string[];
  keyPoints?: string[];
  videoId?: string;
  diagramCode?: string;
  componentId?: string;
}

export interface CodeSnippet {
  language: string;
  code: string;
  filename?: string;
  description?: string;
}

export interface CodeTemplate {
  starterCode: CodeSnippet;
  solutionCode: CodeSnippet;
  description: string;
}

Usage Example

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

// Access first lesson of first week
const firstLesson = curriculum.weeks[0].lessons[0];

console.log(firstLesson.title); // "Welcome to FHEVM"
console.log(firstLesson.estimatedMinutes); // 30
console.log(firstLesson.icon); // "Home"

// Iterate through sections
firstLesson.sections.forEach((section) => {
  console.log(`Section: ${section.title}`);
  console.log(`Type: ${section.type}`);
  
  if (section.code) {
    console.log(`Language: ${section.code.language}`);
    console.log(`File: ${section.code.filename}`);
  }
  
  if (section.type === 'video' && section.videoId) {
    console.log(`YouTube: https://youtube.com/watch?v=${section.videoId}`);
  }
});

// Access code template if available
if (firstLesson.codeTemplate) {
  console.log('Starter:', firstLesson.codeTemplate.starterCode.code);
  console.log('Solution:', firstLesson.codeTemplate.solutionCode.code);
}

Build docs developers (and LLMs) love