ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Protected video courses and course-aligned medical MCQ practice with timed exams, instant explanations, and progress analytics.
EducationJavaScript · PLpgSQLGitHub @Youssef256DOnlineOwner 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
MedBank medical MCQ bank and protected video-course learning platform
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
MedBank is a hosted browser app for medical students. The website is static on GitHub Pages, and the live hosted Supabase project is the single source of truth for auth, courses, questions, progress, enrollments, and admin data.
The app does not need a local Supabase instance, local database, or your laptop to stay running. Once GitHub Pages and the hosted Supabase project are available, students and admins can use the app from the web.Read the full README ↗MedBank is a hosted browser app for medical students. The website is static on GitHub Pages, and the live hosted Supabase project is the single source of truth for auth, courses, questions, progress, enrollments, and admin data.
Open the deployed site:
https://youssef256d.github.io/Medbank-Website/The app does not need a local Supabase instance, local database, or your laptop to stay running. Once GitHub Pages and the hosted Supabase project are available, students and admins can use the app from the web.
timed/tutor), source (all/unused/incorrect/flagged), and randomizationCanonical legal-page copy lives in /Users/youssefayoub/Documents/Apps/MCQs Website/docs/legal/:
privacy.md — Privacy Policyterms.md — Terms of Servicesupport.md — Support Policydeletion.md — Data Deletion InstructionsThe public Privacy Policy URL for Apple App Store Connect and Google Play Console is:
https://youssef256d.github.io/Medbank-Website/privacy.htmlThe public account-deletion URL for Google Play Console is:
https://youssef256d.github.io/Medbank-Website/deletion.htmlThese files are source copy for generated/public legal pages. Keep them in sync when privacy, retention, support, account deletion, or platform behavior changes.
Hosted Supabase is the database for the project. Browser storage is only used for session state, route memory, theme preference, and offline/cache safety; it is not the source of truth.
Supabase is wired through:
/Users/youssefayoub/Documents/Apps/MCQs Website/supabase.config.jshttps://fzjzjzdamehxbgikiskt.supabase.cosupabase.config.js/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/migrationsNotes:
SUPABASE_SERVICE_ROLE_KEY in frontend files.profiles, courses, course_topics, questions, test_blocks, etc.).app_state sync path is now limited to non-relational settings/queues only (to avoid duplicate heavy writes and improve responsiveness).g:<storage_key>u:<auth.uid>:<storage_key>This repo now follows an online-only Supabase connection model:
index.html + bootstrap.js + main.js):
supabase-js/Users/youssefayoub/Documents/Apps/MCQs Website/supabase.config.js/api/*.js and supabase/functions/*):
SUPABASE_SERVICE_ROLE_KEYIn Supabase Dashboard:
medbank://auth/callbackYou still need to confirm these values in the Supabase project UI:
Connect
URL Configuration
Site URL to your deployed frontend URLProviders
question-images bucket if you want image upload to workSUPABASE_SERVICE_ROLE_KEYALLOWED_ORIGIN/api backend instead, set the same server env vars thereRecommended connection selection:
Project URL + publishable/anon key for this website frontend.This project is static (index.html + main.js + styles.css), so GitHub Pages works.
main.Validate Changes GitHub Action runs automatically.Quick GitHub Pages steps:
main and / (root)Alternative hosts (often easier for env management): Netlify, Vercel, Cloudflare Pages.
This repo now includes a backend function for sensitive admin actions:
/Users/youssefayoub/Documents/Apps/MCQs Website/api/admin-delete-user.js/Users/youssefayoub/Documents/Apps/MCQs Website/api/admin-set-user-access.js/Users/youssefayoub/Documents/Apps/MCQs Website/api/admin-set-user-password.js/Users/youssefayoub/Documents/Apps/MCQs Website/api/_supabase.jsWhat it does:
profiles (admin only).SUPABASE_SERVICE_ROLE_KEY (server-side only).profiles (server-side only).SUPABASE_SERVICE_ROLE_KEY (server-side only).Required environment variables (server):
SUPABASE_URL (or NEXT_PUBLIC_SUPABASE_URL / PUBLIC_SUPABASE_URL)SUPABASE_SERVICE_ROLE_KEY (or SUPABASE_SECRET_KEY)ALLOWED_ORIGIN (optional, defaults to *)Frontend config:
/Users/youssefayoub/Documents/Apps/MCQs Website/supabase.config.js now supports serverApiBaseUrl."") for GitHub Pages/static deploys."/api".https://your-api.vercel.app/api).For GitHub Pages-only deploys, serverApiBaseUrl can stay empty and the app will use Supabase Edge Functions fallback.
The production GitHub Pages deploy uses Supabase Edge Functions as the canonical admin API:
/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-delete-user/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-create-user/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-set-user-access/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-set-user-password/index.tsThe /api/*.js files are deprecated in place and retained only for an optional
Vercel/Netlify-style hosting path where serverApiBaseUrl is set. Do not extend
the /api copies for production behavior; extend the Edge Functions instead.
/api backend)You can deploy these Edge Functions and keep serverApiBaseUrl empty:
/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-delete-user/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-create-user/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-set-user-access/index.ts/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/functions/admin-set-user-password/index.tsDeploy to the hosted Supabase project:
supabase functions deploy admin-delete-user
supabase functions deploy admin-create-user
supabase functions deploy admin-set-user-access
supabase functions deploy admin-set-user-password
Optional CORS allow-list (defaults to * if not set):
supabase secrets set ALLOWED_ORIGIN=https://your-site.example.com
How it works with this app:
serverApiBaseUrl/admin-create-user, serverApiBaseUrl/admin-delete-user, serverApiBaseUrl/admin-set-user-access, and serverApiBaseUrl/admin-set-user-password if configured.https://<project-ref>.supabase.co/functions/v1/admin-create-userhttps://<project-ref>.supabase.co/functions/v1/admin-delete-userhttps://<project-ref>.supabase.co/functions/v1/admin-set-user-accesshttps://<project-ref>.supabase.co/functions/v1/admin-set-user-passwordLong course videos should use Cloudflare Stream, not Supabase Storage. Supabase still stores the lesson row, course access, progress, and the cloudflare-stream://<video_uid> reference.
For a temporary free setup, keep cloudflareStreamEnabled: false in supabase.config.js. The app will upload lesson videos to the private Supabase Storage bucket and show the student-name watermark in the lesson player. This is useful for quick testing, but it is not as secure or scalable as Cloudflare Stream for 30 minute to 3 hour videos.
Required Supabase Edge Function secrets:
supabase secrets set CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id
supabase secrets set CLOUDFLARE_STREAM_API_TOKEN=your_stream_api_token
supabase secrets set CLOUDFLARE_STREAM_CUSTOMER_CODE=your_customer_code
supabase secrets set ALLOWED_ORIGIN=https://youssef256d.github.io
The Cloudflare token should have Stream permissions. The customer code is the value in Stream player URLs like customer-<CODE>.cloudflarestream.com.
Deploy the video functions:
supabase functions deploy cloudflare-stream-tus-upload
supabase functions deploy cloudflare-stream-token
Protection model:
The real PostgreSQL schema lives in hosted Supabase. Keep database changes in migrations:
/Users/youssefayoub/Documents/Apps/MCQs Website/supabase/migrationsApply migrations to the hosted project only:
supabase db push --dns-resolver https
No local Postgres database is required for the website to run.
The production data path is hosted Supabase. Local browser storage remains only a cache/UX layer for route memory, theme, and offline-safe pending writes.
sessions, incorrect queue, flashcards) into user-scoped cloud keys.app_state RLS policies were migrated to support global/user-scoped key patterns.profiles, courses, course_topics, questions, question_choices, test_blocks, test_block_items, test_responses) with indexes and RLS.Applied Supabase migrations:
scale_app_state_keys_and_rls_for_2000_usersoptimize_app_state_rls_and_indexescreate_core_relational_tables_for_2000_usersadd_external_ids_and_foreign_key_indexes