ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
一个 AI 学习平台,将任何 FBISE 学生(9–12 年级)从任何地方带到榜首。教‑后‑测,残酷诚实的考官评分,零盲点。
AI 翻译
An AI study platform that takes any FBISE student (Class 9–12) from wherever they are to the top of the board. Teach-then-test, brutally-honest examiner grading, zero blind spots.
教育JavaScript · HTMLGitHub @NafehAwan在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
An AI study platform that takes any FBISE student (Class 9–12) from wherever they are to the top of the board. Built around a strict teach → test → grade → unlock core learning loop, wrapped in a warm "board year" dashboard. This repo contains a working Next.js + TypeScript port of the full design prototype (Prepify AI.dc.html), plus the database foundation and seed content. [README 설치·사용 부분 발췌] setup. isAiConfigured() surfaces this to the UI as AppState.aiConfigured, which suppresses all "connect your key" prompts. A browser may still override with its own key via the x-groq-key header查看完整 README ↗
Board-style MCQ practice for FBISE Class 9. A student picks a subject and chapters, gets a test built from a real question bank, and sees their score and the right answers the moment they submit. They can also challenge friends to the same test and climb a leaderboard.
Live: prepifyaii.vercel.app. Stack: Next.js 16 + React 19 + TypeScript, Supabase (Postgres + Auth), Groq for the chatbot, hosted on Vercel.
| Feature | Where | Notes |
|---|---|---|
| Sign up / sign in | /login | Email or username + password (8+ characters), via Supabase Auth |
| Five subjects | /subjects | Physics, Chemistry, Maths, Computer Science, English |
| New test | /subjects/<subject>/new-test | Whole book or chosen chapters, 1–30 questions, Easy / Medium / Hard / Mixed |
| Take and review a test | /tests/<id> | Marked on the server; answers and explanations appear only after submitting |
| Mock exam | /mock-exam | Timed Chemistry paper from the mock pool: chosen chapters, up to 60 MCQs, 15 min–2 hr; hands itself in at 0:00 |
| Practise weak chapters | Subject page | Builds a test from the chapters the student scores lowest in |
| Report a question | Test review | Flags a wrong or unclear question for the admin |
| Friend challenges | /subjects/<subject>/challenge, /challenges/<CODE> | Invite link or code, lobby, same test on a shared clock, results |
| Leaderboard, XP, streaks | /leaderboard | All time (default) or Monthly; names shown to 10 characters |
| Progress | /progress | Tests taken and scores per subject |
| "Ask Prepi" chatbot | Chat bubble | Study help, powered by Groq; locked during a challenge |
| Help & Feedback | /support | Tickets the admin answers |
Owner tools at /admin: question reports, support tickets, and Players (see each student,
rename or hide them on the leaderboard, adjust or reset XP, wins, papers and streaks, add
fake leaderboard players).
Not built: past papers, written-answer marking, spaced repetition, account deletion and a
privacy page. The past_papers, slo_frequency, review_queue and content_chunks tables
in supabase/schema.sql are reserved for later and unused by the app.
About 4,250 MCQs are loaded into the questions table (Chemistry 1,490, Physics 965, Maths 787,
Computer Science 541, English 468). Their source files are in content/mcq-bank/. Each
question records in its file where its answer came from:
| Answer source | Count | Checked by a person? |
|---|---|---|
file: the answer key in the source document | about 920 | Yes, from the original source |
computed: numerical variants recalculated by script | about 920 | Calculated, not reviewed |
derived: no key in the file, so AI worked the answer out | about 970 | No |
authored: questions written by AI (all of English, plus variants) | about 1,070 | No |
Mock pool. content/mcq-bank/mock/ holds the newer Chemistry set (681 MCQs, chapters 1, 2,
3, 4, 6, 8, 9, 13 and 14). These rows are flagged mock in the database: mock exams use only
them, and normal tests use them too. 399 of them are word for word questions already in the
bank, so those rows were flagged rather than copied; the rest were added. Chapter 9's first 64
answers come from the file's key; the other answers were worked out by AI and then checked
against the older bank wherever the same question appears there (they all agreed). To add
chapters to mock exams, put their questions in mock/ and load them with
node scripts/load-mcq-bank.mjs --sql --only=mock, which adds rows and deletes nothing.
So roughly half the bank still needs a human check before it can be trusted. List the
AI-derived ones with node scripts/check-bank.mjs --derived --sample=50. The answer source
is not yet stored in the database, so the app can't hide unchecked questions; adding that is
the next content task.
| Script | What it does |
|---|---|
scripts/ingest-mcqs.mjs, scripts/ingest_docx.py | Turn the source .docx / .pdf files into content/mcq-bank/*.json |
scripts/derive-answers.mjs | Fills in answers the source files left out (marks them derived) |
scripts/generate-variants.mjs, scripts/compile-authored.mjs, scripts/generate-english-bank.mjs | Reworded and re-valued variants, and the English bank |
scripts/check-bank.mjs | Validates the bank, prints samples, checks test variety |
scripts/load-mcq-bank.mjs | Loads the bank into Supabase (re-runnable; replaces a chapter's bank rows) |
npm install
npm run dev # http://localhost:3000
npm run build # production build
npm run typecheck # strict TypeScript
With no Supabase settings the app opens in demo mode with sample data.
supabase/schema.sql,
challenges.sql, usernames.sql, engagement.sql, support.sql (then add yourself to
app_admins, as the top of the file explains), players.sql, security.sql, mock.sql,
and the LOCKDOWN section of security.sql last..env.local.example to .env.local and fill in NEXT_PUBLIC_SUPABASE_URL,
NEXT_PUBLIC_SUPABASE_ANON_KEY and SUPABASE_SERVICE_ROLE_KEY.npm run seed for the subjects and chapters, then node scripts/load-mcq-bank.mjs for the
questions.GROQ_API_KEY (free at console.groq.com) for the chatbot. Tests work without it.On Vercel, set the same environment variables under Project → Settings → Environment Variables.
.mcp.json registers the Supabase MCP server so a local Claude Code session can run SQL and
migrations against the project.
create_test database function (supabase/security.sql): one
version per question family, in the chosen difficulty first, avoiding questions from the
student's last five tests, with questions and options shuffled. The browser gets the
questions without answers; submit_test marks them, saves the score and only then returns
the answers. No AI is involved, so tests cost nothing to run.tests with kind = 'mock' (supabase/mock.sql): create_mock
draws up to 60 questions from the mock pool and stores a deadline; submit_test marks a mock
that arrives more than two minutes after its deadline as blank, so the clock can't be dodged
by leaving the page. The runner saves picks on the device as they're made and hands the
paper in at 0:00. Mocks count towards XP, streaks and progress like any test.supabase/*.sql; students can't read or write those tables directly.POST /api/ai/chat and POST /api/ai/ping (app/api/ai/, lib/ai/). They need
a signed-in student, refuse cross-site requests, cap request size, and are rate-limited per
student in the database (rate_limit_hit: 12 messages a minute, 200 a day). If
PREPIFY_MODEL is unset, the best model the key can reach is picked automatically.components/screens/, put together by
components/AppShell.tsx; state lives in lib/store.tsx; lib/routes.ts maps every screen
to a real URL so Back, refresh and shared links work.GROQ_API_KEY and SUPABASE_SERVICE_ROLE_KEY stay on the server; .env* files are
git-ignored. Only the Supabase URL and anon key reach the browser, and every table is behind
row-level security.app_admins table; every admin function checks it.next.config.mjs sets a Content-Security-Policy, X-Frame-Options: DENY, nosniff, HSTS,
a strict referrer policy and a Permissions-Policy.launch-video/ builds the 29-second promo in 16:9 and 9:16 with HyperFrames. See
launch-video/README.md.