ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
A distraction-free social feed where students and seniors share study experience.
Translation pending
EducationJavaScript · CSSGitHub @HarryTrieuOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A study community and peer-mentor marketplace for Deakin University students.
Students post questions and advice by unit, and AI tags, summarises and
moderates each post. When they want one-on-one help, an AI interview matches
them with a senior who got a Distinction or High Distinction in that unit.
They can chat with an AI preview of that mentor's teaching style, then book a
real session.Read the full README ↗A study community and peer-mentor marketplace for Deakin University students. Students post questions and advice by unit, and AI tags, summarises and moderates each post. When they want one-on-one help, an AI interview matches them with a senior who got a Distinction or High Distinction in that unit. They can chat with an AI preview of that mentor's teaching style, then book a real session.
Live: https://sodu-three.vercel.app
/privacy. Demo personas let anyone try every role without signing in.npm install
cp .env.example .env.local # fill in what you have; see Environment
npm run dev
Open http://localhost:3000. With no keys, Sodu runs on labelled demo data, and every AI feature falls back to a simple built-in version. Google sign-in, messages, sessions and anything else saved per person need Supabase.
supabase/schema.sql, then the files in supabase/migrations/ in this order: google-login, sponsored-posts, session-journey, study-plan, live-fixes, community-plus. Every migration only adds tables and columns, and each is safe to run again.npm run seed./auth/callback as the redirect.| Name | Used for | Missing means |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Database, sign-in, realtime | Demo data only, no sign-in |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Sign-in and realtime in the browser (the public anon key, never a secret key) | No sign-in or live updates |
SUPABASE_SERVICE_ROLE_KEY | Server-only database access | Nothing is saved |
GEMINI_API_KEY | Tagging, moderation, matching, the AI mentor, study plans, translation | Built-in fallbacks, no translation |
GEMINI_MODEL | Optional model override (default gemini-flash-latest) | Default model |
CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET | Image and PDF uploads | Uploads return a placeholder |
DEMO_MODE | Set to false to switch off the demo personas (real accounts only) | Demo personas on |
Secret keys are only read on the server and never prefixed with NEXT_PUBLIC_. Row level security denies all direct access; the browser only reaches data through the API routes, which check who is asking.
npm test # 43 unit tests: session, money, ranking and safety rules (seconds, no keys)
npm run test:permissions # 37 private actions tried by the wrong person; needs the app running on :3107
npm run test:ai # 32 real Gemini cases; needs GEMINI_API_KEY, writes tests/ai-report.md
To test another copy of the app, set SODU_URL, for example SODU_URL=https://sodu-three.vercel.app npm run test:permissions. The permission tests only send requests that must be refused, so they never change data.
Next.js 16 (App Router, JavaScript) and React 19, with Tailwind v4, shadcn/ui on Base UI, and Lucide icons. Supabase handles Postgres, Google auth and Realtime. Gemini does the AI, called over REST from the server only, with zod-validated output. Cloudinary stores uploads. The app is hosted on Vercel in Sydney (syd1).
| Path | What's there |
|---|---|
app/ | Pages: Home, unit/[code] (feed and study plan), communities, interest/[slug], mentors/[unit] (matching and the mentor page), mentor (hub and apply), sessions/[id], messages, notifications, profile/[id], search, review, welcome, privacy |
app/api/ | One folder per API route. Each checks who is asking through lib/actor.js and validates input with zod |
lib/ | Shared rules: rank.js (feed), sessions.js (session states), membership.js (fees and guarantee), enrich.js (post AI and moderation), mentor-ai.js (matching and the AI mentor), study-plan.js, sponsored.js, seed.js (demo data) |
components/ | UI components |
supabase/ | schema.sql and the migrations |
tests/ | Unit, permission and AI test sets |
Docs/, Worklog/ | How it works, the architecture file map, and the change log |
u- ids; demo personas have p1 to p14.