ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Arabic AMAR is a gamified Qur'anic-Arabic study site built around the AMAR Arabic Programme curriculum. It combines lesson vocabulary, grammar references, reading foundations, a word-by-word short-surah reader, pronunciation audio, daily goals, and browser-local practice progress.
Live site: https://arabic-amar.vercel.app
| Area | Route | Purpose |
|---|---|---|
| Home | / | Daily practice dashboard, streak/progress summary, lessons, and hidden admin refresh controls. |
| Progress sync | /sync | Optional Supabase sign-in for syncing browser progress across devices. Guest mode still works without it. |
| Lessons | /topics and /topics/[slug] | Topic-by-topic curriculum vocabulary, grammar rules, and practice entry points. |
| Vocabulary bank | /vocabulary | Searchable curriculum vocabulary plus built-in Top Qur'ānic words. Arabic search is diacritic-insensitive. |
| Grammar | /grammar | Pronouns, conjugations, plurals, demonstratives, and lesson-linked grammar tables. |
| Practice | /practice | Flashcards, multiple choice, ordering, matching, letter, connecting-letter, and cloze drills. |
| Foundations | /read | Alphabet, harakāt, madd, sun/moon letters, makhārij, tajweed, and surah reading routes. |
| Content health | /admin/content-health | Build-generated parser, QA, and audio coverage report for maintainers. |
Learner progress is stored in localStorage by default. Optional Supabase sync can copy that progress between devices when deployment environment variables are configured.
.docx curriculum ingestionNext.js 16 has breaking changes. Before changing framework-specific code, read the relevant guide in node_modules/next/dist/docs/.
Prerequisites:
Install and run:
npm install
npm run dev
Open http://localhost:3000.
Optional cloud sync environment:
NEXT_PUBLIC_SUPABASE_URL="https://YOUR_PROJECT.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_ANON_KEY"
Without these values, /sync explains that sync is disabled and the app remains fully usable in guest/local-progress mode.
Useful clean-browser-state reset for progress/admin UI testing:
localStorage.removeItem("arabic-amar:progress:v1");
localStorage.removeItem("arabic-amar:admin-refresh-token");
location.href = "http://localhost:3000/";
| Command | What it does |
|---|---|
npm run dev | Starts the Next.js dev server. |
npm run build | Runs prebuild, then creates the production Next.js build. |
npm run start | Serves the production build. |
npm run lint | Runs ESLint. |
npm run typecheck | Runs tsc --noEmit. |
npm test | Runs Vitest once. |
npm run content:build | Rebuilds content/content.json and content/content-qa.json. |
npm run audio:build | Rebuilds content/audio-manifest.json. |
npm run prebuild | Runs content build, then audio manifest build. This runs automatically before npm run build. |
Recommended pre-PR validation:
npm run lint
npm run typecheck
npm test -- --run
npm run build
npm run build can emit a workspace-root warning when multiple lockfiles exist above the repo checkout. The warning is environmental; the build is still valid if it exits successfully.
The sync feature is intentionally optional: no environment variables means no sign-in UI in the main dashboard/topbar, and all progress remains local.
Create this table in Supabase:
create table if not exists public.user_progress (
user_id uuid primary key references auth.users(id) on delete cascade,
progress jsonb not null,
updated_at timestamptz not null default now()
);
alter table public.user_progress enable row level security;
create policy "Users can read their own progress"
on public.user_progress for select
using (auth.uid() = user_id);
create policy "Users can insert their own progress"
on public.user_progress for insert
with check (auth.uid() = user_id);
create policy "Users can update their own progress"
on public.user_progress for update
using (auth.uid() = user_id)
with check (auth.uid() = user_id);
Recommended Supabase Auth settings:
NEXT_PUBLIC_SUPABASE_ANON_KEY; never commit service-role keys.Sync behavior:
localStorage.lastSeen wins; equal timestamps keep stronger mastery.The curriculum source is a public Google Doc exported as .docx, then parsed into committed JSON.
Default source document:
https://docs.google.com/document/d/1wqbU7rsLUm0wqCjQPS2PbtCTThZOxnE2CnClxa8DETc/edit
Generated files:
| File | Generated by | Purpose |
|---|---|---|
content/content.json | npm run content:build | Lessons, topics, vocabulary, rules, and source metadata consumed by the app. |
content/content-qa.json | npm run content:build | Parser warnings, QA issues, and audio coverage metrics rendered at /admin/content-health. |
content/audio-manifest.json | npm run audio:build | Pronunciation and Qur'ān recitation URLs used by speaker buttons and the surah reader. |
npm run content:build
The parser uses GOOGLE_DOC_ID when set; otherwise it uses the default AMAR source document.
GOOGLE_DOC_ID="..." npm run content:build
The Google Doc must be public or shared as "Anyone with the link", because the parser uses the public .docx export endpoint and no Google API credentials.
.docxUse this for parser development or offline fixture testing:
LOCAL_DOCX_PATH=tests/fixtures/sample.docx npm run content:build
After every content build, inspect:
/admin/content-health
The report is intentionally maintainer-facing. It catches silent source-data regressions such as parser warnings, duplicate/collapsed rows, empty English glosses, missing audio coverage, and topic-level coverage gaps.
npm run audio:build reads content/content.json, extracts Arabic forms, and resolves public audio URLs.
Sources:
The manifest is committed so production does not perform audio discovery at runtime. Missing vocabulary audio is also surfaced in content/content-qa.json and rendered as unavailable audio state in the learner UI.
The homepage includes a hidden admin panel that appears when the URL hash is #admin or an admin token is already stored in the browser:
https://arabic-amar.vercel.app/#admin
Clicking the refresh button calls:
POST /api/refresh
Required server-side environment variables:
| Variable | Required where | Purpose |
|---|---|---|
ADMIN_REFRESH_TOKEN | Vercel server/runtime env | Shared secret checked against the x-admin-token request header. |
VERCEL_DEPLOY_HOOK_URL | Vercel server/runtime env | Vercel deploy hook URL that triggers a rebuild. Keep server-side only. |
GOOGLE_DOC_ID | Build env, optional | Overrides the default public AMAR Google Doc ID during content builds. |
The admin token entered in the UI is stored only in that browser's localStorage under arabic-amar:admin-refresh-token.
Vercel should run:
npm run build
That automatically executes:
tsx scripts/build-content.ts && tsx scripts/build-audio-manifest.ts
So each deploy refreshes the generated content from the current source document and audio manifest logic.
For on-demand refreshes, configure a Vercel deploy hook and set VERCEL_DEPLOY_HOOK_URL plus ADMIN_REFRESH_TOKEN.
Use command-line checks for code/content changes:
npm run lint
npm run typecheck
npm test -- --run
npm run build
Use browser testing for learner/admin UI flows. High-value smoke checks:
/ shows the daily dashboard and lesson cards./vocabulary can search Arabic without diacritics, e.g. هذا./admin/content-health shows expected content totals, QA issues, and audio coverage./#admin opens the token-entry dialog without requiring a real token unless testing the refresh API itself.content/
audio-manifest.json Generated audio lookup map.
content.json Generated curriculum data.
content-qa.json Generated content health report.
scripts/
build-audio-manifest.ts Audio discovery/build script.
build-content.ts Google Doc/local docx parser entrypoint.
build-quran-extras.ts Qur'ān support-data helper.
verify-quran.ts Qur'ān word-by-word verification helper.
src/
app/ Next.js routes and route handlers.
components/ Reusable UI components.
data/ Hand-authored foundations and surah data.
lib/ Parser, content access, progress, audio, and utilities.
tests/
lib/ Vitest coverage for parser/content/audio/exercise logic.