TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Entraînement HSK personnel avec SRS et correction d'expression écrite par IA.
Translation pending
EducationTypeScript · PythonGitHub @VasicIvannOnlineOwner 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 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.