ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Your complete EST, SAT and ACT practice platform: timed mock exams, an explanation for every answer and a score by topic. Your first exam is free.
EducationGitHub @bobos12OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Commercial EST I preparation platform: public site and exam library, a timed examination engine, and a private admin dashboard. Next.js 16 (App Router, Cache Components) + Supabase (Postgres, Auth, Storage).
docs/EST_BLUEPRINT.mdsupabase/migrations| Phase | Scope | State |
|---|---|---|
| 1 | Inspect project & source materials | ✅ |
| 2 | Schema, security, auth, brand foundation | ✅ |
| 3 | Public website & exam library | ✅ |
| 4 | Examination engine (timer, autosave, resume, grading, results) | ✅ |
| 5 | Admin dashboard, students, exams editor, knowledge base | ✅ (needs live admin test) |
| 6 | AI exam generation → review → publish | ✅ (needs ANTHROPIC_API_KEY) |
| 7 | Plans, Paymob checkout, verified webhooks, renewals | ✅ (needs Paymob keys + sandbox test) |
| 8 | End-to-end testing | in progress — see "Launch checklist" |
eu-central-1).anon key and service_role key.Either with the Supabase CLI:
npx supabase login
npx supabase link --project-ref <your-project-ref>
npx supabase db push
…or paste each file in supabase/migrations/ into SQL Editor in filename order.
cp .env.example .env.local # then fill in the three Supabase values
npm install
npm run dev
Sign up through the site, then run once in the SQL Editor:
update public.profiles set role = 'admin' where email = '[email protected]';
After that, admins manage roles from the dashboard (every change is written to the audit log).
Authentication → URL Configuration: set Site URL to your domain (e.g. https://16hundred.app) and add
http://localhost:3000/** to Redirect URLs for local development. The default confirmation email works as is.
Optionally, for links that also work across devices, change Email Templates → Confirm signup to:
{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email&next=/dashboard
Database → Extensions → enable pg_cron, then:
select cron.schedule('close-expired-attempts', '* * * * *', 'select public.close_expired_attempts()');
select cron.schedule('expire-subscriptions', '*/15 * * * *', 'select public.expire_subscriptions()');
Access checks never depend on these jobs — they only tidy statuses.
update public.profiles set role = 'admin' where email = '[email protected]';SUPABASE_SERVICE_ROLE_KEY in .env.local (needed for payments).ANTHROPIC_API_KEY. Then: Admin → Knowledge base → upload each EST paper and its answer key
(link the key to its paper) → open the paper → Analyse with AI. Then Admin → Generate exams.PAYMOB_* values. Create a plan in Admin → Plans & payments.
The webhook URL is sent automatically with every checkout: <NEXT_PUBLIC_SITE_URL>/api/webhooks/paymob
— it must be publicly reachable (deploy, or use a tunnel for local testing).NEXT_PUBLIC_SITE_URL to the real domain, and add it to
Supabase → Authentication → URL Configuration.pg_cron and schedule the two jobs in "Scheduled jobs" below./admin)| Area | What it does |
|---|---|
| Overview | Students, active/expired subscriptions, published exams, attempts, revenue, payment outcomes |
| Exams | Create, edit details, add/edit/reorder questions with live preview and image upload, shared passages/tables, preview with answer key, approve, publish / unpublish / archive. Published exams are locked against edits. |
| Generate exams | Subject, topics/domains, question count, difficulty mix, duration, number of exams → drafts in review. A second independent AI pass flags any answer key it disagrees with. |
| Knowledge base | Upload official PDFs (private, de-duplicated by hash, never overwritten), analyse paper + answer key together, review extracted questions |
| Students | Search/filter, profile with attempts, subscriptions, payments; grant/revoke premium and change role — every action in the audit log |
| Plans & payments | Create/edit plans and prices, payment history with filters, subscriptions, webhook problems |
questions, question_options or
exam_questions (RLS). The exam screen loads through get_attempt_payload, which strips correct answers.start_attempt sets deadline_at; save_answer and
submit_attempt reject or expire work after the deadline (+15 s network grace). Refreshing resumes the
same open attempt.origin = 'source' can't be added to
student exams; they feed analysis and AI generation only.approved with exactly one correct option (enforced in the database).payment_events, never by a
browser redirect.requireAdmin) and by RLS.Requires a local Postgres 16:
PGHOST=localhost PGUSER=postgres supabase/tests/run.sh
Applies all migrations to a scratch database with Supabase auth stubs and runs 56 checks covering permissions, answer-key privacy, resume, server-side expiry, grading, access grants and audit, payment idempotency, tampered amounts, renewals, and the published-content lock.