ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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.