ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.