尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 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.