ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Portfolio of webapp
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Connecting verified tutors with families across Nepal — every match reviewed,
every step tracked, nothing left to chance.
Tuition Serve is a full-stack web application that matches home tutors
with students, with every request, application, and assignment mediated by
an admin — there is no unmoderated marketplace. Parents submit a request
without creating an account; tutors apply after completing a verified
onboarding profile; branch and super admins review, confirm, and assign.檢視完整 README ↗Admin-mediated home tuition matching platform
Connecting verified tutors with families across Nepal — every match reviewed, every step tracked, nothing left to chance.
Tuition Serve is a full-stack web application that matches home tutors with students, with every request, application, and assignment mediated by an admin — there is no unmoderated marketplace. Parents submit a request without creating an account; tutors apply after completing a verified onboarding profile; branch and super admins review, confirm, and assign.
The authoritative product, UX, domain, and technical specifications live in
docs/ — those documents are the source of truth for product
behavior. This README covers the engineering side: stack, setup, and
day-to-day scripts.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Server Actions) |
| Language | TypeScript, end to end |
| UI | React 19 + Tailwind CSS 4 (design tokens mirror the client's reference UI) |
| Validation | Zod schemas at every server boundary |
| Auth | Firebase Authentication (email/password + Google for tutors; provisioned-only for admins) |
| Database | Firestore — accessed only from server code via the Firebase Admin SDK |
| File storage | Firebase Storage (CVs, profile photos) — server-brokered only |
| Testing | Vitest |
| Package manager | pnpm — no workspaces/monorepo |
| Hosting | Vercel |
firestore.rules
denies all direct client reads/writes; every query and mutation goes
through server code using the Admin SDK. This is an explicit, enforced
rule in the codebase — not a convention.checkRevoked: true),
so a password change invalidates old sessions immediately./access-denied warning page and the attempt
is written to a permanent audit log — see
src/server/auth/guards.ts.src/app/ Routes — public site, tutor, admin, API routes
src/components/ UI components (public, tutor, admin, shared)
src/lib/firebase/ Firebase client SDK + Admin SDK initialization
src/server/domain/ Firestore collection access, types, UID generation, audit
src/server/actions/ Server Actions — validated mutations
src/server/queries/ Read-side data access, pagination, filters
src/server/auth/ Session cookies, role/branch guards, tutor provisioning
scripts/ Out-of-band operational scripts (admin provisioning, location import)
data/ Authoritative location dataset + provenance docs
docs/ Product/UX/domain/technical specifications
pnpm install
cp .env.example .env.local # then fill in Firebase project values
For local development, run the Firebase Emulator Suite (Auth + Firestore +
Storage) alongside the app — no real Firebase credentials are needed while
NEXT_PUBLIC_USE_FIREBASE_EMULATORS=true:
pnpm emulators # terminal 1 — Auth :9099 · Firestore :8080 · Storage :9199 · UI :4000
pnpm dev # terminal 2 — http://localhost:3000
To point at the real tution-serve Firebase project instead, set
NEXT_PUBLIC_USE_FIREBASE_EMULATORS=false and fill in
FIREBASE_ADMIN_PROJECT_ID / FIREBASE_ADMIN_CLIENT_EMAIL /
FIREBASE_ADMIN_PRIVATE_KEY from a Firebase service account.
Super Admin and Branch Admin accounts are never created through public signup — they're provisioned out of band:
pnpm provision-admin --role=SUPER_ADMIN [email protected] --password=... --name="Ops Admin"
pnpm provision-admin --role=BRANCH_ADMIN [email protected] --password=... \
--name="Janakpur Admin" --branch-name="Janakpur" --branch-city="Janakpur"
A Super Admin can also create a new branch and its Branch Admin inline from the Admins page in the dashboard.
The authoritative Nepal location hierarchy (Province → District → Local Government → Ward, with official 2025 GPO postal codes) must be imported before the Location step / parent request form will show options:
pnpm import-locations # imports data/locations/processed/*.json into Firestore
pnpm validate-locations # verifies hierarchy integrity, counts, postal-code uniqueness
See data/locations/SOURCES.md for full
provenance, licensing, the source-reconciliation methodology, and known
limitations (English names cover 445/753 local governments; no
locality/tole-level catalog exists officially below ward, so that stays a
free-text field).
pnpm seed-locationsstill exists but is superseded — it wrote the old provisional ~20-city dataset. Do not use it for new environments.
| Command | Purpose |
|---|---|
pnpm dev | 🖥️ Start the dev server |
pnpm build | 📦 Production build |
pnpm start | ▶️ Run the production build |
pnpm lint | 🧹 ESLint |
pnpm typecheck | 🔎 tsc --noEmit |
pnpm test | ✅ Unit tests (Vitest) |
pnpm test:watch | 👀 Unit tests in watch mode |
pnpm emulators | 🔥 Firebase Auth/Firestore/Storage emulators |
pnpm provision-admin --role=... --email=... | 🔑 Create a Super Admin / Branch Admin account |
pnpm import-locations | 🗺️ Import the authoritative Nepal location hierarchy |
pnpm validate-locations | ✔️ Validate imported location hierarchy integrity |
pnpm seed-locations | ⚠️ (superseded) Seed the old provisional province/city data |
pnpm typecheck # TypeScript, zero errors
pnpm lint # ESLint
pnpm test # Vitest unit tests
pnpm build # Production build — the final gate before every commit
Every server action is checked for role, branch, and ownership authorization; every list page is paginated (cursor-based, 20/page) rather than fetching full collections.
Deployed on Vercel (vercel.json).
Production builds must have real Firebase Admin SDK credentials
(FIREBASE_ADMIN_*) and NEXT_PUBLIC_USE_FIREBASE_EMULATORS=false set in
the project's environment variables — the emulator suite is local-only.
Tracked in detail in
docs/07_Tuition_Serve_Implementation_Plan.md;
the commit history is the authoritative changelog. At a glance, the
platform covers the full lifecycle:
Onboarding & Verification → Parent/School Requests → Opportunities & Applications
→ Assignment → Messaging & Notifications → Withdrawal / Reopen / Cancel
→ Security & Access Control
along with branch-scoped admin roles, a real Nepal location hierarchy (7,580 records), and full audit logging of sensitive actions.
Proprietary — all rights reserved. This is a private client project; no part of this repository may be reused, redistributed, or published without explicit permission from the project owner.
Built with ❤️ for connecting tutors and families across Nepal.