ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Marketplace connecting students with teachers, tuition institutes and
campus lecturers across Sri Lanka. See ../rq_md/ for the product spec and
../req/ for the original static HTML prototype this app is being built
from — the design tokens, page map and feature list there are still the
source of truth for "what should this look like."
Next.js (App Router, TypeScript) · Tailwind CSS v4 + shadcn/ui (Base UI
primitives) · next-intl (English / Sinhala / Tamil) · Supabase (Postgres +
Auth + Storage + Realtime, not yet connected — see below) · Zod.查看完整 README ↗Marketplace connecting students with teachers, tuition institutes and
campus lecturers across Sri Lanka. See ../rq_md/ for the product spec and
../req/ for the original static HTML prototype this app is being built
from — the design tokens, page map and feature list there are still the
source of truth for "what should this look like."
Next.js (App Router, TypeScript) · Tailwind CSS v4 + shadcn/ui (Base UI
primitives) · next-intl (English / Sinhala / Tamil) · Supabase (Postgres +
Auth + Storage + Realtime, not yet connected — see below) · Zod.
npm install
npm run dev
Open http://localhost:3000 — it redirects to /en. Try /si and /ta
directly, or use the language switcher in the header.
No Supabase project is wired up yet; the homepage currently renders from
mock data (src/lib/mock-data.ts). To connect a real one:
supabase/migrations/*.sql, in numeric order — either
via the Supabase CLI (supabase link then supabase db push) or by
pasting each file into the SQL Editor in order. supabase/seed.sql adds
a handful of sample subjects for local testing..env.local.example to .env.local and fill in the project URL,
anon key, and service role key from Project Settings -> API.npx supabase gen types typescript --project-id <ref> > src/types/database.ts
(replaces the any placeholder currently there).src/
├── app/[locale]/ # (public), (auth), (dashboard)/*, admin — route groups
├── components/
│ ├── ui/ # shadcn primitives — don't hand-edit, re-run `shadcn add`
│ └── features/ # product components (ListingCard, GradeLadder, ...)
├── i18n/ # next-intl routing/navigation/request config
├── lib/
│ ├── supabase/ # client.ts (browser), server.ts (RLS-scoped), admin.ts (service role)
│ └── validation/ # zod schemas, one file per entity
├── server/actions/ # server actions, grouped by feature
└── types/ # database.ts (generated) + domain types
messages/ # en.json, si.json, ta.json — UI strings only
supabase/migrations/ # numbered SQL migrations, RLS co-located per table
messages/{locale}.json. Content that belongs
to a database row (subject names, note titles, ad copy) instead uses a
translations jsonb column on that table — see supabase/migrations/0007_subjects.sql
for the pattern. Don't mix the two: a new UI label goes in the JSON
files; a new piece of user-generated text needing translation gets a
translations column.src/i18n/routing.ts).
Missing keys fall back to the key name itself at dev time (a loud
placeholder) rather than failing the build, so partial translation work
never blocks shipping — check the browser console for MISSING_MESSAGE
warnings before calling a locale "done".locales.is_active, see src/i18n/active-locales.ts) independently of
which locales have a translation file — this lets a locale be soft-launched
without a deploy once Supabase is connected.src/lib/supabase/admin.ts bypasses RLS entirely. Only call it from a
server action that has already re-checked the caller's role itself —
the client believing it's an admin is never sufficient.notes or submissions (both private
buckets) — always mint a short-lived signed URL server-side.npm run dev # start the dev server
npm run build # production build (also runs the TypeScript check)
npm run lint # eslint