TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻譯準備中
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗An interactive review, quiz and test platform for the classroom. It supports many classes and unlimited assignments, grades automatically, and lets students progress section by section.
The platform comes preloaded with Economics Unit Review — Markets, Circular Flow, Supply & Demand (40 questions), ready for you to inspect and publish.
| Guide | For |
|---|---|
| docs/SETUP.md | Putting the site online (step by step, no coding) |
| docs/TEACHER_GUIDE.md | Using it every week: classes, questions, assignments, grading |
| docs/question-template.csv | Spreadsheet template for importing questions |
You need Node.js 20 or newer (the "LTS" download). Then, in a terminal inside this folder:
npm install
npm run dev
Open http://localhost:3000/teacher. On first visit you'll create your teacher account (no setup code is needed locally). Your data is stored in a .pfl-classroom folder in your home directory; nothing else needs to be installed.
Student join page: http://localhost:3000. Use the code shown after you publish an assignment.
| Piece | Choice | Why |
|---|---|---|
| App | Next.js 16 + TypeScript | One codebase for pages and the server API; huge community; free hosting on Vercel |
| Styling | Tailwind CSS | Consistent, accessible design without extra libraries |
| Database | PostgreSQL via Drizzle ORM | Reliable, standard SQL with real constraints and transactions. In production it uses Neon (free tier) or any Postgres. Locally it uses an embedded Postgres (PGlite), so there's nothing to install. |
| Hosting | Vercel | Connect GitHub and every push deploys. Free tier is plenty for a classroom. |
| Teacher auth | Built-in email + password (bcrypt, httpOnly session cookies) | No extra service to configure; works offline locally |
| Short-answer AI (optional) | Anthropic Claude, server-side only | Off by default; falls back to rubric grading |
Teacher ─┬─ Course (class) ─┬─ Period
│ ├─ Unit
│ ├─ Question (question bank)
│ └─ Assignment ─┬─ Section ── SectionQuestion → Question (editable draft)
│ ├─ AssignmentPeriod
│ └─ AssignmentVersion (frozen snapshot on publish)
│ └─ Attempt (one per student) ─ SectionRun (each try) ─ Response
TEACHER_SETUP_CODE, so a stranger can't claim your new site.$/units on numbers, and small typos on long words. It never fuzzes numbers or opposite words (increase/decrease, upward/downward). You can block specific wrong answers and "accept for everyone" after the fact.| Command | What it does |
|---|---|
npm run dev | Run locally at http://localhost:3000 |
npm test | Grading, scoring, security and full-flow tests (in-memory database) |
npm run test:e2e | Browser tests: teacher setup → publish → students on Chromebook-size screens → results → CSV |
npm run build | Apply database migrations, then build for production (Vercel runs this) |
npm run db:migrate | Apply database migrations to DATABASE_URL |
npm run teacher:reset-password -- [email protected] | Reset a forgotten password |
npm run lint / npm run typecheck | Code checks |
src/
app/ pages + API routes
teacher/… teacher dashboard (classes, bank, builder, results, review, settings)
join/, play/ student join + player
api/ server endpoints (teacher/*, s/[code], join, auth/*)
components/ UI (player/, teacher/, shared ui.tsx)
db/ schema.ts (tables) + connection
lib/
grading/ normalize, objective (FIB/MC/matching), rubric, ai
scoring.ts pass/fail, best/latest/first, section weights
services/ all server logic with ownership checks
seed/ the built-in Economics review
drizzle/ SQL migrations
tests/ unit, integration, e2e
Edit src/db/schema.ts, run npm run db:generate to create a migration in drizzle/, and commit it. Migrations run automatically on the next deploy.