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 full-stack web app to prepare for the official HSK Chinese proficiency exams. It combines an FSRS spaced-repetition scheduler for vocabulary review and an LLM-powered written-expression grader (Anthropic Claude) that returns structured, actionable corrections.
Built as a real study tool and an engineering portfolio piece — decoupled FastAPI backend, typed Next.js frontend, streaming LLM integration, CI, and infra-as-code, all running on free tiers.
Tech: FastAPI · SQLAlchemy 2 · Alembic · Pydantic v2 · Postgres · JWT · Anthropic Claude (SSE streaming) · Next.js 16 · React 19 · TypeScript · TanStack Query · Tailwind v4 · Vitest · pytest · GitHub Actions
| Area | What it demonstrates |
|---|---|
| Spaced repetition | Integration of FSRS (modern ML-based scheduling) behind a clean service boundary, replacing a naive bucket heuristic. |
| LLM engineering | Claude Haiku 4.5 with prompt caching, structured JSON output, and token-by-token SSE streaming through FastAPI → consumed in the browser via a custom fetch + ReadableStream reader. |
| API design | Versioned REST API, auto-generated OpenAPI/Swagger, stateless JWT auth, per-user daily quota enforcement as a reusable dependency. |
| Data layer | SQLAlchemy 2.x models, Alembic migrations (baseline-stamped against an existing production DB), Postgres in prod / SQLite in tests. |
| Frontend UX | Optimistic UI on the quiz (next card renders in <50 ms, persistence happens in the background with retry), mobile-first responsive design, PWA-installable. |
| Delivery | GitHub Actions CI (pytest + vitest + build), render.yaml infra-as-code, zero-cost deployment topology. |
┌────────────────────────┐ HTTPS / JSON ┌──────────────────────────┐
│ Next.js 16 (Vercel) │ ───────────────────────▶ │ FastAPI (Render) │
│ - App Router, RSC │ Bearer JWT │ - Pydantic v2 schemas │
│ - TanStack Query │ ◀─────────────────────── │ - SQLAlchemy 2 + Alembic│
│ - Optimistic quiz UI │ SSE (text/event-stream) │ - FSRS scheduler │
│ - Tailwind v4 │ │ - Claude (prompt cache) │
└────────────────────────┘ └────────────┬─────────────┘
│
┌────────────▼─────────────┐
│ Postgres (Neon) │
└──────────────────────────┘
The repo is a monorepo:
backend/ FastAPI service (Python 3.12)
app/
api/v1/ auth, quizzes, srs, mastery, expression, account
services/ srs_service, llm_service, expression_service, ...
models/ SQLAlchemy ORM
schemas/ Pydantic v2 request/response models
alembic/ migrations (0001 baseline)
data/ HSK 3.0 (2025 syllabus) and HSK 2.0 (2012 lists) vocabulary, levels 1-5 + writing subjects
tests/ pytest (Anthropic fully mocked)
frontend/ Next.js 16 app (TypeScript)
app/ routes (landing, auth, comprehension, expression, account)
components/ quiz, expression, charts, mastery, ui primitives
lib/ typed API client, auth context, SSE consumer, FSRS hooks
tests/ Vitest unit tests
Prerequisites: Python 3.12, Node 20+, a Postgres URL (or use the SQLite fallback), an Anthropic API key.
cd backend
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -e ".[dev]"
cp .env.example .env # fill HSK_DATABASE_URL, JWT_SECRET_KEY, ANTHROPIC_API_KEY
alembic upgrade head # creates the schema on a fresh DB
uvicorn app.main:app --reload --port 8000
API docs: http://localhost:8000/docs
cd frontend
npm install
cp .env.local.example .env.local # NEXT_PUBLIC_API_URL=http://localhost:8000
npm run dev
# Backend — pytest, no network (Anthropic mocked)
cd backend && pytest
# Frontend — Vitest unit tests
cd frontend && npm test
CI runs both suites plus a production build on every push and PR (.github/workflows/tests.yml).
Backend on Render (free tier, kept warm via a 10-min cron ping), frontend on Vercel, database on Neon — total recurring cost ≈ €0. Full step-by-step in DEPLOYMENT.md, with render.yaml as infra-as-code.