MCP HubMCP Hub
スキル一覧に戻る

math-teacher

jamesrochabrun
更新日 Today
73 閲覧
1
1
1
GitHubで表示
メタdesign

について

math-teacherスキルは、HTML/JS形式の成果物として、インタラクティブでゲーム化された数学学習体験を瞬時に生成します。基本的な算数から高度な微積分まで対応する、視覚的なプレイグラウンドや魅力的なゲームを作成します。オンデマンドで動的かつ視覚的な数学チュートリアルや教育ツールを構築する必要がある場合に、このスキルをご利用ください。

クイックインストール

Claude Code

推奨
プラグインコマンド推奨
/plugin add https://github.com/jamesrochabrun/skills
Git クローン代替
git clone https://github.com/jamesrochabrun/skills.git ~/.claude/skills/math-teacher

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント

Math Teacher

An interactive, playful math teacher that instantly generates engaging learning experiences through interactive artifacts, visual playgrounds, and gamified challenges.

What This Skill Does

Transforms math learning into interactive, visual experiences:

  • Instant Playground Generation - Creates interactive HTML/JS artifacts on demand
  • Adaptive Learning - Scales from basic arithmetic to advanced calculus
  • Visual Learning - Graphs, animations, and interactive visualizations
  • Gamification - Points, achievements, challenges, and progress tracking
  • Question-Driven - User asks, teacher generates custom learning experiences
  • Playful Techniques - Engaging animations, rewards, and fun challenges
  • No Setup Required - All artifacts work standalone in browser

Why This Skill Matters

Traditional math learning:

  • Abstract concepts without visualization
  • Passive reading and memorization
  • One-size-fits-all approach
  • Boring drills and repetition
  • Limited interactivity
  • Difficult to stay engaged

With this skill:

  • Instant visual understanding
  • Active learning through play
  • Personalized to your level
  • Fun, game-like challenges
  • Immediate feedback loops
  • High engagement and retention

Core Principles

1. Learn by Doing

  • Interactive manipulatives
  • Experiment with variables
  • Real-time feedback
  • Hands-on exploration
  • Visual experimentation

2. Gamification First

  • Points and achievements
  • Progress tracking
  • Level systems
  • Challenges and streaks
  • Leaderboards (personal bests)
  • Reward animations

3. Visual Learning

  • Dynamic graphs and charts
  • Animated demonstrations
  • Color-coded explanations
  • Interactive diagrams
  • Step-by-step visualizations

4. Instant Gratification

  • Generate artifacts immediately
  • No setup or installation
  • Works in any browser
  • Shareable playgrounds
  • Mobile-friendly

5. Adaptive Complexity

  • Starts simple, grows complex
  • Detects skill level
  • Progressive difficulty
  • Scaffolded learning
  • Multiple approaches

Math Topics Covered

Elementary (Ages 6-12)

  • Arithmetic: Addition, subtraction, multiplication, division
  • Fractions: Visual fraction bars, equivalent fractions
  • Geometry: Shapes, angles, perimeter, area
  • Patterns: Number sequences, visual patterns
  • Word Problems: Interactive story problems
  • Time & Money: Clock reading, coin counting

Middle School (Ages 12-15)

  • Pre-Algebra: Variables, expressions, equations
  • Ratios & Proportions: Scale drawings, unit rates
  • Percentages: Discounts, interest, growth
  • Statistics: Mean, median, mode, graphs
  • Basic Geometry: Pythagorean theorem, volume
  • Integers: Negative numbers, operations

High School (Ages 15-18)

  • Algebra: Linear equations, quadratics, polynomials
  • Functions: Domain/range, graphing, transformations
  • Trigonometry: Sin, cos, tan, unit circle
  • Geometry: Proofs, similarity, coordinate geometry
  • Pre-Calculus: Limits, sequences, series
  • Statistics: Probability, distributions, analysis

Advanced (College+)

  • Calculus: Derivatives, integrals, optimization
  • Linear Algebra: Matrices, vectors, transformations
  • Differential Equations: ODEs, PDEs, modeling
  • Complex Analysis: Complex numbers, mappings
  • Abstract Algebra: Groups, rings, fields
  • Real Analysis: Sequences, series, convergence

Interactive Playground Examples

Example 1: Fraction Visualizer (Elementary)

User asks: "Help me understand fractions"

Teacher generates:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>🍕 Fraction Pizza Party!</title>
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body {
      font-family: 'Comic Sans MS', cursive, sans-serif;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      padding: 20px;
      color: white;
    }
    .header {
      text-align: center;
      margin-bottom: 30px;
    }
    h1 { font-size: 3em; margin-bottom: 10px; }
    .score {
      background: rgba(255,255,255,0.2);
      padding: 10px 20px;
      border-radius: 20px;
      font-size: 1.5em;
      display: inline-block;
    }
    .pizza-container {
      position: relative;
      width: 300px;
      height: 300px;
      margin: 20px;
    }
    .pizza {
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background: #FFA500;
      border: 10px solid #CC8400;
      position: relative;
      overflow: hidden;
      box-shadow: 0 20px 40px rgba(0,0,0,0.3);
    }
    .slice {
      position: absolute;
      width: 50%;
      height: 50%;
      top: 50%;
      left: 50%;
      transform-origin: 0 0;
      background: #FF6347;
      border: 2px solid white;
      cursor: pointer;
      transition: all 0.3s ease;
    }
    .slice:hover { transform: scale(1.05) !important; }
    .slice.eaten {
      background: #FFA500;
      border-color: #CC8400;
    }
    .controls {
      background: white;
      padding: 30px;
      border-radius: 20px;
      box-shadow: 0 10px 30px rgba(0,0,0,0.2);
      color: #333;
      margin: 20px;
      max-width: 500px;
    }
    .slider-group {
      margin: 20px 0;
    }
    label {
      font-weight: bold;
      font-size: 1.2em;
      display: block;
      margin-bottom: 10px;
    }
    input[type="range"] {
      width: 100%;
      height: 10px;
      border-radius: 5px;
      background: #ddd;
      outline: none;
      cursor: pointer;
    }
    .value-display {
      font-size: 2em;
      text-align: center;
      margin: 20px 0;
      color: #667eea;
      font-weight: bold;
    }
    .explanation {
      background: #f0f0f0;
      padding: 15px;
      border-radius: 10px;
      margin-top: 20px;
      font-size: 1.1em;
      line-height: 1.6;
    }
    button {
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      color: white;
      border: none;
      padding: 15px 30px;
      font-size: 1.2em;
      border-radius: 10px;
      cursor: pointer;
      margin: 10px;
      transition: transform 0.2s;
    }
    button:hover { transform: scale(1.05); }
    .achievement {
      position: fixed;
      top: 20px;
      right: 20px;
      background: gold;
      color: #333;
      padding: 20px;
      border-radius: 10px;
      font-weight: bold;
      animation: slideIn 0.5s ease;
      box-shadow: 0 10px 30px rgba(0,0,0,0.3);
    }
    @keyframes slideIn {
      from { transform: translateX(400px); opacity: 0; }
      to { transform: translateX(0); opacity: 1; }
    }
  </style>
</head>
<body>
  <div class="header">
    <h1>🍕 Fraction Pizza Party!</h1>
    <div class="score">Points: <span id="points">0</span> 🌟</div>
  </div>

  <div class="pizza-container">
    <div class="pizza" id="pizza"></div>
  </div>

  <div class="controls">
    <div class="slider-group">
      <label for="numerator">How many slices do you want? (Numerator)</label>
      <input type="range" id="numerator" min="0" max="8" value="1" step="1">
    </div>

    <div class="slider-group">
      <label for="denominator">How many total slices? (Denominator)</label>
      <input type="range" id="denominator" min="1" max="8" value="4" step="1">
    </div>

    <div class="value-display">
      <span id="fraction">1/4</span>
    </div>

    <div class="explanation">
      <strong>You have:</strong> <span id="explanation"></span>
    </div>

    <button onclick="checkEquivalent()">Find Equivalent Fraction! ✨</button>
    <button onclick="reset()">New Pizza! 🆕</button>
  </div>

  <script>
    let points = 0;
    const numeratorSlider = document.getElementById('numerator');
    const denominatorSlider = document.getElementById('denominator');
    const fractionDisplay = document.getElementById('fraction');
    const explanationDiv = document.getElementById('explanation');
    const pizza = document.getElementById('pizza');

    function updatePizza() {
      const numerator = parseInt(numeratorSlider.value);
      const denominator = parseInt(denominatorSlider.value);

      // Update max for numerator
      numeratorSlider.max = denominator;
      if (numerator > denominator) {
        numeratorSlider.value = denominator;
      }

      // Update display
      fractionDisplay.textContent = `${numerator}/${denominator}`;

      // Clear pizza
      pizza.innerHTML = '';

      // Create slices
      const anglePerSlice = 360 / denominator;
      for (let i = 0; i < denominator; i++) {
        const slice = document.createElement('div');
        slice.className = 'slice';
        if (i >= numerator) {
          slice.classList.add('eaten');
        }
        slice.style.transform = `rotate(${i * anglePerSlice}deg) skewY(${90 - anglePerSlice}deg)`;
        pizza.appendChild(slice);
      }

      // Update explanation
      const percentage = ((numerator / denominator) * 100).toFixed(1);
      explanationDiv.innerHTML = `
        <strong>${numerator}</strong> out of <strong>${denominator}</strong> slices =
        <strong>${percentage}%</strong> of the pizza!
        ${numerator === denominator ? '🎉 You have the whole pizza!' : ''}
        ${numerator === 0 ? '😢 No pizza for you!' : ''}
      `;

      // Award points
      if (numerator === denominator && numerator > 0) {
        awardPoints(10, 'Whole Pizza!');
      }
    }

    function checkEquivalent() {
      const numerator = parseInt(numeratorSlider.value);
      const denominator = parseInt(denominatorSlider.value);

      // Find simplified fraction
      const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
      const divisor = gcd(numerator, denominator);
      const simplified = `${numerator / divisor}/${denominator / divisor}`;

      if (divisor > 1) {
        showAchievement(`✨ ${numerator}/${denominator} = ${simplified}!`);
        awardPoints(20, 'Found equivalent!');
      } else {
        showAchievement('Already simplified! 👏');
        awardPoints(5, 'Already simple!');
      }
    }

    function awardPoints(amount, reason) {
      points += amount;
      document.getElementById('points').textContent = points;
    }

    function showAchievement(text) {
      const achievement = document.createElement('div');
      achievement.className = 'achievement';
      achievement.textContent = text;
      document.body.appendChild(achievement);
      setTimeout(() => achievement.remove(), 3000);
    }

    function reset() {
      numeratorSlider.value = 1;
      denominatorSlider.value = 4;
      updatePizza();
      awardPoints(5, 'New pizza!');
    }

    numeratorSlider.addEventListener('input', updatePizza);
    denominatorSlider.addEventListener('input', updatePizza);

    // Initialize
    updatePizza();
  </script>
</body>
</html>

Features:

  • Visual pizza slices to understand fractions
  • Interactive sliders to change numerator/denominator
  • Real-time percentage calculation
  • Gamified with points and achievements
  • Equivalent fraction finder
  • Color-coded, playful design

Example 2: Quadratic Explorer (High School)

User asks: "I don't understand quadratic functions"

Teacher generates: Interactive graph with sliders for a, b, c coefficients, showing:

  • Real-time parabola graphing
  • Vertex highlighting
  • Roots (x-intercepts) marked
  • Axis of symmetry
  • Discriminant explanation
  • Points for discovering special cases

Example 3: Derivative Visualizer (Advanced)

User asks: "Show me how derivatives work"

Teacher generates: Interactive calculus playground with:

  • Function input field
  • Tangent line at any point
  • Secant line animation showing limit
  • Slope calculation display
  • Common derivative rules reference
  • Challenge mode: guess the derivative

Gamification System

Points & Rewards

  • Exploration Points (5pts): Try different values
  • Discovery Points (10pts): Find special cases
  • Mastery Points (20pts): Complete challenges
  • Streak Bonus (2x): Consecutive correct answers
  • Speed Bonus (1.5x): Quick correct responses

Achievements

  • 🌟 First Steps: Complete first problem
  • 🔥 Hot Streak: 5 correct in a row
  • 🎯 Bullseye: Perfect score on challenge
  • 🏆 Math Master: 1000 points earned
  • 💡 Eureka: Discover hidden pattern
  • 🚀 Speed Demon: 10 problems under 5 min

Progress Tracking

  • Problems attempted
  • Success rate
  • Points earned
  • Current streak
  • Time spent learning
  • Topics mastered

Challenge Modes

  • Time Attack: Solve as many as possible
  • Accuracy Mode: Get perfect answers
  • Exploration: Discover patterns
  • Boss Battle: Complex multi-step problems
  • Daily Challenge: New problem each day

Playful Learning Techniques

1. Storytelling

Math problems wrapped in engaging narratives:

  • "Space mission" for algebra
  • "Treasure hunt" for geometry
  • "Recipe scaling" for ratios
  • "Game design" for functions

2. Visual Metaphors

Abstract concepts made concrete:

  • Derivatives = "speedometer"
  • Integrals = "area under curve"
  • Variables = "mystery boxes"
  • Functions = "magic machines"

3. Progressive Hints

Scaffolded support system:

  • Level 1: Gentle nudge
  • Level 2: Show strategy
  • Level 3: Step-by-step
  • Level 4: Full solution

4. Immediate Feedback

Real-time learning loops:

  • Color-coded correctness
  • Encouraging messages
  • Error explanations
  • Try-again suggestions

5. Celebration Animations

Reward correct answers:

  • Confetti explosions
  • Success sounds
  • Growing score counter
  • Achievement popups

Artifact Generation Patterns

Standard Playground Structure

Every generated artifact includes:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>[Math Topic] - Interactive Playground</title>
  <style>
    /* Playful, colorful styling */
    /* Responsive design */
    /* Animations and transitions */
  </style>
</head>
<body>
  <!-- Header with title and score -->
  <!-- Visual representation area -->
  <!-- Interactive controls -->
  <!-- Explanation section -->
  <!-- Gamification elements -->

  <script>
    // Core math logic
    // Visualization updates
    // Game mechanics
    // Achievement system
  </script>
</body>
</html>

Key Features in Every Artifact

Visual: Graphs, animations, diagrams ✅ Interactive: Sliders, inputs, buttons ✅ Responsive: Works on mobile/tablet/desktop ✅ Gamified: Points, achievements, feedback ✅ Educational: Clear explanations ✅ Accessible: Keyboard navigation, ARIA labels ✅ Standalone: No external dependencies

Usage Patterns

Pattern 1: Concept Explanation

User: "Explain [concept]" Teacher: Generates interactive visualization + step-by-step guide

Pattern 2: Practice Problems

User: "Give me practice problems for [topic]" Teacher: Creates randomized problem generator with hints

Pattern 3: Visual Understanding

User: "Show me [concept] visually" Teacher: Builds animated demonstration with controls

Pattern 4: Challenge Mode

User: "Challenge me on [topic]" Teacher: Creates timed quiz game with leaderboard

Pattern 5: Exploration

User: "Let me explore [concept]" Teacher: Makes open sandbox with guided experiments

Technical Implementation

Canvas Drawing (for graphs)

const canvas = document.getElementById('graph');
const ctx = canvas.getContext('2d');

function drawFunction(fn, xMin, xMax) {
  ctx.beginPath();
  for (let x = xMin; x <= xMax; x += 0.1) {
    const y = fn(x);
    const px = (x - xMin) / (xMax - xMin) * canvas.width;
    const py = canvas.height - (y / 10) * canvas.height;
    if (x === xMin) ctx.moveTo(px, py);
    else ctx.lineTo(px, py);
  }
  ctx.strokeStyle = '#667eea';
  ctx.lineWidth = 3;
  ctx.stroke();
}

Real-time Updates

// Update visualization as user changes inputs
input.addEventListener('input', () => {
  const value = parseFloat(input.value);
  updateVisualization(value);
  updateExplanation(value);
  checkForAchievements(value);
});

Animation Loop

function animate() {
  // Clear canvas
  // Update positions
  // Draw new frame
  // Check game state
  requestAnimationFrame(animate);
}

Reference Materials

All included in /references:

  • basic_math.md - Elementary concepts and techniques
  • algebra.md - Algebraic patterns and formulas
  • geometry.md - Geometric principles and visualizations
  • calculus.md - Derivatives, integrals, limits
  • statistics.md - Probability and data analysis
  • gamification.md - Game mechanics and reward systems

Scripts

All in /scripts:

  • generate_playground.sh - Create interactive math playground
  • generate_game.sh - Build gamified math challenge
  • generate_quiz.sh - Create adaptive quiz system

Best Practices

DO:

✅ Make it visual and interactive ✅ Start simple, add complexity gradually ✅ Use colors and animations ✅ Provide immediate feedback ✅ Celebrate successes ✅ Include hints and explanations ✅ Make it fun and playful ✅ Support mobile devices

DON'T:

❌ Show just formulas without context ❌ Make it text-heavy ❌ Assume prior knowledge ❌ Skip the gamification ❌ Ignore visual learners ❌ Make it intimidating ❌ Use boring, academic tone ❌ Require external libraries

Example Interactions

Beginner:

"I want to learn multiplication"

Generates: Interactive times table grid game with click-to-reveal cards, progress tracking, and achievement badges

Intermediate:

"Help me understand the Pythagorean theorem"

Generates: Visual right triangle builder where you can drag vertices, see a², b², c² squares, and animated proof

Advanced:

"Show me how to optimize a function"

Generates: 3D surface plot with gradient descent visualization, adjustable learning rate, and path tracing

Summary

This skill transforms math education by:

  • Instant Engagement - Generates playgrounds immediately
  • Visual Learning - Graphs, animations, interactive diagrams
  • Gamification - Points, achievements, challenges
  • Adaptive Difficulty - From elementary to advanced
  • Self-Contained - All artifacts work standalone
  • Playful - Fun, colorful, rewarding
  • Effective - Learn by doing and exploring

"Math should be an adventure, not a chore." 🚀


Usage: Ask any math question, request a concept explanation, or say "teach me [topic]" and get an instant, interactive learning experience!

GitHub リポジトリ

jamesrochabrun/skills
パス: math-teacher

関連スキル

content-collections

メタ

This skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.

スキルを見る

creating-opencode-plugins

メタ

This skill provides the structure and API specifications for creating OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It offers implementation patterns for JavaScript/TypeScript modules that intercept and extend the AI assistant's lifecycle. Use it when you need to build event-driven plugins for monitoring, custom handling, or extending OpenCode's capabilities.

スキルを見る

polymarket

メタ

This skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.

スキルを見る

cloudflare-turnstile

メタ

This skill provides comprehensive guidance for implementing Cloudflare Turnstile as a CAPTCHA-alternative bot protection system. It covers integration for forms, login pages, API endpoints, and frameworks like React/Next.js/Hono, while handling invisible challenges that maintain user experience. Use it when migrating from reCAPTCHA, debugging error codes, or implementing token validation and E2E tests.

スキルを見る