ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A web platform for managing the EA Netherlands Intro Fellowship programme. Participants work through a 5-week reading curriculum, facilitators track their group's progress and schedule sessions, and coordinators manage applications, groups, and participants through an admin panel.
Live URL: https://introcourse.effectiefaltruisme.nl
Stack: Next.js 15 (App Router) · Drizzle ORM · PGlite (dev) / Neon Postgres (prod) · Tailwind CSS v4README 전문 보기 ↗A web platform for managing the EA Netherlands Intro Fellowship programme. Participants work through a 5-week reading curriculum, facilitators track their group's progress and schedule sessions, and coordinators manage applications, groups, and participants through an admin panel.
Live URL: https://introcourse.effectiefaltruisme.nl
Stack: Next.js 15 (App Router) · Drizzle ORM · PGlite (dev) / Neon Postgres (prod) · Tailwind CSS v4
npm install
npm run dev # starts on http://localhost:3000
On first run, the database is created automatically at data/introcourse-db/ (PGlite). No manual migration step needed in development — ensureMigrated() runs on the first incoming request.
To seed test data (participants, groups, sample progress):
npm run db:seed
To reset the local database:
rm -rf data/introcourse-db
src/
├── app/ # Next.js App Router pages & API routes
│ ├── admin/ # Coordinator-only admin panel
│ ├── apply/ # Public application form
│ ├── auth/ # Login, logout, magic-link verify
│ ├── group/[groupId]/ # Group chat + facilitator overview
│ ├── materials/ # Reading materials (sidebar layout)
│ ├── sessions/ # Session scheduling (facilitator)
│ └── account/ # Participant account page
├── components/
│ ├── sidebar.tsx # Main materials sidebar with nav links
│ └── ...
├── db/
│ ├── schema.ts # Drizzle schema (single source of truth)
│ └── index.ts # DB connection (PGlite / Neon dual-mode)
├── lib/
│ ├── auth.ts # Session cookie helpers
│ ├── lessons.ts # WEEK_DEFS, getAllWeeksWithLessons()
│ └── email.ts # sendEmail() wrapper (Resend + console fallback)
content/
└── modules/ # MDX lesson files (week-N-slug.mdx)
drizzle/ # SQL migration files
| Role | Access |
|---|---|
| participant | Materials, My account, Group chat |
| facilitator | All participant pages + Sessions, Group overview |
| admin | All pages + full admin panel |
Role is set in the participants table. Admins log in via the /admin/login password page; everyone else uses magic links.
/materialscontent/modules/lessonProgress table (by scroll depth / quiz submit)/group/[groupId]/accountThe left sidebar shows all relevant links for the logged-in user:
Facilitators see an extended navigation on all pages:
Materials | My account | Group chat | Sessions | Overview
/sessions/group/[groupId]/overview/materials)Access the admin panel at /admin (password login required).
/admin/participants/admin/groups/admin/applicationsparticipant record/admin/form-groups/admin/facilitators/admin/sessionsURL: /apply (public, no login required)
4-step form matching the Typeform intake questionnaire:
| Step | Fields |
|---|---|
| 1 — Motivation | Main reason for joining (multi-select, max 2); what prompted you |
| 2 — Background | Education level; career stage; occupation; work area; motivation essay (~120 words) |
| 3 — Logistics | Language preference (NL/EN); availability (Mon 17:30, Mon 19:30, Thu 17:30, Thu 19:30, Other); online/in-person preference |
| 4 — Contact | Name; email; phone; city; LinkedIn URL; how you heard about us; privacy consent checkbox |
Submissions are stored in the applications table. Privacy consent is required (400 error if unchecked).
/auth/loginlogin_tokens and emailed via Resend (or logged to console in dev)/auth/verify?token=... → session cookie set → redirect to /materialsDev shortcut: after requesting a magic link, fetch the token from:
GET /api/dev/latest-email
Returns { to, subject, links: [url] } — navigate to links[0] to sign in instantly.
/admin/loginADMIN_PASSWORD environment variablePOST /auth/logout — clears the session cookieSchema is defined in src/db/schema.ts. After changing the schema:
npm run db:generate # generates a new SQL migration in drizzle/
npm run db:migrate # applies pending migrations
Migrations run automatically on the first request in dev (via ensureMigrated()). In production they run on deploy via npm run db:migrate.
| Table | Purpose |
|---|---|
participants | All users (participants, facilitators, admins) |
groups | Cohort groups |
applications | Intake form submissions |
lessonProgress | Per-user per-lesson scroll/completion tracking |
fellowshipSessions | Scheduled group sessions |
groupPosts / groupPostReplies | Group discussion board |
login_tokens | Magic-link tokens (expire after 30 min) |
email_log | Dev-only email log for the /api/dev/latest-email endpoint |
Lessons live in content/modules/ as MDX files. The sidebar and navigation update automatically when files are added or removed.
---
title: "Week 1: Doing good better"
week: 1
description: "An introduction to effective altruism."
estimatedMinutes: 45
exercises:
- key: unique_key
question: "Your question here"
type: textarea # textarea | text | radio | checkbox
options: # required for radio / checkbox
- Option A
- Option B
required: true
---
content/modules/week-N-slug.mdx with the frontmatter above| Type key | Icon | Meaning |
|---|---|---|
reading | 📖 | Standard reading lesson |
objectives | 🎯 | Learning objectives |
quiz | ❓ | Comprehension quiz |
exercise | ✏️ | Interactive exercise |
wrap | ✅ | Week wrap-up |
appendix | 📎 | Optional extra reading |
Copy .env.example to .env.local and fill in the values:
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | Prod only | Neon Postgres connection string. Omit to use local PGlite. |
RESEND_API_KEY | Optional | Resend API key for sending real emails. Falls back to console logging. |
ADMIN_PASSWORD | Yes | Password for the /admin/login page |
SESSION_SECRET | Yes | Secret used to sign session cookies (min 32 chars) |
NEXT_PUBLIC_BASE_URL | Yes | Full origin URL, e.g. https://introcourse.effectiefaltruisme.nl |
The app deploys to Vercel automatically on push to main.
git push origin main # triggers Vercel deploy
Database: set DATABASE_URL in Vercel environment variables to your Neon Postgres connection string.
Migrations: add a build command override in Vercel: npm run db:migrate && next build.
DATABASE_URL in VercelADMIN_PASSWORD, SESSION_SECRET, NEXT_PUBLIC_BASE_URL, and optionally RESEND_API_KEYmain — Vercel builds, runs migrations, and deploysean-office-main/ is a read-only reference folder. All changes go in this repository only.