# 蛙课堂背单词 · 源码说明（GPL-3.0 合规）

本目录是「蛙课堂网站 → **背单词**」栏目所运行的**完整对应源码**。

---

## 一、为什么必须放这个

背单词栏目是在开源项目 **qwerty-learner** 基础上修改而来的，该项目以 **GNU GPL-3.0** 授权。

GPL-3.0 的要求是：**任何把这个程序（含修改版）分发出去的人，必须同时提供完整的对应源码。**
本站对公网开放，访问者的浏览器会下载本栏目的全部前端代码 —— 这构成分发，所以源码放在这里。

同目录的 `LICENSE` 是 GPL-3.0 许可证全文。

---

## 二、上游信息

| 项 | 值 |
|---|---|
| 项目 | qwerty-learner |
| 仓库 | https://github.com/RealKai42/qwerty-learner |
| 许可 | GNU General Public License v3.0 |
| 本副本基于的提交 | `1182426`（"Merge pull request #1111 from RealKai42/fix/update-redbook-qrcode"） |

---

## 三、相对上游做了哪些修改

依 GPL-3.0 第 5 条，修改版需标明改动，逐条列出：

1. **品牌与外观**：改名「蛙课堂背单词」，替换 logo、favicon 与整站配色（自建"明快教育风"设计 token）
2. **移除埋点**：删除 mixpanel、Vercel Analytics、Google Analytics 的全部外发统计代码
3. **移除移动端落地页**：删除「窗口变窄就跳转移动端」的行为及相关路由
4. **新增学习模式**：
   - 新增 `/recall` **选词记忆**页（先看词卡、再答双向选择题），取代原 `/quiz`
   - 新增 **「先认后拼」门禁**：拼写练习只包含在选词记忆里**答对过**的词
5. **改造记忆调度**：新增固定间隔版艾宾浩斯调度（1 / 2 / 4 / 7 / 15 天）、
   「同一天同一个词只推进一次」规则
6. **新增本地存储**：Dexie / IndexedDB 新增 `memoryRecords` 表存记忆状态，数据库版本升到 v5
   （含老数据迁移：把 `recalledDate` 回填为首次学习日期）
7. **界面重做**：今日页、打字页、选词记忆页、词库页、统计页、错词本、设置页全部重写
8. **新增设置页**：加入「学习计划」分组（每日新词量 / 每日复习上限，上游没有界面可调）
9. **路由方式**：网页版构建改用 `HashRouter`（桌面版仍用 `BrowserRouter`）
10. **词库替换**：换成自定义的 24 本词库（CET-4 / CET-6 / 编程英语），数据来源见下

---

## 四、词库数据的来源与版权（请注意）

| 来源 | 说明 |
|---|---|
| CET-4 / CET-6 | 来自开源词表项目 **kajweb/dict**。该项目**没有 LICENSE 声明**，据信数据抓取自有道词典 |
| 编程类（Python / JS / Node / SQL） | 来自上游 qwerty-learner 仓库自带的词表 |

**这些词库数据的授权状况不明确**，目前仅用于学习用途。
如果要商用或大规模分发，请自行更换数据源或取得授权。

另外，单词发音走的是**有道在线接口**（`dict.youdao.com/dictvoice`），属于非官方接口，
可能随时失效或变更。

---

## 五、怎么从源码构建

见同目录 `如何构建.md`。
