ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
เรียนวิทยาศาสตร์แบบลงมือคิด มี AI ช่วยตรวจงานและบอกว่าจะเก่งขึ้นได้ยังไง
Translation pending
EducationTypeScript · PLpgSQLGitHub @NeckkupOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.