TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Learn Chinese by doing real-world missions — order coffee, book a hotel — via AI conversation with pinyin, gloss & voice. Next.js + TS.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Learn Chinese by doing real-world missions — order coffee, take a taxi — via AI conversation with pinyin, gloss & voice. Next.js + TS.
This repository supports productized learning workflows: diagnostic input, guided practice, review loops, and clearer handoff between learner, teacher, and software.
mainPUBLICsrcpublicdocs.env.exampleLICENSEMISSION_BUILD_LOG.mdREADME.mdSECURITY.mdcapacitor.config.tsiosnext.config.tspackage.jsonnpm ci # installs exactly what package-lock.json pins (official registry only)
cp .env.example .env.local # fill AI_API_KEY etc.; keep USE_RULE_ENGINE=true for an offline run
npm run dev # http://localhost:3000
npm test # node:test — request budgets, quota store, AI chat path (recorded model), TTS error body
npm run build # the same production build Vercel runs
npm is the only package manager for this repo: package-lock.json is the single lockfile, and CI fails if a pnpm-lock.yaml / yarn.lock / bun.lock appears, because Vercel chooses its installer from whichever lockfile it finds and would otherwise skip the audited versions.
Node 22 or newer (CI uses 22). The app works without a model key: /api/chat and /api/debrief fall back to the rule engine and answer with aiPowered: false.
Every route that spends provider capacity (/api/chat, /api/debrief, /api/tts) checks a per-client and a total budget before calling the model or Edge TTS (src/lib/server/request-budget.ts). The counters live in a quota store (src/lib/server/quota-store.ts):
| Store | When | Behavior |
|---|---|---|
| Upstash Redis (REST) | UPSTASH_REDIS_REST_URL + UPSTASH_REDIS_REST_TOKEN set (the Vercel KV names KV_REST_API_URL / KV_REST_API_TOKEN also work) | shared across all serverless instances; over budget → 429; store unreachable or malformed reply → 503 (fail closed, distinct from a real limit so monitoring can tell them apart) |
| Misconfigured | only one of the two variables set | every provider route answers 503 and GET /api/health reports "quotaStore": "misconfigured" — a half-configured deploy fails loudly instead of silently losing the shared budget |
| Memory | no store configured | per-instance counters only; GET /api/health reports "quotaStore": "memory" so this is visible, not silent |
Production should run with the shared store: create a Redis database in the Vercel Marketplace (Upstash, the free tier is enough), add the two variables to the project's Production environment, redeploy, then confirm GET /api/health returns "quotaShared": true.
Production builds only from main through the GitHub → Vercel integration; do not run CLI production deploys from a feature branch. If a CLI deploy is ever needed, name the target explicitly:
vercel link --project chinese-mission --scope <team-slug> # never a bare `vercel link`
vercel --prod
Post-deploy smoke, both must pass before a release counts as done:
GET https://chinese-mission.vercel.app/api/health → ok: true, sha equals the merged commit, quotaShared: true.POST /api/chat with {"missionId":"m1","userInput":"你好","session":{"currentState":"start","slotsFilledMap":{},"turns":[],"hintLevel":0}} → 200 and aiPowered: true.Roll back within 10 minutes: Vercel → Project → Deployments → pick the previous Ready production deployment → Promote to Production (or vercel rollback <deployment-url> --scope <team-slug>). There is no database, so nothing to migrate back; client state lives in the browser's localStorage.
Key rotation (whenever a model key was pasted anywhere outside the secret store): create a new key at the provider, update AI_API_KEY in Vercel → Settings → Environment Variables (Production), redeploy, then revoke the old key and note the date in MISSION_BUILD_LOG.md.
Actively developed and live in production at chinese-mission.vercel.app. Web app is fully functional; iOS build (Capacitor) is wired up. Built in public — feedback and ideas welcome.
If this resonates, the best way to support it is to ⭐ Star this repo and Follow @shengdabai — I build AI + Chinese-teaching tools in public, and stars genuinely help me decide what to build next.
More tools in the same family:
MIT — see LICENSE for details.
学中文,靠"做事",不靠背单词卡。 点咖啡、打车、交朋友——每个"任务"都是一件真实的事,你必须真的用中文跟 AI 对话才能完成,全程配拼音、逐词注释和语音。
English | 中文
大多数 App 教的是"关于中文的知识"——孤立的词、语法表、连续打卡。可一旦真站在咖啡馆里,你还是会愣住,因为你从没在真实压力下"用过"它。
Chinese Mission 反其道而行。你被放进一个有目标的场景,唯一的出路就是把话说清楚。AI 扮演咖啡师、前台、新认识的朋友;你边读边说,卡住时用自适应提示解围,结束后拿到一份复盘——哪里做得好,哪里要改。
由一位拥有 6000+ 学员的中文老师打造,围绕"人真正破冰一门语言"的方式设计。
一个任务驱动的沉浸式中文学习平台:6 组真实场景下的 20 个任务、一个 AI 对话伙伴,以及一整套脚手架(拼音、注释、提示、语音),让初学者从第一天起就能尝试真实对话。支持浏览器运行,并通过 Capacitor 封装为原生 iOS App。
环境要求: Node.js 18+ 与 npm(或 bun)。
# 1. 安装依赖
npm install
# 2. 配置 AI API(可选,见下)
cp .env.example .env.local
编辑 .env.local:
AI_API_KEY=your-api-key-here
AI_BASE_URL=https://api.openai.com/v1
AI_MODEL=gpt-4o-mini
USE_RULE_ENGINE=false
没有 API Key?没关系。应用开箱即用内置规则引擎。即使填了 Key,也可设
USE_RULE_ENGINE=true强制使用规则模式。
# 3. 启动开发服务器
npm run dev
# 生产构建
npm run build
| Command | Purpose |
|---|---|
npm install | Install project dependencies. |
npm run dev | next dev --webpack |
npm start | next start |
npm run build | next build |
.env.example file exists, treat it as documentation only; never commit filled-in .env files.Repository Hygiene workflow is a lightweight guardrail, not a replacement for product-specific tests.Maintained by Tony Sheng. This README is written as a business-facing handoff: it should help a future collaborator, client, or reviewer understand why the repository exists, how to inspect it, and what must be true before it is reused or shipped.
MIT 协议——详见 LICENSE。