ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A private university for the things you actually learn from.
You file a transcript, a video link, or a document under a course, and Studiolo
turns it into two things you can use: highlights (what this material is
actually saying) and step by step (what to do to set it up). Everything
keeps its provenance — who made it, which course it came from, the link back to
the original.查看完整 README ↗A private university for the things you actually learn from.
You file a transcript, a video link, or a document under a course, and Studiolo turns it into two things you can use: highlights (what this material is actually saying) and step by step (what to do to set it up). Everything keeps its provenance — who made it, which course it came from, the link back to the original.
Runs two ways. With no configuration it stores everything in one browser (IndexedDB) with no account — open it and it works. Add two Supabase env vars and the same app becomes account-backed and follows you between devices; see docs/supabase-setup.md.
Faculty A field you keep returning to → sidebar
└── Course One body of material, yours or someone else's
│ grouped by track: "Level 0", "Level 1", "Companion"
└── Lesson One transcript / video / document / post
grouped by section: the module inside the course
A lesson always records where it came from: creator, material type, video link, link to the original lesson, and the source file name when the text came from an upload.
It holds three kinds of text, deliberately kept apart:
| what it is | |
|---|---|
| Transcript | what was said |
| Lesson text | what the author wrote — key points, action item, workbook links |
| My notes | what you thought |
Video embeds when it can (YouTube, Vimeo, Loom). Platforms that block framing get a card naming the host, so the video opens in a tab while the transcript and your notes stay put.
npm install
npm run dev # http://localhost:3000
Other scripts: npm run build, npm run start, npm run typecheck.
The app opens with a small demo library so there is something to look at. Settings → Start empty clears it; Reset brings it back.
| Screen | What it is for |
|---|---|
| Discover | What you are mid-way through, your faculties, pinned courses, what came in recently |
| Faculty | The courses inside one field of study |
| Course | Its lessons, filtered by to study / studying / done, with progress and source |
| Lesson | The study view: video, highlights, step-by-step checklist, full transcript, your own notes |
| Library | Every course across all faculties |
| Creators | Who your material came from, and what you have of theirs |
| Search | Full text across titles, topics, notes and every stored transcript |
| Settings | Export / import your library as JSON, reset, clear |
The Add material dialog takes:
.txt, .md, .vtt, .srt. Subtitle files are stripped
of timestamps, cue numbers and the duplicate lines YouTube exports, then
re-flowed into paragraphs (lib/transcript.ts).lib/insights.ts is the seam where a model will eventually sit. Today it runs
offline and deterministically, so the interface is real without any key or
network call:
Swapping this for a model call means replacing the body of analyzeTranscript
and setting engine: "model" on the result. Nothing in the UI has to change.
app/
layout.tsx Provider + shell
page.tsx Discover
faculty/[facultyId]/ Courses in a faculty
course/[courseId]/ Lessons in a course
lesson/[lessonId]/ The study view
library/ creators/ search/ settings/
components/
AppShell, Sidebar, TopBar Frame
FacultyDialog, CourseDialog, LessonDialog, CreatorPicker
cards.tsx, ui.tsx, Icon.tsx Cards, primitives, icon registry
lib/
types.ts The whole domain model — read this first
store.tsx React context: selectors + every mutation
persistence.ts The storage boundary (localStorage today)
insights.ts Transcript → highlights, steps, tools
transcript.ts Caption cleanup, YouTube ids, word count
seed.ts The demo library
theme.ts Accent tokens
Two boundaries are deliberate and worth keeping:
useLibrary(),
which goes through persistence.ts.Database in lib/types.ts is the wire shape. It is what Settings
exports, and what the Supabase tables should mirror.docs/import-format.md describes a one-course JSON file. Drop files on
Settings → Add course files, several at once.
Importing merges — it never wipes. Re-importing a course updates it in
place, keeping your status and notes while refreshing the source material, so a
course can be imported as titles first and re-pulled once the transcripts exist.
docs/examples/ has a worked file.
supabase/schema.sql is already in place for
it.analyzeTranscript with a server
route. The result is already cached on the lesson (Lesson.study) and tagged
with which engine produced it.