ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A structured study companion for the IIT Madras BS in Management and Data Science: Level → Course → Week → Topic → Resources. Students find curriculum, notes, videos, books, practice questions and PYQs in 3–4 clicks; admins manage it all from a CMS.
Built with Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS v4 and pdf.js.
npm install # also copies the pdf.js worker into /public
npm run dev # http://localhost:3000
npm run build && npm start
Optional: set NEXT_PUBLIC_SITE_URL (used for canonical URLs, sitemap and JSON-LD).
By default the site ships with only the Qualifier Pack, Practice, PYQs, cheat sheets, Blog, accounts and admin. Programs, Skills, Courses, Notes, Videos, Books and Search are switched off (404 and hidden from navigation; see src/lib/site.ts). Turn them back on with NEXT_PUBLIC_SECTIONS, e.g. NEXT_PUBLIC_SECTIONS=notes,videos, or NEXT_PUBLIC_SECTIONS=all for the full site.
| Area | Route |
|---|---|
| Homepage (hero, search, programs, continue learning, notes, practice, videos, PYQs) | / |
| Program → levels (Foundation, Diploma, Degree) → courses | /programs/iitm-bs, /programs/iitm-bs/[level] |
| Course page (code, credits, prerequisites; tabs for curriculum, notes, videos, books, PYQs, practice, assignments) | /subjects/[course]?tab=… |
| Topic learning page (video + notes + quiz + books + PYQs, prev/next) | /subjects/[subject]/[topic] |
| Notes library with filters + pdf.js viewer (zoom, pages, in-document search, fullscreen, download, share) | /notes, /notes/[id] |
| Videos (lazy YouTube embed), Books (legal links only) | /videos, /books, /books/[slug] |
| PYQs with most-repeated-topic analysis; practise any paper | /pyqs, /pyqs/[id] |
| Practice: 6 modes, question-bank builder, 6 question types, "Why?" explanations, timed tests, weak-topic summary | /practice, /practice/session |
| Exam prep (level → course → Quiz 1 / Quiz 2 / End Term) | /exam-prep |
| Categorised global search | /search |
| Login / signup, student dashboard, saved resources | /login, /signup, /dashboard, /saved |
| Admin CMS: dashboard, analytics, curriculum builder, upload, review queue, reports, users, content tables | /admin/* |
Also: dark mode, mobile bottom navigation, breadcrumbs with BreadcrumbList JSON-LD, Course JSON-LD, sitemap/robots, empty and error states, report-a-resource, verified/outdated flags.
src/lib/types.ts domain types (mirror supabase/schema.sql)
src/lib/data/* seed content — replace via the CMS/database
src/lib/content.ts read-only query layer; the only file pages read data through
src/lib/store.ts per-student state (progress, bookmarks, attempts…), synced to the account by lib/supabase/sync.ts
src/lib/search.ts search index + ranking
src/components/ design system + feature components
supabase/schema.sql production schema with row-level security
The full official course list (50 courses: 8 Foundation, 10 Diploma in Data Analytics for Business incl. 2 projects, 6 other Diploma, 6 Degree core, 22 electives) is in src/lib/data/curriculum.ts. No course content is published yet: weeks, topics, notes, videos, PYQs and questions are empty, and every course shows a "coming soon" page. Add content via the CMS or the seed files.
supabase/schema.sql, then supabase/0002_user_state_and_papers.sql, then supabase/0003_cms.sql (and any later numbered files) in order. 0003 is safe to re-run. It also creates the private Storage bucket resources and copies the official course list into subjects..env.local (NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY). SUPABASE_SERVICE_ROLE_KEY is only needed by npm run seed:papers; the app itself never uses it.update profiles set role = 'super_admin' where id = (select id from auth.users where email = '[email protected]');
After that, give other people roles in /admin/users.NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY for Production and Preview. The build reads papers and CMS content from Supabase, so it fails without them. .env.example lists the optional variables. Don't add SUPABASE_SERVICE_ROLE_KEY.NEXT_PUBLIC_ values are baked in at build time./admin)| Role | Can |
|---|---|
| Contributor | Upload notes, videos and books; write questions; submit them for review; edit or delete their own unpublished items |
| Moderator | Everything above, plus publish, request changes, unpublish, set quality flags, edit the curriculum and papers, resolve reports, analytics |
| Admin | Everything above, plus users and roles (up to moderator), downloads, settings |
| Super admin | Everything, including granting and removing admin rights |
profiles.role (users can't change their own), every read runs under Row Level Security, and every write goes through a server action in src/app/admin/actions.ts that runs as the signed-in user. The /admin gate in the browser only decides what to show.src/lib/data/curriculum.ts. Weeks and topics for any course, and new courses (draft → published), are stored in subjects, units and topics.published_content() (src/lib/cms.ts), merged with the seed in src/lib/content.ts. Publishing refreshes the site immediately; otherwise pages revalidate every 5 minutes./api/files/[id] through signed URLs (1 hour to read, 5 minutes to download). Downloads are logged in downloads and counted on the resource.reports and appear in /admin/reports./admin/papers. npm run seed:papers copies the papers in the code back over those edits.Not done yet: per-user download rate limits, and Postgres full-text search for /search (it still searches in memory).
Yellow #FFD21C is an accent only: logo, primary CTA, active nav, progress, selection. Pages stay ~85% neutral. Contextual colours: teal = notes/resources, blue = video/info, purple = practice, green = success/PYQs. Tokens live in src/app/globals.css.