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.