TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Premium Mandarin and China-context learning for senior professionals, executives, and serious learners.
EducationTypeScript · JavaScriptGitHub @shengdabaiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Learn Chinese by doing real-world missions — order coffee, book a hotel — via AI conversation with pinyin, gloss & voice. Next.js + TS.
Translation pending
Taken from the repository README
Loading the full README.
Read the full 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。