ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A school management software
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Skuware is a multi-tenant school operating system for Nigerian schools. This
repository contains the full engine plus every core module from the product
blueprint (docs/product-blueprint.md), wired end-to-end with real data —
not just UI shells. The public marketing/landing page is deliberately not
built yet — it will be added and wired to this engine separately.
Brand: primary yellow #FAEE1E, black #000000, white #FFFFFF, dark gray
#1E1E1E, light gray #F4F4F4. Typeface: Montserrat. See public/brand/
for logo assets.查看完整 README ↗Skuware is a multi-tenant school operating system for Nigerian schools. This
repository contains the full engine plus every core module from the product
blueprint (docs/product-blueprint.md), wired end-to-end with real data —
not just UI shells. The public marketing/landing page is deliberately not
built yet — it will be added and wired to this engine separately.
Brand: primary yellow
#FAEE1E, black#000000, white#FFFFFF, dark gray#1E1E1E, light gray#F4F4F4. Typeface: Montserrat. Seepublic/brand/for logo assets.
Multi-tenant auth (JWT access token + rotating hashed refresh token), RBAC across 11 roles, brute-force lockout, rate limiting, CSRF defense, security headers, and tenant-scoped audit logging. See the "Security posture" section below.
Academic sessions/terms, classes/arms, departments, subjects — plus student, staff, and parent records. Staff and parent creation provisions a real login account (temporary password, since no email provider is wired up yet).
Teacher-subject-class assignments, configurable grading components, score entry (teacher-scoped to their own assignment), subject comments, and a computed report card (never a stale snapshot) with the Nigerian secondary school grading scale: A (70–100, Excellent), B (60–69, Very Good), C (50–59, Good), D (45–49, Fair), E (40–44, Pass), F (0–39, Fail) — the scale used on WAEC/NECO-style continuous-assessment report cards, not a generic A–F curve.
Daily register (Present/Absent/Late/Excused) taken by class teachers, attendance-rate history for parents/students, tenant- and role-scoped.
Fee structures, invoices, and payment recording. No payment gateway is wired up (no Paystack/Flutterwave keys configured) — payments are recorded as reported through offline channels (bank transfer, cash, POS) so schools can track collections today; a gateway integration later is a matter of adding a webhook that calls the same recording logic.
PIN + QR credential issuance per student, and a verification endpoint gate staff use to check identity/status. No camera-based scanning UI yet — manual code entry works today, including with keyboard-wedge barcode scanners.
Secure file upload/download (PDF, Word, PNG, JPEG, 10MB cap) on local disk
storage, private (never under /public), access-checked per request. Swap
src/lib/storage.ts for an S3/R2 client before running multiple instances.
Application intake, review, and approval → automatically creates the student record and admission number. Public online application intake is deferred with the marketing site — admissions staff record applications today (phone/email/walk-in), which still exercises the full pipeline.
School-wide/class/individual announcements, and direct messaging between parents and staff.
Teachers (scoped to their own class assignment) create homework; students in that class see and submit it.
Three personas — Student AI Tutor, Teacher AI Assistant, Parent AI
Assistant — plus an AI exam-question generator for JAMB/WAEC/NECO/Post-UTME
practice tests with instant marking and explanations. All AI calls go
through src/lib/ai/provider.ts, a thin wrapper over the Anthropic Messages
API. Set ANTHROPIC_API_KEY (see .env.example) to activate it — until
then, every AI endpoint returns a clearly-labeled "not configured" message
instead of a fabricated response; the UI surfaces that state honestly.
AI-generated questions are tagged AI_GENERATED and start in DRAFT
review status, distinct from any future licensed past-question content.
A review queue for AI-generated questions (approve/flag), and a minimal university database (name/state/type) — the foundation for the Post-UTME prep track described in the blueprint; course-level admission-requirement management is the next layer to build here.
Read-only views over schools, users, and the audit log. Subscription billing enforcement isn't built — schools currently sign up on a trial tier with no billing gate.
httpOnly, SameSite=Lax cookie; refresh tokens are opaque random values
— only their SHA-256 hash is stored — rotated on every use, with reuse of
an already-rotated token revoking the entire token family (theft
detection).Origin doesn't match the app's own origin.X-Frame-Options: DENY,
X-Content-Type-Options: nosniff, HSTS, restrictive Permissions-Policy
on every response.schoolId, never a client-supplied value; RBAC is
checked at the route level (src/proxy.ts) and again in every server
component/API route (defense in depth).safeUserSelect allowlist
is applied everywhere a User is nested in an API response — this caught
and fixed a real passwordHash-in-response bug during development
(verified with an automated re-check across every affected endpoint)./public, access-checked per download request.console.info) instead of
emailed/SMS'd. Search TODO(integration).corepack enable if you don't have it)pnpm install
cp .env.example .env # fill in DATABASE_URL, AUTH_JWT_SECRET, and (optionally) ANTHROPIC_API_KEY
pnpm db:migrate # applies prisma/migrations and generates the client
pnpm dev
Visit http://localhost:3000/signup to register a school, then
http://localhost:3000/login to sign in as its owner.
prisma/schema.prisma Full data model (tenancy, people, academics,
attendance, fees, gate access, documents,
admissions, communication, AI, exam prep)
src/lib/auth/ Password hashing, JWT + refresh tokens, RBAC,
rate limiting, audit logging, server guards
src/lib/ai/ AI provider abstraction + persona prompts
src/lib/academics/ Grading-scale logic (Nigerian A–F bands)
src/lib/storage.ts Local-disk document storage
src/lib/db.ts Prisma client singleton
src/proxy.ts Route protection + security headers
src/app/api/* One route group per module (see above)
src/app/dashboard/* One route tree per role
src/components/ui Brand-styled Button, Input, Card
src/components/layout DashboardShell (sidebar + topbar)
src/components/academics Shared report-card / attendance-history views
src/components/ai Shared AI chat panel
public/brand Logo assets extracted from the brand book
SUPER_ADMIN, CONTENT_MANAGER (platform-level, no schoolId), and
per-tenant roles SCHOOL_OWNER, PRINCIPAL, VICE_PRINCIPAL, BURSAR,
TEACHER, STAFF, PARENT, STUDENT, GATE_STAFF. See
src/lib/auth/rbac.ts for the dashboard-access matrix and src/lib/nav.ts
for per-role navigation.
The public marketing/landing site is intentionally deferred and will be connected to this engine afterward. Beyond that, the next layers are: course-level university admission requirements (Post-UTME prep), licensed past-question import workflow, period-by-period timetabling, a payment gateway integration, and a transactional email/SMS provider.
Deploy on Vercel with DATABASE_URL (PostgreSQL) and AUTH_JWT_SECRET
set as project environment variables before the first production build —
Vercel bakes environment variables into a deployment at build time, so
adding or changing them requires a new deployment (redeploying an
existing one won't pick up the change) via pnpm db:deploy for
migrations and a fresh push to the production branch.