ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
STEAM learning for children. AI grades the work, tracks each child's behaviour and
growth, personalises the learning path, and builds the dataset we will later use to
train our own model.檢視完整 README ↗STEAM learning for children. AI grades the work, tracks each child's behaviour and growth, personalises the learning path, and builds the dataset we will later use to train our own model.
traceAiCall() in
src/lib/observability/langfuse.ts. A feature that reaches a model outside that
wrapper is not finished.src/lib/privacy/redact.ts first. Use the pseudonymous
learnerRef, never a name, email, photo, or raw free-text answer..env.example lists the names, never the values.payloadVersion; never
mutate a past event in place.Requires Node 20.11+ and, for anything database-backed, a local Postgres.
npm install
cp .env.example .env.local # fill in what you need; most vars are optional
npx prisma generate
npm run dev # http://localhost:3000
The app boots with no database, no Langfuse, and no Sentry — the landing page and
/api/health report which integrations are configured. That is deliberate: a fresh
clone must never be blocked on credentials.
With a local Postgres running:
npm run db:migrate:dev # create/apply migrations
Langfuse is self-hosted (see ADR 0002). Until the shared instance exists, run it locally with the project's official Docker Compose stack:
git clone https://github.com/langfuse/langfuse.git ../langfuse
docker compose -f ../langfuse/docker-compose.yml up -d # http://localhost:3000
Create a project in that UI, then put its keys and LANGFUSE_BASEURL in
.env.local. Do not point steamkid at Langfuse Cloud, not even in development.
| Command | What it does |
|---|---|
npm run dev | Dev server |
npm run build | Production build (fails on type errors) |
npm start | Serve the production build |
npm run typecheck | tsc --noEmit |
npm run lint | ESLint |
npm test | Vitest unit tests |
npm run db:generate | Regenerate the Prisma client |
npm run db:migrate | Apply migrations (deploy) |
CI (.github/workflows/ci.yml) runs lint, typecheck, tests, and a build on every
pull request, plus a secret scan that fails if a credential-shaped string is
committed. CI runs without any secret, so a fork or fresh clone is never blocked.
Deploy target: Vercel, connected to the GitHub repo.
main → productionmainAPP_ENV must be preview or production on deployed environments.
assertObservabilityReady() refuses to run a deployed tier without Langfuse keys.
Names and purpose are documented in .env.example. Values are injected by the host;
they are never committed and never pasted into an issue comment.
| Variable | Where it is needed |
|---|---|
APP_ENV, APP_URL | all deployed environments |
RUNTIME_DATABASE_URL, MIGRATE_DATABASE_URL | runtime + migrations — two different Postgres roles (ADR 0005). DATABASE_URL/DIRECT_URL are accepted as fallbacks and are what a local checkout sets; the names above win when both are present |
AUTH_SECRET | runtime |
GEMINI_API_KEY | server only (paid-tier auth key — see ADR 0004) |
LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASEURL | runtime |
NEXT_PUBLIC_SENTRY_DSN | runtime (public by design) |
SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN | build only, source-map upload |
| Tool | Purpose | URL |
|---|---|---|
| Vercel | deploys, preview URLs, rollback | team test11-3d92, project steamkid-vph3 — production https://steamkid-vph3.vercel.app (PR previews are behind Vercel Deployment Protection) |
| Langfuse | AI traces, prompts, evals | https://langfuse.homekup.com (self-hosted — see docs/runbooks/langfuse-self-host.md) |
| Sentry | web app errors | https://project-qq.sentry.io/projects/steamkid/ |
Update this table the moment an account exists. The team references these URLs instead of asking each other where things live.
Sentry slugs, for SENTRY_ORG / SENTRY_PROJECT: org project-qq, project
steamkid. These are identifiers, not credentials. The DSN and the build-time
auth token live in the Paperclip vault (steamkid/sentry/*) and are injected
into the deploy environment — never committed here.
src/app/ routes (App Router)
src/app/api/health/ deployment self-check, safe to call publicly
src/lib/env.ts validated configuration, the only reader of process.env
src/lib/db.ts Prisma client
src/lib/privacy/redact.ts PII redaction — the choke point for external services
src/lib/observability/ Langfuse wrapper + Sentry scrubbing
prisma/schema.prisma data model (domain tables land in PRO-3 / PRO-7)
docs/architecture.md how the pieces fit, in diagrams — start here
docs/data-model.md the Postgres schemas, as ER diagrams
docs/adr/ architecture decisions and what we rejected
docs/diagrams.md diagram conventions — every diagram is Mermaid
docs/architecture.md is the map: system context, the learner request path, the AI grading path, the route map, and the privacy boundary — drawn from the code rather than from intent, with a closing section listing where the repository is behind its own decision documents. docs/data-model.md has the schema.