TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
A study assistant that helps you think it through.
EducationTypeScript · PythonGitHub @kentyungeOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.