ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证lavelle tech
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Professional legal specialization and CPD platform for the Nigerian legal market. Candidates register, browse a catalogue of specialization programmes, pay per programme, study online, sit a proctored certifying examination, and receive a credential any third party can verify publicly.
Two slices are in this repository so far:查看完整 README ↗Professional legal specialization and CPD platform for the Nigerian legal market. Candidates register, browse a catalogue of specialization programmes, pay per programme, study online, sit a proctored certifying examination, and receive a credential any third party can verify publicly.
Two slices are in this repository so far:
Everything else (programme catalogue, payment, course player, assessment, admin operations, marketing site) ships as later, vertical-slice handoffs — see each design handoff's own README for the planned order.
@prisma/adapter-pg), citext + pgcrypto extensionssrc/lib/candidate-session.ts for the rationale.npm test) — runs against the real local Postgres, not a mockPoint DATABASE_URL in .env at any local Postgres — either a native install (Postgres.app, Homebrew) or the bundled docker-compose.yml:
npm install
cp .env.example .env # pick the DATABASE_URL line for your setup, or edit it directly
npm run db:up # only if using docker-compose — docker compose up -d
npm run db:migrate # applies the schema (uses MIGRATE_DATABASE_URL — see below)
npm run db:seed # loads demo data
npm run dev
The app runtime connects as a restricted Postgres role, lavelle_app, which has full CRUD on every table except audit_event — there it's INSERT/SELECT only, enforced at the database level (not just the service layer), because the audit log is append-only by contract. Migrations need CREATE/role-management privileges that role doesn't have, so they run as a separate, more privileged role via MIGRATE_DATABASE_URL. Both are pre-filled in .env/.env.example for local dev; the lavelle_app role and its grants are created by prisma/migrations/*_app_role_audit_grants.
Then visit:
/register, /sign-in — candidate registration and sign in/portal/* — the candidate shell, gated: an unpaid applicant sees Dashboard, Catalogue, Profile & ID and Contact us only; Programme, Deadlines, Assessment, Exams, Credentials and Lavelle AI are absent until candidate_number is set (first confirmed payment, Slice 3's job — see "the seam" below)/admin/* — the staff shell (no sign-in screen yet; sign in via POST /api/auth/callback/staff)/preview/admin — the two shells rendered without auth, for design-fidelity reviewDemo accounts (seeded by prisma/seed.ts, password Lavelle2026! for all):
| Role | |
|---|---|
[email protected] | Candidate — enrolled |
[email protected] | Candidate — applicant (unpaid, nav-gated) |
[email protected] | Staff — Super Admin |
[email protected] | Staff — Operations Admin |
[email protected] | Staff — Finance Admin |
[email protected] | Staff — Academic Admin |
[email protected] | Staff — Faculty |
[email protected] | Staff — Support Agent |
The seam: UPDATE "Candidate" SET "candidateNumber" = 'LVL/2026/00001' WHERE email = '...' flips that account straight to the enrolled shell, with no other row touched — is_enrolled is derived from candidate_number IS NOT NULL, never stored. This is what Slice 3 (catalogue → payment → enrolment) will drive for real.
No email provider is wired up — verification links are logged to the server console ([dev] verification email for ...), not actually sent.
| Path | What it is |
|---|---|
src/app/globals.css | Design tokens (@theme) — colors, fonts, spacing, radii, shadows, light/dark |
src/components/ui/ | Component library — Button, Tag, Field/Input, Checkbox, Radio, Segmented, Toggle, Card, Table, Dialog/SlideOver |
src/components/shell/ | CandidateShell, CoursePlayerShell, AdminShell — the two app shells and their chrome rules |
src/components/auth/, src/app/(auth)/ | Register / Sign in screens |
src/components/portal/applicant-dashboard.tsx | The applicant-state dashboard + 3-step profile-completion modal |
src/app/portal/, src/app/admin/ | Route groups wiring the shells to real sessions |
src/app/preview/ | Auth/DB-free renders of both shells, for visual QA only |
prisma/schema.prisma | Full domain model, including the Slice 1 candidate/session/audit tables (column names/types kept verbatim from that handoff's README — later slices reference them by name) |
prisma/seed.ts | Reference data from the design handoffs |
src/lib/candidate-session.ts | Database-backed candidate sessions, getCurrentCandidate(), the applicant gate helpers |
src/app/actions/candidate-auth.ts | Server Actions: register, sign in, sign out, resend verification, update profile |
src/lib/rate-limit.ts | Postgres-backed fixed-window rate limiter (register/sign-in/resend, by IP and by email) |
src/proxy.ts | Route protection — layer 1 of the applicant gate (Next 16 renamed middleware.ts → proxy.ts) |
src/lib/auth.ts, src/lib/auth.config.ts | NextAuth config — staff/admin only |
src/lib/permissions.ts, src/lib/rbac.ts | The 17-permission catalogue, 6 role presets, staff-side audit logging |
tests/ | Vitest — applicant-number concurrency, session revocation, the three-layer applicant gate, per-field validation |
Per Slice 1's README: hiding nav items is a courtesy, not a boundary.
src/proxy.ts — real DB-backed session check (Next 16's Proxy defaults to the Node.js runtime, so this isn't a stateless guess); redirects an applicant away from a gated route.src/app/portal/{programme,deadlines,assessment,exams,credentials,ai}/page.tsx) — calls requireEnrolledPage() independently.requireEnrolled() in src/lib/candidate-session.ts — the seam future Server Actions/route handlers call before touching gated data. No gated data exists yet in this slice; this is the hook later slices use.Password reset (present in the design file but absent from Slice 1's data model/action list), staff-side suspend/reactivate UI (Slice 8), the marketing site, and every feature screen inside the two shells beyond the applicant dashboard (catalogue, payment, course player, assessment, admin operations, etc.).