ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
SDEO (Male) Kulachi — Daily Enrollment Monitoring System
A mobile-first web application for the Sub-Divisional Education Officer (Male),
Kulachi, District Dera Ismail Khan, Khyber Pakhtunkhwa, Pakistan. Headteachers/
Incharges of government primary schools submit daily enrollment data through a
simple mobile app; the SDEO office monitors submissions in real time and every
report can be forwarded to the official SDEO WhatsApp number in one tap.
• Frontend: Next.js (App Router), React, TypeScript, Tailwind CSS
• Backend: Supabase (PostgreSQL + Auth + Row Level Security)
• Deployment: VercelREADME 전문 보기 ↗A mobile-first web application for the Sub-Divisional Education Officer (Male), Kulachi, District Dera Ismail Khan, Khyber Pakhtunkhwa, Pakistan. Headteachers/ Incharges of government primary schools submit daily enrollment data through a simple mobile app; the SDEO office monitors submissions in real time and every report can be forwarded to the official SDEO WhatsApp number in one tap.
src/
app/
page.tsx Landing page ("/")
login/page.tsx Headteacher login ("/login")
dashboard/page.tsx Headteacher dashboard ("/dashboard")
submit-report/
page.tsx Daily enrollment form ("/submit-report")
SubmitReportForm.tsx Client form + WhatsApp confirmation
history/page.tsx Submission history ("/history")
admin/
page.tsx Admin dashboard ("/admin")
EnrollmentTrendChart.tsx Recharts trend chart (client)
schools/
page.tsx School management ("/admin/schools")
SchoolsManager.tsx CRUD UI (client)
users/
page.tsx User management ("/admin/users")
UsersManager.tsx Add/assign headteachers (client)
reports/
page.tsx Reports & analytics ("/admin/reports")
ReportsExplorer.tsx Filter/export/print (client)
api/admin/headteachers/route.ts Server route: create headteacher auth account
components/ Reusable UI: Button, Input, Select, Card,
StatCard, Alert, EmptyState, Spinner, Header,
BottomNav, AdminNav, SignOutButton
lib/
supabase/
client.ts Browser Supabase client
server.ts Server Component / Route Handler client
middleware.ts Session refresh + route protection
admin.ts Service-role client (server only)
auth.ts getCurrentUser() helper (profile + school)
types.ts Shared TypeScript types
validation.ts Zod schemas (form validation)
whatsapp.ts WhatsApp message formatter + deep link
date.ts Date helpers
csv.ts CSV export helper
middleware.ts Next.js middleware entry point
supabase/
schema.sql Full database schema + RLS policies
Three tables, defined in supabase/schema.sql:
schools
| column | type | notes |
|---|---|---|
| id | uuid, PK | |
| school_name | text | |
| emis_code | text | unique |
| district | text | default "Dera Ismail Khan" |
| tehsil | text | default "Kulachi" |
| circle | text | nullable |
| status | enum(active,inactive) | |
| created_at | timestamptz |
profiles (1:1 with auth.users)
| column | type | notes |
|---|---|---|
| id | uuid, PK | references auth.users(id) |
| full_name | text | |
| mobile_number | text | |
| designation | text | default "Headteacher/Incharge" |
| school_id | uuid, FK → schools | one headteacher per school |
| role | enum(headteacher,admin) | |
| created_at | timestamptz |
daily_enrollment
| column | type | notes |
|---|---|---|
| id | uuid, PK | |
| school_id | uuid, FK → schools | |
| user_id | uuid, FK → profiles | |
| report_date | date | default current_date |
| dropout / public_admission / private_admission / fresh_admission / total_enrollment | integer | >= 0 |
| submitted_at | timestamptz | |
| updated_at | timestamptz | auto-updated via trigger |
Unique constraint: (school_id, report_date) — prevents duplicate reports
for the same school on the same day (enforced at the database level and
surfaced as a friendly message in the UI).
Row Level Security:
SELECT/INSERT/UPDATE only rows for their own
school_id (via current_school_id()), and cannot delete reports.admin) can read/write everything, verified via a
SECURITY DEFINER is_admin() function to avoid recursive RLS checks.handle_new_user) auto-creates a profiles row for every new
auth.users signup.Copy .env.example to .env.local and fill in:
| Variable | Where to find it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Project Settings → API (server only, used by /api/admin/headteachers to create Headteacher logins) |
NEXT_PUBLIC_OFFICIAL_WHATSAPP_NUMBER | Official SDEO (Male) Kulachi WhatsApp number, digits only with country code, e.g. 923001234567 |
The WhatsApp number is never hardcoded in the app — it is read from this
environment variable everywhere (src/lib/whatsapp.ts).
npm install
supabase/schema.sql.update public.profiles set role = 'admin', school_id = null
where id = (select id from auth.users where email = '[email protected]');
.env.example to .env.local
and fill in your project's values.npm run dev
Visit http://localhost:3000./admin (redirects automatically after login),
add schools under Schools, then add Headteacher accounts under
Users and assign each to a school. Headteachers then log in at
/login and use /submit-report daily.git init, commit, and push
to a new GitHub repo)..env.example, for both
Production and Preview environments.src/app/api/** route
handlers (server-side), never shipped to the browser.CHECK (... >= 0)).NEXT_PUBLIC_OFFICIAL_WHATSAPP_NUMBER config and src/lib/whatsapp.ts
formatter are already isolated for reuse)./admin/reports).