TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A voice-first study assistant for the kids. It guides their thinking with hints, worked examples, and visuals, and doesn't hand over answers. Version 1 focuses on math.
say) and on-screen content (show): typeset math, tap-to-reveal steps, practice problems that check answers, number lines, fraction bars, graphs, and a line-by-line review of their work that highlights the first step that went wrong.A Raspberry Pi with a camera above the desk and a small touchscreen. Kids tap their name, enter their PIN, and work on paper. A low-cost model reads each new line from the photo, and a math engine (src/lib/math-check.ts, no AI) checks whether each line follows from the one above, in milliseconds. The tutor is called only for mistakes, lines the engine can't judge (inequalities, word problems; at most every 12 seconds), or Check now, and the screen shows the page with a ✓ beside lines that are right and a ? on the first one to look at again. The same conversation shows on the Chromebook. Setup guide: pi/README.md. The installer is served by the app at /pi/install.
Same setup as Woodside Wednesday.
| Layer | Choice |
|---|---|
| App | Next.js 16 (App Router, React 19), Tailwind v4, shadcn/ui |
| API | Hono at /api/v1 (src/server/api/app.ts) |
| Database | Postgres via Drizzle: Neon in production, embedded PGlite locally |
| Auth | Better Auth: parents by email link/code, kids by username + PIN |
| AI | Claude API: claude-opus-5-5 tutor, claude-haiku-5-5 answer check |
| Voice | Browser speech recognition + browser voices (free); ElevenLabs optional |
| Hosting | Vercel Hobby (free) |
TUTOR_MODEL=claude-sonnet-5-5. The parent page shows an estimate for the month to date. Set a monthly spend limit in the Anthropic Console.npm install
cp .env.example .env.local # set BETTER_AUTH_SECRET and PARENT_EMAILS
npm run db:migrate # creates ./.pglite
npm run dev
Open http://localhost:3000, choose Parent, and enter your email. The sign-in code prints in the terminal. Add a kid, then sign in as them in another browser.
Without ANTHROPIC_API_KEY the tutor runs in demo mode: canned replies that show off each visual tool.
| Script | What it does |
|---|---|
npm run dev | Dev server |
npm test | Service tests (in-memory Postgres, fake Claude) |
python3 -m unittest discover tests/pi | Desk station camera logic |
npm run typecheck / npm run lint | Types / ESLint |
npm run db:generate | New migration after editing src/db/schema.ts |
.env.example: DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL (your Vercel URL), PARENT_EMAILS, ANTHROPIC_API_KEY, and optionally RESEND_API_KEY/EMAIL_FROM and the ElevenLabs keys.vercel-build script runs migrations first.ELEVENLABS_API_KEY, then on a kid's settings page choose Natural voice and paste a voice ID from the ElevenLabs library. Use Hear it to audition. If ElevenLabs fails, it falls back to the browser voice.src/server/tts.ts and a provider option in src/server/family.ts.src/server/tutor/prompt.ts: the tutor's rules (hint ladder, personality, writing, staying on topic).src/lib/tutor-reply.ts: the reply schema (say + show blocks) used for structured output and rendering.src/server/tutor/index.ts: sessions and turns. The system prompt is frozen per session and history is append-only. Claude checks that earlier context hasn't changed between turns, so don't edit stored turns or the stored system prompt. Settings changes apply to new sessions.src/server/tutor/engine.ts: the Claude calls (tutor + answer check). demo.ts is the canned demo.src/components/tutor/: renderers for each visual block. To add a new visual, add it to the schema, describe when to use it in the prompt, and add a renderer.