ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기School management software & AI learner
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A multi-tenant SaaS school management platform for Nigerian private schools, with AI-assisted learning built in from day one.
Status: Phase 0 — Foundations. Pre-launch. Not yet accepting customers.
Stack: Next.js 15 · NestJS 10 · PostgreSQL 16 (with RLS + pgvector) · Redis · Prisma · Expo · Anthropic Claude API · Paystack · Termii
Before doing anything in this repo, read in order:README 전문 보기 ↗A multi-tenant SaaS school management platform for Nigerian private schools, with AI-assisted learning built in from day one.
Status (2026-10-10): Live. Schools sign up and run on the staff web app (app.schoolkit.ng) and the parent portal, on early-access pricing as pioneer schools. The mobile app is built but not yet released to families (device checks outstanding). What is left, and what waits on whom, is in docs/deferred.md.
Stack: Next.js 15 · NestJS 10 · PostgreSQL 16 (with RLS + pgvector) · Redis · Prisma · Expo · Anthropic Claude API · Paystack · Termii
Before doing anything in this repo, read in order:
CLAUDE.md — conventions, rules, and how code is written hereWORKFLOW.md — how work happens day-to-day; module lifecycle; quality gatesdocs/ARCHITECTURE.md — system design, data model, all 17 modules, build phasesdocs/modules/<module>.md for the work at hand, and docs/deferred.md for what is known but not doneFuture contributors and future-you should be productive after reading these four documents.
nvm or volta)npm install -g pnpm)# Clone and install
git clone <repo-url> school-kit
cd school-kit
pnpm install
# Environment
cp .env.example .env
# Fill in API keys: see "Env vars" below
# Database
pnpm db:up # docker-compose: postgres + redis + pgvector
pnpm db:migrate # apply migrations
pnpm db:seed # seed system roles (idempotent)
pnpm dev:seed # DEV-ONLY: full test school for browser testing
# (idempotent; run db:seed first). Logs the
# dev-owner / dev-teacher logins + password.
# Run everything
pnpm dev
After pnpm dev boots, you should see:
http://localhost:3001http://localhost:4000pnpm db:studio → http://localhost:5555pnpm typecheck # should pass
pnpm lint # should pass
pnpm test # should pass
If any of those fail on a clean clone, something is broken — fix before touching feature code.
# Daily
pnpm dev # all apps via Turborepo
pnpm dev:api # api only
pnpm dev:web # web only
pnpm dev:mobile # expo only
# Database
pnpm db:up # start postgres + redis
pnpm db:down # stop postgres + redis
pnpm db:migrate # apply pending migrations
pnpm db:migrate -- --name <name> # create a new migration
pnpm db:reset # NUKE local db, re-migrate, re-seed
pnpm db:seed # re-run seed
pnpm db:studio # browse data in Prisma Studio
# Quality
pnpm lint
pnpm lint:fix
pnpm typecheck
pnpm test # unit + integration
pnpm test:watch
pnpm test:e2e # Playwright happy-path smoke (e2e/ workspace).
# Reuses dev servers if running; otherwise spawns
# them. ~1–2 min on a warm machine.
# AI
pnpm ai:eval # run prompt eval suite (required before merging prompt changes)
school-kit/
├── CLAUDE.md How code is written (read first)
├── WORKFLOW.md How work happens
├── README.md This file
├── apps/
│ ├── web/ Next.js 15 — admin + teacher portals
│ ├── mobile/ Expo — parent + student app
│ └── api/ NestJS 10 — backend
├── packages/
│ ├── db/ Prisma schema, client, migrations
│ ├── types/ Shared TS types, Zod schemas
│ ├── ui/ Shared React components
│ ├── ai/ Claude prompts, RAG helpers, evals
│ └── config/ Shared tsconfig, eslint, tailwind
├── docs/
│ ├── ARCHITECTURE.md
│ ├── DECISIONS.md ADRs
│ ├── deferred.md Scope-cut ideas
│ ├── journal/ Daily notes
│ ├── modules/ Per-phase specs
│ └── runbooks/ Deploy, rollback, incident
├── infra/ Terraform / Pulumi
└── .github/workflows/ CI/CD
All variables documented in .env.example. The critical ones:
| Variable | Where it's used | Where to get it |
|---|---|---|
DATABASE_URL | Postgres connection | Local docker; prod = Neon/Supabase |
REDIS_URL | Redis connection | Local docker; prod = Upstash |
BETTER_AUTH_SECRET | Session signing | Generate: openssl rand -hex 32 |
BETTER_AUTH_URL | Public app URL | e.g. http://localhost:3000 |
ANTHROPIC_API_KEY | Claude API | console.anthropic.com |
PAYSTACK_SECRET_KEY | Payments | dashboard.paystack.com |
PAYSTACK_PUBLIC_KEY | Payments (client) | dashboard.paystack.com |
TERMII_API_KEY | SMS / WhatsApp / OTP | accounts.termii.com |
TERMII_SENDER_ID | SMS sender name | Termii (must be approved) |
RESEND_API_KEY | resend.com | |
R2_ACCOUNT_ID | File storage | Cloudflare dash |
R2_ACCESS_KEY_ID | File storage | Cloudflare dash |
R2_SECRET_ACCESS_KEY | File storage | Cloudflare dash |
R2_BUCKET | File storage bucket name | Cloudflare dash |
SENTRY_DSN_API / NEXT_PUBLIC_SENTRY_DSN | Error monitoring (API / web) | sentry.io |
POSTHOG_API_KEY / NEXT_PUBLIC_POSTHOG_KEY | Product analytics (API / web), same project key | posthog.com |
Never commit .env. It's in .gitignore. Keep test keys and live keys in separate .env files.
There is no "active phase" to keep updated here any more. For the state of things, read, in this order:
docs/deferred.md: what is known and not done, what
waits on the owner or an outside party, and what waits for a trigger.docs/journal/ and git log on
main: what shipped recently, with the PR to read for detail.docs/ARCHITECTURE.md section 9: which phases
have shipped.Detail, and the as-built notes, in docs/ARCHITECTURE.md section 9.
docs/runbooks/cbt-go-live.md says when.A Next.js admin/teacher web app, an Expo parent/student mobile app, and a NestJS API back them all. PostgreSQL with row-level security enforces multi-tenancy: every domain table has a school_id column, and a session-scoped Postgres setting (app.current_school_id) makes cross-tenant data leaks structurally impossible. Redis handles caching and BullMQ queues background work (audit writes, SMS, AI batches). The AI layer uses Anthropic Claude (Sonnet + Haiku) with RAG over the WAEC/NECO curriculum, indexed via pgvector in the same Postgres database. Paystack for payments, Termii for SMS/WhatsApp, Resend for email, Cloudflare R2 for files, Sentry for errors, PostHog for analytics.
Full detail in docs/ARCHITECTURE.md.
These are bypassed under no circumstances, regardless of deadline pressure. Breaking any of them causes permanent damage. Full list with reasoning in CLAUDE.md.
withTenant on every query, every endpoint.env in .gitignore from commit zeroCurrently solo development. When the first contributor joins, this section grows.
For now: every change goes through a branch and a PR into main, even though you're solo. There is no staging branch: a merge to main passes CI and then deploys to the one production environment (see CLAUDE.md, "There is no isolated staging environment"). See WORKFLOW.md for the module lifecycle.
Proprietary. All rights reserved. Not for redistribution.