ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
AI-powered IELTS Writing and Speaking practice at scorify.uz. Learners submit an essay or a spoken answer and get an estimated band, per-criterion scores, corrections and next steps within seconds.
Live in production. Personal practice only (Teacher Mode was removed). Sign-in with Google or Telegram.檢視完整 README ↗AI-powered IELTS Writing and Speaking practice, plus full Reading and Listening tests, at scorify.uz. Learners submit an essay or a spoken answer and get an estimated band, per-criterion scores, corrections and next steps within seconds.
Live in production. Personal practice only (Teacher Mode was removed). Sign-in with Google or Telegram.
/learn), the centre of the product: four open levels, Beginner (5 units, 88 lessons, 14 of them real-life scenes), Elementary / A1 (6 units, 90 lessons) Pre-Intermediate / A2 (6 units, 90 lessons) and Intermediate / B1 (6 units, 90 lessons). Short situation lessons (5–12 min) sit between the full lessons (15–25 min); every hard topic is followed by practice games (44 in Beginner, 62 in Elementary, 65 in Pre-Intermediate, 66 in Intermediate), then a unit test. Explanations in Uzbek, examples and exercises in English; every English text has a natural pre-recorded voice. 7 days free, then the Learn plan (details in docs/learning-course.md)./learn/start) and is placed at the right level (they can also pick a level or say "Bilmayman"); someone who picked a level that is too easy takes a quick test (/learn/upgrade/:level) to move up. Beginner and Elementary end with a skills-based final exam (grammar, vocabulary, reading, listening, writing, plus an unscored speaking part) and a certificate.src/features/learn/scene/, content in content/beginner/uN/, see docs/learning-course.md)./leaderboard)./reading, 5 full Academic tests to choose from, each with a name and a short description: 3 passages, 40 questions, 60 min, all official question types) and Listening (/listening, 5 tests: 4 sections, 40 questions, British voices recorded with Kokoro, exam mode plays once) scored in the browser with an estimated band, accuracy by question type and an answer review with a transcript (test 1 of each is free); Speaking has a topic bank of 40 Part 1 themes, 50 Part 2 cue cards and about 74 Part 3 sets browsable by category, a real-card layout and a one-minute preparation timer for Part 2; mock tests, a daily grammar test, vocabulary, AI Mentor./dashboard): continue card with the next steps of the course, streak and XP, IELTS practice row, plan usage, recent activity./support): opens a Telegram chat with @scorify_support with the user's ID, plan and page pre-filled; the same account takes payments.Part of the same product (same Supabase project, accounts, plans and results), not a separate service. Built in a separate Claude session; full details in docs/telegram-bot.md.
/auth (bot confirmation) and automatic sign-in in the Mini App (/tg); Google users can connect Telegram from Profile. Handled by the telegram-auth Edge Function.telegram_outbox → pg_net → bot). Also daily test reminders (18:00–20:00 Tashkent), plan expiry warnings, a Sunday weekly report and announcements of new blog posts.telegram-bot; scheduled jobs run with pg_cron.| Plan | Price / month | Writing | Speaking | Mock tests |
|---|---|---|---|---|
| Free (7-day Learn trial) | 0 | 3 | 2 | 0 |
Learn (internal slug go) | 49 000 UZS | 0 | 0 | 0 |
IELTS (internal slug plus) | 129 000 UZS | 50 | 30 | 3 |
Paying 6 months at once is 10% cheaper. Payment is made through Telegram (@scorify_support) and the plan is switched on by an admin.
Defined in src/lib/plans.ts.
/admin)touch_presence, src/hooks/usePresence.ts) every 2 minutes; the database writes at most once a minute per user (user_presence table, no direct access). "Online" means a heartbeat in the last 5 minutes. Statistics come from admin_user_stats(), the list from admin_users_list() (online_at)./admin/blog/:id), images, SEO fields, publish/draft, view stats.Server-rendered pages from Vercel serverless functions (api/*.ts), cached at the CDN (s-maxage=300; add ?nc=<timestamp> to bypass when verifying).
api/blog.ts: blog hub, posts and RSS (posts live in the blog_posts table).api/seo.ts: programmatic hubs and topic pages: Writing Task 2 questions, Task 1 samples (SVG charts from api/_lib/charts.ts), Speaking Part 1/2/3, vocabulary by topic and the band score calculator.api/_lib/course-pages.ts: public course pages in Uzbek (/ingliz-tili-darslari, the open levels and all their lessons) generated from data-course.ts (npx tsx scripts/build-course-seo.ts).api/_lib/learn-pages.ts: learning SEO that feeds the course: Uzbek grammar guides /ingliz-tili-qoidalari (data-learn-guides.ts, 15 guides), topic word lists /inglizcha-sozlar (data-learn-words.ts, 11 topics with IPA) and the English landing /learn-english-from-uzbek (hreflang pair with the Uzbek course hub). Checked by src/test/learn-seo.test.ts.api/sitemap.ts: sitemap of the course, guides, word lists, IELTS pages and blog posts.Scorify with alternate names) to win branded searches.api/_lib/data-*.ts; integrity is checked by src/test/seo-data.test.ts and faq.test.ts.vercel.json).Vendor chunks split in vite.config.ts (react, radix, supabase, motion, query). Auth, support and level-check pages are lazy; Dashboard, Learn and the lesson page are prefetched when the browser is idle. Plans are cached for 30 minutes, the subscription is shared through one query, and /audio/* and /assets/* are cached for a year (audio URLs carry ?v= from AUDIO_VERSION, raise it when recordings change). The editor and chart libraries are not in the landing preload set. AI Mentor, announcements, pricing modal and the goals chart load lazily. Dashboard data uses shared TanStack Query caches (src/hooks/useDashboardData.ts).
React 18, Vite, TypeScript, Tailwind + shadcn/ui, TanStack Query, framer-motion, recharts. Supabase (auth, Postgres with RLS, RPCs, storage, Edge Functions: grade-essay, grade-speaking, transcribe-audio, transcribe-lesson, ai-mentor, generate-grammar-test, process-mock-test, telegram-bot, telegram-auth). Hosted on Vercel; every push to main deploys automatically.
Copy .env.example to .env.local, fill in the public Supabase settings, then run:
npm ci
npm run dev
The development server uses port 8080. .env and .env.local are ignored by Git. Frontend builds contain only the public Supabase URL and publishable key. Never put a service-role key, OpenAI key or database password in a VITE_* variable.
npm run typecheck
npm test
npm run build
npm run lint
deno test --allow-env supabase/functions/_shared/
deno check supabase/functions/*/index.ts
Supabase project: bywqpgjojnqscelloxew. Frontend on Vercel at scorify.uz / www.scorify.uz.
VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY for builds. The api/* functions read blog posts from Supabase REST.telegram-auth). Allow callback URLs for https://scorify.uz and https://www.scorify.uz.telegram_bot_token); deployment details are in docs/telegram-bot.md.OPENAI_API_KEY only in Supabase Edge Function secrets.execute_sql, in small pieces: a long migration can time out). Latest: 20261024000000_certificates, 20261026000000_lesson_completion_threshold, 20261027000000_security_and_load_hardening, 20261028000000_start_placed_and_upgrade_level, 20261029000000_user_presence_and_stats. Blog posts were inserted with ad-hoc SQL, not migrations. In the Supabase Auth settings enable leaked-password protection (a dashboard switch, not a migration).More course levels (Upper-Intermediate and up), an Android app (APK), a broader online payment flow, mistake notebook and daily Telegram exercises, A/B conversion tests, more blog and programmatic SEO content, Bing/Yandex indexing.