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。