Áleran Vocals
Piano, entrenamiento con micrófono y juegos de oído para alumnos de canto: notas, escalas, afinación, rango vocal, resistencia e intervalos.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Turns your own lecture slides and PDFs into practice questions, including diagram questions with the labels blanked out. Next.js, Supabase, a Python OCR worker and Claude.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Your lecture slides, turned into the exam. FigureQuiz turns a student's own PowerPoint and PDF lecture files into practice questions, including the kind other study tools don't make: diagram questions, where the labels on a lecture figure are blanked out and the student types them back in.
To test it you only need a web browser. It's live at https://figurequiz.online, so there is no code to run: see Try it online. To run the code yourself, see Run it on your own computer.
FigureQuiz runs in the cloud, so there is nothing to install. It works on a computer or a phone.
.pptx or .pdf up to 50 MB (PDFs
can have up to 100 pages). Each page that gets questions uses one credit, and an account can
upload 10 files a month. If you don't have a lecture to hand, use a file from the samples
folder, such as the 4-slide
Brain_Anatomy_Sample.pptx.Things worth trying:
No account? The sample deck is open to everyone, and dropping a file on the home page makes a guest deck with its first 3 questions open.
flowchart TD
A[Upload a .pptx or .pdf] --> B[Worker renders and reads the pages]
B --> C[Labels from the file, or OCR]
C --> D[Haiku: is it a labelled diagram?]
D --> E[Sonnet picks labels to test,<br/>with synonyms and look-alikes]
E --> F[Questions saved;<br/>answer keys stay on the server]
F --> G[Worker draws the blanks]
G --> H[Study, marked instantly]
| Folder | What it is |
|---|---|
web/ | Next.js (App Router, TypeScript) on Vercel: the app, sign-in, question generation and marking |
ingest/ | Python 3.11 worker: reads PPTX (python-pptx) and PDF (PyMuPDF), renders pages with LibreOffice, runs Tesseract OCR and draws blanks with Pillow |
supabase/ | Postgres schema with row-level security on every table, storage, job queues (pgmq) and database tests |
contracts/ | Example payloads that both services' tests check against the shared schemas |
samples/ | Files to upload when trying it out |
It all runs in the cloud, so a student can upload from a phone and nothing has to run on anyone's
computer. The web app is on Vercel, and the database, sign-in, files and queues are on Supabase.
The worker is an Azure Container Apps job (ingest/azure-job.yaml): Azure
checks the queue every 15 seconds, starts a run when an upload is waiting, and scales back to zero
when the queue is empty. GitHub Actions builds its image.
Claude models write the questions, through OpenRouter: Haiku 5.5 for cheap checks and simple text questions, Sonnet 5.5 wherever a wrong answer key would mis-mark a student. The worker never calls a model; it only extracts.
Measured in production on four real lecture decks: 65 questions of six types, about 1.9¢ of AI per deck, ready about 42 seconds after upload. 495 automated tests cover marking, the database's security rules and the worker.
You don't need any of this to test the site. Commands are for macOS or Linux; on Windows, run them in WSL.
This runs with no accounts or keys, and with no internet once it is installed. You need Node 20 or later. From the top folder:
cd web
npm ci
npm run dev
Then open http://localhost:3000/demo. Without the internet the terminal warns that it can't download the fonts, and the page uses plainer ones. Only the sample deck works this way: signing in and uploading need the whole app.
This runs the app, database and worker on your computer. It still needs the internet, because Claude writes the questions through OpenRouter.
You need Node 20 or later, Docker (keep it running), the
Supabase CLI and an
OpenRouter API key with a little credit: a deck costs about 2¢.
Start from the top folder of a fresh copy, because step 2 writes web/.env.local and
ingest/.env.
1. Start the local database, sign-in, file storage and queues. The first run downloads several Docker images.
supabase start
2. Write the settings files.
eval "$(supabase status -o env 2>/dev/null | grep -E '^(API_URL|PUBLISHABLE_KEY|SECRET_KEY)=')"
CALLBACK_SECRET=$(openssl rand -hex 32)
cat > web/.env.local <<EOF
NEXT_PUBLIC_SUPABASE_URL=$API_URL
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=$PUBLISHABLE_KEY
SUPABASE_SECRET_KEY=$SECRET_KEY
INGEST_CALLBACK_SECRET=$CALLBACK_SECRET
SIGNUPS_ENABLED=true
DAILY_BUDGET_USD=1
EOF
cat > ingest/.env <<EOF
SUPABASE_URL=http://host.docker.internal:54321
SUPABASE_SECRET_KEY=$SECRET_KEY
INGEST_CALLBACK_URL=http://host.docker.internal:3000/api/ingest/callback
INGEST_CALLBACK_SECRET=$CALLBACK_SECRET
EOF
Then open web/.env.local in a text editor and add your key as a new line:
OPENROUTER_API_KEY=your-key-here
3. Start the app.
cd web
npm ci
npm run dev
4. Start the worker, in a second terminal, from the top folder. It needs LibreOffice and Tesseract, so it runs in Docker. The first build takes a few minutes.
docker build -t ingest:dev ingest/
docker run --rm --add-host=host.docker.internal:host-gateway --env-file ingest/.env ingest:dev
5. Use it. Open http://localhost:3000/signup, make an account and upload a file, as in Try it online. Accounts here are local, so any email address works.
If the key is missing or wrong, the deck stops with "Writing questions failed", and the first
terminal says why. Your credits aren't touched: fix the key, restart npm run dev, and press
Try again on the deck.
To stop, press Ctrl+C in both terminals, then run supabase stop.
cd web && npx vitest run # after npm ci
cd ingest && uv run pytest # needs uv: https://docs.astral.sh/uv/
supabase db reset && supabase test db # with supabase running; reset empties the local database
samples/Brain_Anatomy_Sample.pptx is the deck behind /demo. Its text is adapted from Johns
Hopkins Medicine's Brain Anatomy and How the Brain Works. Its diagram is Figure 728 of Gray's
Anatomy (1918), public domain, from
Wikimedia Commons, with
labels added for FigureQuiz (web/data/demo/brain-lobes.svg).
A student capstone project by Andy Kurniawan, 2026, built with Claude Code as a pair programmer.
Copyright (C) 2026 Andy Kurniawan. FigureQuiz is free software under the GNU Affero General Public License v3.0, the same licence as PyMuPDF, which the worker uses to read PDFs.