ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Practice impromptu speaking against a random topic and a timer, then get instant, specific AI coaching on clarity, structure, confidence, pace and filler words.
Core loop: choose a mode → get a topic → 3-2-1 → record → transcribe → analyze → review → practice again → track progress.
| Area | Choice |
|---|---|
| Framework | Next.js 15 (App Router), React 19, TypeScript |
| UI | Tailwind CSS 4, shadcn/ui (radix-nova), framer-motion, Recharts |
| Data | PostgreSQL + Prisma 7 (driver adapter @prisma/adapter-pg) |
| Auth | Built in-house: Argon2id + database-backed sessions (no third-party auth) |
| AI | OpenAI REST via fetch (no SDK), strict JSON-schema structured output |
| Testing | Vitest (unit + integration), Playwright (E2E, a11y, performance) |
npm install # postinstall runs `prisma generate`
cp .env.example .env # fill in AUTH_SECRET at minimum (see below)
npm run db:start # local PostgreSQL (no Docker needed) on port 54329 — keep running
npm run db:deploy # apply migrations
npm run db:seed # 189 topics + 9 achievements
npm run dev # http://localhost:3000
Generate a secret for .env:
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
Without OPENAI_API_KEY, set AI_PROVIDER=mock: transcription and coaching then use an isolated,
clearly-labelled development provider so the whole flow works offline. Mock output is never
presented as real coaching, and the mock provider refuses to run in production.
| Script | What it does |
|---|---|
npm run dev | Development server |
npm run db:start | Local PostgreSQL via embedded-postgres (data in .data/postgres) |
npm run db:migrate | Create a migration from schema changes |
npm test | Unit tests (Vitest) |
npm run test:integration | Integration tests against a real database (needs db:start) |
npm run test:e2e | Playwright E2E (builds to .next-build, serves on port 3100) |
npm run test:all | Everything, in the order CI runs it |
E2E builds into .next-build (NEXT_DIST_DIR) so it can run while npm run dev is using .next.
src/
├── app/ routes: (marketing) (auth) (app) onboarding api
├── components/ ui (shadcn), layout, shared
├── features/ topics practice recording transcription ai-coach
│ filler-analysis follow-up progress achievements
│ history settings notifications auth onboarding marketing
├── lib/ auth db ai email storage rate-limit validation api utils
├── stores/ hooks/ config/ generated/prisma
Rules that matter:
features/*, not in page components.unavailable instead of being invented.ARCHITECTURE.md has the full design, including the as-built decisions (section 33).
LESSONS.md records compatibility findings and debugging lessons — read it before changing
dependencies or the toolchain.
src/**/*.test.ts) — pure logic: timer, filler detection, analytics, streaks,
achievement rules, schemas, validation.tests/integration) — real PostgreSQL: auth, sessions, uploads, the
transcribe→analyze pipeline, rate limiting, notifications, the OpenAI client (mocked fetch).
Non-destructive by design: migrations are applied with migrate deploy and every test uses
unique per-run data.e2e/) — full flows in Chromium with synthetic camera/microphone, plus axe
accessibility audits, CSP/security checks and Core Web Vitals.Target is Vercel + Neon. Before going live, see "Production readiness" in ARCHITECTURE.md §33.8:
production credentials, an object-storage driver (the local filesystem driver refuses to run on
Vercel), and direct-to-storage uploads for video, which exceed the 4.5 MB serverless body limit.
vercel.json schedules the hourly notification cron (/api/cron/notifications, protected by
CRON_SECRET).