内容
[](./LICENSE)
Lesson Hollow 是一个家庭教育课程规划器和每日学习跟踪器。家长(或自主学习者)或导入课程,注册玩家(学生),并使用按节奏排列的每日任务列表。它是一个 [Next.js](https://nextjs.org) 应用,支持 [Supabase](https://.com) 作为后端,并部署在 [Fly.io](https://fly.io) 上。
在线访问 **[lesson.com](https://lessonh)**。
**为什么存在:** 我创建了它,以便课程可以节奏排列的每日列表,而不是重新规划的静态大纲。、CSV课程格式和代理MCP表面都采用MIT开源许可,和开发者检查、自行托管和贡献。
**快速试用**
1. 使用在线应用:[lessonhollow.com](https://lessonhollow.com)
2. 在 [`public/curriculums/`](./public/curriculums/) 目录中浏览示例课程
3. 按照 [本地开发](#本地开发) 中的步骤在本地运行
## 功能
- **课程和任务** — 手动创建课程或从CSV导入;每个任务都是一个“阅读/观看/聆听/完成”操作,附带可选的资源链接。
- **玩家和注册** — 将一个或多个玩家(学生)注册到课程中,设置开始日期和节奏;应用将从那里安排每日任务列表。
- **今日和日志** — 具有时区感知的每日任务列表和每个玩家的活动日志。
- **发现** — 用于浏览和导入的公共课程登陆页面 **MCP服务器** —的 [模型上下文协议](https://modelcontextprotocol.io) 端点,允许代理以编程方式创建课程、注册玩家和驱动每日列表。
## 技术栈
| 层级 | 选择 |
|---|
| 框架 | Next.js 16(应用路由器,独立输出),React 19,TypeScript |
| 样式 | Pico CSS,Lucide图标 |
| 状态 | Zustand |
| 后端 | Supabase(Postgres + Auth);`supabase/migrations/`中的模式 |
| 支付 | Zaprite(比特币,闪电网络,信用卡) |
| 图片 | fal奖励图像生成) |
| 邮件 | AWS SES |
| 托管 | Fly.io(Docker,蓝绿部署) |
## 本地开发
此仓库附带一个Nix + dir环境(`flake.nix`.envrc`)。安装 [direnv](https://direnv.net) 后,运行 `dir` 即可进入具有正确链的Shell。无需使用Node 22。
```bash
cp .env.example . # 填写您自己的密钥(参见下表)
npm install run dev # http://localhost:3000
```
其他
```bash
npm run build # 生产环境构建(首先运行博客文章验证器)
npm # eslint
npm test单元测试
npm run test:e2e #到端测试
```
### 环境变量
复制`.env.example`到`.env.local`并填写您自己的值。`NEXT_PUBLIC_*暴露给浏览器;其余限服务器使用。
| 变量 | 目的 |
|----------|---------|
| `NEXT_PUBLIC_SUPABASE_URL` / `NEXT_PUBLIC_SUP_ANON_KEY` |项目URL + 可公开的匿名密钥 |
| `SUPABASE_SERVICE_ROLE_KEY` | 服务器端Supabase访问 |
| `SUPABWT_SECRET` | 验证MCP API密钥身份验证 |
| `NEXT_PUBLIC_APP_URL` / `_SITE_URL` | 应用/URL(重定向, |
| `ZAPRITE` / `ZAPRITE_WEBHOOK_SECRET` | | `FAL_KEY` | fal.ai奖励图像生成 |
| `API_KEY_ENCRYPTION_KEY` | 用于加密存储的fal.ai密钥的AES-256-GCM32字节十六进制) |
| `AWS_SES_REGION` / `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` / `AWS_SES_FROM_EMAIL` | 反馈通知电子邮件 |
| `ADMIN_PLAYER_AUTH_USER_ID` | 来自此玩家的课程自动发布(留空以禁用) |
| `NEXT_PUBLIC_GOOGLE_SHEETS_TEMPLATE_URL` | 用于CSV模板的公开“复制”链接 |
| `NEXTA_MEASUREMENT_ID` | Google Analytics 4空以禁用) |
| `` | 端到端测试账户凭证 |
## 课程CSV课程可以从CSV导入。现文件位于 [`urriculums/`](./public/curriculums/) 目录中;完整规范在 [`docs/csv-format-gt2.mddocs/csv-format-gt2.md) 中。一个空白模板public/lesson-hollow-template.csv`](./public/lesson-hollow-template.csv) 中。
## 部署
推送到 `main`会触发GitHub Actions工作流,在 [`.github/workflows/deploy.yml`](./.github/workflows/deploy 中,该工作流会清理蓝绿机器,并使用 `lessonhollow` 运行ctl deploy --remote-only。所需的唯一仓库秘密是_API_TOKEN`。公共 `_*` 构建参数通过 `fly.toml` 嵌入;所有运行时秘密都作为Fly秘密管理,而不是在这个仓库中。
## 贡献
参见 [CONTRIBUTING.md](./CONTRIBUTING.md),包括如何贡献课程CSV。
## 许可证
[MIT](./LICENSE) © 2026 Sally Cole