Install
openclaw skills install @ifeychan702/kids-english-teacher根據上傳的小朋友英語作業圖片,自動生成一個完整的互動教學網頁(HTML),包含:單字發音、句子跟讀評分(麥克風)、寫作練習、Phonics 和對話練習。Use when: (1) 用戶上傳小朋友英語作業照片, (2) 用戶說「幫小朋友做英語學習頁」, (3) 用戶說「生成教學網頁」, (4) 用戶說「分析這張作業」並希望做成互動頁面。即使用戶只說「幫我做一個學習頁」並附有圖片,也應觸發此技能。NOT for: 純文字英語練習、成人英語學習、非圖片輸入的一般英語問題。
openclaw skills install @ifeychan702/kids-english-teacher用戶上傳一張小朋友英語作業照片,Claude 分析圖片內容,然後生成一個完整的互動 HTML 教學網頁,並返回可下載的文件。
1. 分析圖片 → 2. 提取內容 → 3. 生成 HTML → 4. 輸出文件
每一步都很重要,不要跳過。
仔細看圖片,提取以下信息:
對每道 Writing 題:
根據提取的信息,規劃 5 個版塊:
| 版塊 | 內容來源 | 說明 |
|---|---|---|
| 🐾 單字版塊 | 圖片中的詞彙 | 點擊動物/物品聽讀音 + 數字練習 |
| 🎤 跟讀評分 | 主題相關句子 | 聽→跟讀→麥克風評分 |
| ✏️ 寫作練習 | Writing 題目 | 帶針對性錯誤提示的填空 |
| 🔤 Phonics | 圖片中的目標音 | 找目標音開頭的單字 |
| 🎭 對話練習 | 主題角色 | 選角色→多輪對話 |
按照下面的完整模板生成 HTML 文件。所有內容都要根據圖片替換成實際內容。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>🌟 [主題] English Fun!</title>
<link href="https://fonts.googleapis.com/css2?family=Fredoka+One&family=Nunito:wght@400;700;900&display=swap" rel="stylesheet">
<style>
/* === 完整樣式 - 按主題調整配色 === */
/* 主題色變量:根據場景替換 */
/* 動物園: --primary:#87CEEB 農場: --primary:#90EE90 海洋: --primary:#006994 */
[貼入完整CSS - 見下方 CSS 規範]
</style>
</head>
<body>
[雲朵/背景裝飾 - 按主題調整]
<div class="container">
<div class="title">[主題 emoji] [主題名] English!</div>
<div class="subtitle">[中文副標題] / [英文副標題]!</div>
[星星進度條]
[5個Tab按鈕]
[Tab 1: 單字版塊]
[Tab 2: 跟讀評分版塊 - 含麥克風]
[Tab 3: 寫作練習版塊 - 含錯誤提示]
[Tab 4: Phonics版塊]
[Tab 5: 對話練習版塊]
</div>
<script>
[完整JS邏輯]
</script>
</body>
</html>
必須包含以下樣式組件,按主題調色:
/* 1. 背景和裝飾 */
body { background: linear-gradient(180deg, [天空色] 0%, [淺天空色] 38%, [草地色] 38%, [深草地色] 100%); }
.cloud { /* 飄動雲朵 */ animation: drift linear infinite; }
.sun { /* 太陽/月亮/主題裝飾 */ position: fixed; top:20px; right:30px; }
/* 2. 星星進度條 */
.star { filter: grayscale(1); transition: all .3s; }
.star.lit { filter: grayscale(0); animation: starPop .4s ease-out; }
.progress-wrap { background: rgba(255,255,255,.3); border-radius:50px; height:9px; }
.progress-bar { background: linear-gradient(90deg,#f97316,#fbbf24); transition: width .4s; }
/* 3. Tab 導航 */
.tab-btn { background: rgba(255,255,255,.35); color:white; border-radius:50px; font-family:'Fredoka One',cursive; }
.tab-btn.active { background: white; color: #0369a1; }
/* 4. 卡片容器 */
.card { background: #FFFEF0; border-radius:22px; box-shadow: 0 8px 0 rgba(0,0,0,.12); }
/* 5. 單字卡片 */
.vocab-card { border-radius:14px; cursor:pointer; transition: all .2s; }
.vocab-card:hover { transform: translateY(-4px) scale(1.05); }
.vocab-card.playing { border-color: #f97316; }
/* 6. 跟讀按鈕 */
.rec-btn.idle { background: linear-gradient(135deg,#ec4899,#db2777); }
.rec-btn.recording { animation: recPulse .7s ease-in-out infinite; }
/* 7. 分數顯示 */
.score-bar { transition: width .6s ease; border-radius: 50px; }
/* 8. 對話氣泡 */
.msg.animal .msg-bubble { background: linear-gradient(135deg,#ede9fe,#ddd6fe); }
.msg.child .msg-bubble { background: linear-gradient(135deg,#d1fae5,#a7f3d0); }
/* 9. 答對/錯反饋 */
.feedback.ok { background:#dcfce7; color:#166534; border:2px solid #86efac; }
.feedback.bad { background:#fee2e2; color:#991b1b; border:2px solid #fca5a5; }
/* 10. 彩帶慶祝 */
.confetti-piece { animation: confettiFall 1.5s ease-in forwards; }
必須實現以下功能模塊:
let starCount = 0, MAX_STARS = 10;
function addStar() { /* 點亮下一顆星,集滿觸發 celebrate() */ }
function celebrate() { /* 生成彩帶 confetti */ }
function speak(text, rate=0.82, callback) {
const u = new SpeechSynthesisUtterance(text);
u.lang = 'en-US';
u.rate = rate;
speechSynthesis.speak(u);
}
// 慢速版本:rate=0.6
// 句子版本:rate=0.78
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
function scoreText(heard, target) {
// 詞語匹配算法:模糊匹配,適合小朋友發音
// 返回 0-100 分
}
function startRecording(idx, targetText) {
// 開始錄音 → 識別 → 調用 showScore()
// 按鈕狀態:idle → recording → idle
}
function showScore(idx, score, heard, target) {
// 顯示:分數、進度條、綠色=說對/紅色=漏掉、聽到的文字
// 85+ 分:🌟 太棒了 + addStar()
// 65-84:👍 很好
// 40-64:💪 再試試
// 0-39:🎤 說大聲點
}
function checkAnswer(questionId) {
// 1. 取得用戶輸入
// 2. 對比正確答案(支持多種正確寫法)
// 3. 檢測常見錯誤(從圖片分析的錯誤)
// 4. 顯示針對性反饋
// 5. 答對 → addStar() + speak(正確句子)
}
// 數據結構
const dialogues = {
[角色名]: [
{ who:'animal', en:"...", zh:"..." },
{ who:'child', opts:[
{ en:"...", zh:"...", ok:true },
{ en:"...", zh:"...", ok:false, msg:"提示..." },
]},
// ...
]
};
function runStep() { /* 驅動對話流程 */ }
function selectReply(opt, btn) { /* 處理選項,答對繼續,答錯給提示 */ }
必須包含:
對每道題:
// 正確答案(支持多種寫法)
const correct = ['正確答案1', '正確答案2'];
// 從圖片分析到的小朋友錯誤 → 特定提示
if (val.includes('常見錯誤片段')) {
// 顯示針對性提示,用中英文解釋
}
提示框格式:
<div class="error-note">
💡 你寫了 "[小朋友的錯誤]" — [用中文解釋錯在哪]!<br>
[英文]的[複數/時態/拼寫]規則:<b>[正確寫法]</b>!
</div>
/mnt/user-data/outputs/[主題]-english-lesson.htmlpresent_files 工具返回文件給用戶生成 HTML 前確認:
idle / recording / processing 三種狀態speak() 朗讀正確答案.no-mic banner)zoo-english-lesson.html,不要用 learn.html)| 場景 | 天空色 | 草地色 | 強調色 | 裝飾 |
|---|---|---|---|---|
| 動物園 | #87CEEB | #5DBB63 | #f97316 | ☀️ 太陽 |
| 農場 | #FFF4B2 | #8BC34A | #f59e0b | 🌻 向日葵 |
| 海洋 | #E0F7FA | #006994 | #0284c7 | 🌊 海浪 |
| 學校 | #F3E5F5 | #C8E6C9 | #7c3aed | 📚 書本 |
| 家庭 | #FFF8E1 | #DCEDC8 | #ec4899 | 🏠 房子 |
| 超市/食物 | #FFF3E0 | #E8F5E9 | #16a34a | 🛒 購物車 |
Fredoka One,正文用 Nunito(從 Google Fonts 加載)