96SEO 2026-08-02 16:41 0
女儿上幼儿园之前。我跟老婆说得很坚定:幼儿园阶段不卷,快乐教育。结果话说得很轻松,真正到上学看到其他同学也报了没忍住给她报了英语外教班。老实说,
上课本身倒没什么问题。真正让我头疼的是课后复习。每次上完课,老师都会在群里发当天的学习内容。有单词、有句型、有字母,还有课堂视频和家庭作业。从比如来看,

📆 LG1————————————👩🏫教学目标
一、复习Student book—《Classroom》. 主要词汇+句型
window 🪟door 🚪desk 桌子chair 🪑book 📖
二、学习《Super A娱乐》P12 Letter Cc❤️学习Letter Cc 字母❤️学习关于字母c的单词
1️⃣cat 猫🐱 2️⃣cap 帽子🧢 3️⃣cake 蛋糕🍰 4️⃣car 汽车🚗❤️相关句型学习三、课前口语对话四、书写练习————————————
🌞:1️⃣口语作业💬朗读《Super A娱乐》P12关于字母c的单词————————————今天课堂宝贝们都很活跃👏 请回家之后多听音频磨耳朵进行复习哟!❤️请各位宝贝一定要完成作业噢💕💕
从或者来看,
📆 ————————————👩🏫教学目标.Free Talk:课前问答.复习字母A所学内容.❤️学习字母B这些内容—字母B的学习—初步识别字母B的样子—关于字母b的主要单词学习
1️⃣bee 蜜蜂🐝 2️⃣ball 球 3️⃣balloon 气球🎈 4️⃣bear 熊🐻拓展词汇:box 📦 bike 🚴—句型学习:B is for __—句型理解性输入:
I see a bee. I have a ball. The balloon is big. The bear is brown. 书写练习————————————
🌞:口语作业💬听音频 朗读《Super A娱乐 book》P8————————————今天课堂宝贝们都很活跃👏 请回家之后多听音频磨耳朵进行复习哟!怎么说呢,❤️请各位宝贝一定要完成作业噢💕💕
老师整理得其实已经很详细了但它更像一份“课堂记录”。并不是一个适合5 岁孩子反复练习的产品。
cat/cap/cake/car 四个单词,却必须把整段课堂视频从头到尾播放一遍;我最开始的复习方式很朴素:找到老师发的视频。点开,再拉回到要复习的位置,播一遍,停下来跟读,再继续。一两次还好,次数多了就发现效率极低。
我没有一上来就想做打卡、积分、排行榜,也没有打算造一个儿童版百词斩。我先把需求压到最小,
老师每次发来的内容虽然很长。但真正需要反复复习的主要只有两类:
单词 + 句子
像“教学目标”“课堂小结”“书写练习”“请各位宝贝完成作业”这些对家长有用,却不应该出现在孩子的复习卡片里。
我把 App 的主要流程梳理为:
老师发来课堂内容 → 提取英文单词和句子 → 补充中文、Emoji 或图片 → 逐张播放并朗读 → 记录当天复习进度
我补充了几个实际使用时绕不开的要求:
每节课学的主题不同。今天是 Letter B。下一节可能是 Letter C,再下一节又换成水果。内容不能混成一个越来越长的单词本,而要按日期创建“复习日”。切换日期后继续上一次的进度。其实,
每张卡片只显示一个字母、单词或句子。并保留英文、中文、图片和发音。孩子只需看当前内容、听发音,接下来点“下一个”。
页面切换到新卡片后自动朗读。也可以开启“学习模式”:朗读当前内容 → 停顿几秒 → 自动跳到下一张。
Emoji 是优先考虑方案:
- 不需要下载
- 不占存储
- 加载快
如 cat 🐱,bee 🐝,chair 🪑…老实说,
但 Emoji 并不能覆盖所有单词。所以还要支持联网查图还有本地上传自定义图片。
If data only lives in localStorage。switching phone loses everything. 所以必须配备轻量级云端存储,实现全家共享。
Vue Vite TypeScript Element Plus Supabase GitHub Pages
Add a review day 时我保留两份数据:
teacherText: 老师完整原文,仅用于以后核对;generatedContent: 用于生成卡片的单词/句子。This separation prevents “教学目标”“家庭作业”等干扰信息进入题库。老实说,
// 示例结构化文本
Words
bee 蜜蜂🐝
ball 球
balloon 气球🎈
bear 熊🐻
Sentences
B is for __
I see a bee.
I have a ball.
The balloon is big.
The bear is brown.
// 简化解析函数示例
export function parseReviewText {
let currentCategory;const parsed = rawText.split.flatMap(line => {
const heading = line.trim.replace;if $/i.test) { currentCategory = "word";return,}
if $/i.test) { currentCategory = "sentence";return,}
return parseReviewLine.map(item => ({
...item。category: currentCategory || item.category,}));}),return assignContextualEmojis);}
function buildReviewItem{
const explicitEmoji = extractReviewEmoji;return {
至于id,createReviewId,english,chinese。category:inferCategory,emoji:explicitEmoji||pickEmoji
};}
If built‑in emoji cannot convey meaning accurately,card provides an image selector that pulls pictures from Openverse first and falls back to Wikimedia Commons.
async function fetchReferenceImages{
if{
try{ return await fetchOpenverseReferenceImages;}
catch{ return await fetchCommonsReferenceImages;}
}
return fetchCommonsReferenceImages;}
If both public sources fail,users can upload ir own picture;client compresses it to ≤720 px on long side and converts to WebP before storing in Supabase Storage.
const utterance = new SpeechSynsisUtterance;utterance.lang = 'en-US';utterance.pitch = 1;utterance.rate = 0.9;// 稍慢更适合跟读
window.speechSynsis.speak;
This free solution eliminates额外付费 TTS 服务,同时满足重复聆听需求。
localStorage,guaranteeing offline usability.`revision` 字段实现乐观锁,同步冲突时提示使用者先拉取当前版本再保存。I originally tried to host both front‑end and backend on Cloudflare . Although free tier looked attractive。service proved unstable in my network environment – pages sometimes failed to load while functions returned timeouts.
The uncertainty cost more time than solving any actual bug,so I switched data layer to Supabase:
Because GitHub Pages serves site under a repository sub‑path,Vite’s base must be set accordingly:
ts
const base = process.env.VITE_DEPLOY_TARGET === 'github-pages'
'/vancy-learn-english/'
: '/';说起来,
Resulting architecture
GitHub Pages ←→ Vue 静态页面
Supabase PostgreSQL ←→ 保存复习内容 & revision 控制
Supabase Storage ←→ 保存自定义图片文件
Supabase Edge Function←→ 前端统一读写入口
Even with occasional access hiccups in China。app always falls back to local cache so daily review never被阻断。
"打开页面后孩子看到的是当前复习日的一张大卡片。中间是 Emoji 或参考图片,下方是英文和中文。按理说,卡片切换时自动朗读,也可以进入学习模式。让它按照设置好的间隔自动轮播。" — 父亲视角描述体验感受。
对比之前 以前想让女儿复习 Letter B,需要打开群聊 → 找视频 → 拖动进度条 → 手动暂停 → 跟读,每一步都可能被孩子分心。现在只要打开对应日期页面:
txt
bee → ball → balloon → bear
I see a bee. I have a ball...
“一键播放+自动轮播”。没有积分程序,没有复杂排行榜,只是把原本费时费力的操作变成孩子愿意自己点击几下就能完成的小任务。
完成这个 App 后我越 来越确信。好软件不一定功能最多,而是 精准解决使用者痛点。对于商业产品我们关注规模与增长,但个人工具只需 省掉每天十分钟低效重复操作 就已经足够有价值。
关键不是 Vue / Supabase / AI 某个技术点,而是先把 痛点说清楚 :
txt
我不需要另一套英语课程。我只需要把老师今天教的单词和句子,变成孩子愿意反复听的卡片。
需求收敛后实现自然简洁。话说回来,AI 降低了“只能为自己服务的软件”开发成本。而我的前端经验让它从原型快速迭代成为长期可用、跨设备同步且易维护的小工具。
再看项目地址,github.com/mjsong07/vancy-learn-english/…<\/a>\ 再看在线地址。
完美不是无可增添,而是无可删减。<\/b\
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback