ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Structured CS fundamentals: roadmaps, live classes, lessons, DSA practice and a daily learning loop.
Translation pending
EducationTypeScript · PLpgSQLGitHub @vaijaaaaaOnlineOwner 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
Rookie is a learning platform for CS fundamentals
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Learn Computer Science. Build Real Skills.
Rookie is a learning platform for CS fundamentals — programming, DSA, databases, operating
systems, networking, system design and web development. It combines a classroom, a roadmap,
a coding platform and a personal learning dashboard into one daily loop:
Open it every morning and immediately know what you're learning today, which class you have,
what to practice, how far along your roadmap you are, and what to do next.Read the full README ↗Learn Computer Science. Build Real Skills.
Rookie is a learning platform for CS fundamentals — programming, DSA, databases, operating systems, networking, system design and web development. It combines a classroom, a roadmap, a coding platform and a personal learning dashboard into one daily loop:
Open it every morning and immediately know what you're learning today, which class you have, what to practice, how far along your roadmap you are, and what to do next.
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Server Components, Server Actions, proxy.ts) |
| Language | TypeScript (strict) |
| UI | React 19, Tailwind CSS v4, shadcn-style components on radix-ui, Lucide icons, sonner toasts, cmdk command menu, Recharts |
| Forms | React Hook Form + Zod |
| Backend | Supabase — Postgres, Auth, Row Level Security, Realtime |
| Editor | CodeMirror 6 (@uiw/react-codemirror) |
There is no separate API server: Next.js → Supabase → Postgres. Business rules that must
hold no matter who calls (permissions, activity tracking, achievements, streaks) live in Postgres
as RLS policies, triggers and RPC functions.
Browser ──► Next.js (Server Components / Server Actions) ──► Supabase (PostgREST + Auth)
│ │
└── Client Components (browser Supabase client, Realtime) ──────┤
▼
Postgres: tables + RLS + triggers + RPCs
supabase/migrations/*_rls.sql.admin_create_user database function, which re-checks is_admin(). Admins can also reset a
user's password or delete the account. Supabase's own signup endpoint must be switched off in
the dashboard so it can't be called directly. Email + password is the only login method.student and admin (a user_role enum on profiles). New users are
always students. A trigger blocks role changes unless the caller is an admin; admins use the
admin_set_role RPC.student_progress, coding_submissions,
attendance, assignment_submissions, roadmap_node_progress) which call log_activity().
activity_logs has a unique (user_id, type, entity_id) key, so toggling a lesson on/off or
re-solving a problem can't farm activity. Streaks, recent activity, achievements and analytics
all read from this one log. Clients cannot write to it.achievements with JSON criteria
(count of an activity type, streak length, attendance_rate). They're evaluated after each
activity and unlocked automatically; unlocking creates a notification.course_enrollments). Classes with
no course are open sessions visible to every student. Following a roadmap enrolls you in its
courses.not started = no submission row; in_progress/submitted/reviewed
are stored; late is derived from due_at. A trigger prevents students from grading themselves
or editing reviewed work, and limits staff to grading fields.The MVP deliberately does not run arbitrary code on the server. Execution sits behind a
CodeRunner interface (src/services/execution):
browser-js-runner — runs JavaScript in an isolated Web Worker in the student's own browser
with a hard timeout and network APIs disabled.remote-runner — placeholder for a sandbox service (Judge0, Piston, Firecracker…). Configure
NEXT_PUBLIC_CODE_RUNNER_URL to enable Java/Python. Without it, Java/Python submissions are
stored with verdict pending.Students can only read sample test cases (RLS). Hidden tests are staff-only and are meant to be executed by the future server-side judge. Until then, verdicts reported by the browser runner are trusted — fine for a learning MVP, not for competitive grading.
src/
app/
(marketing)/ /, /about
(auth)/ /login, /forgot-password, /reset-password (no public signup)
auth/ email-link confirm route handler (password recovery)
onboarding/ 3-step onboarding → recommended roadmap
(app)/ hybrid layout: app shell if signed in, marketing chrome if not
courses/ public catalog, course page, lesson reader
roadmaps/ public roadmaps, visual learning path
classes/ class schedule
(protected)/ signed-in only (and onboarded students)
dashboard/ agenda/ attendance/ assignments/ practice/ progress/
notes/ achievements/ class/[id]/ profile/ settings/ notifications/
admin/ admin workspace: teaching, classes, attendance, content, users, analytics, settings
components/
ui/ design-system primitives (shadcn-style)
shared/ PageHeader, Section, StatCard, EmptyState, Markdown, badges…
layout/ app shell, sidebar, mobile nav, ⌘K search, notification bell
marketing/ dashboard/ agenda/ courses/ lesson/ roadmap/ classes/ attendance/
assignments/ coding/ progress/ notes/ instructor/ admin/ charts/ onboarding/ profile/
lib/
supabase/ server/browser clients + session-refreshing proxy helper
auth/ session helpers (requireProfile, requireRole) and sign-out action
permissions/ UI-level role helpers
utils/ formatting
services/ typed data access + server actions per feature, execution layer
types/ domain types mirroring the schema
proxy.ts refreshes Supabase session, redirects anonymous users from protected routes
supabase/
migrations/ 0001 schema · 0002 functions & triggers · 0003 RLS · 0004 trigger fixes ·
0005 two roles · 0006 admin-managed accounts · 0007 achievements · 0008 payments
content/ optional content scripts (e.g. java-roadmap.sql)
bootstrap-admin.sql creates the first admin account
reset-all-data.sql ⚠️ wipes all users and content (keeps schema)
scripts/
validate-db.mjs runs migrations + content in PGlite (in-process Postgres) and checks permissions
docs/CONVENTIONS.md engineering conventions
supabase/migrations/20261002000001_schema.sql, …0002_functions.sql, …0003_rls.sql,
…0004_trigger_fixes.sql, …0005_admin_student_roles.sql,
…0006_admin_user_management.sql, …0007_achievements.sql, …0008_payments.sql; ornpx supabase login
npx supabase link --project-ref <your-project-ref>
npx supabase db push
supabase/content/ — e.g. java-roadmap.sql adds a
18-section Java Programming roadmap. Scripts are re-runnable.http://localhost:3000/**
to redirect URLs (used by password-reset emails).supabase/bootstrap-admin.sql, replace the placeholder
password, and run it in the SQL editor (don't commit your real password). Log in with that
account and add everyone else from Admin → Users → Add user.notifications to the supabase_realtime publication.Copy .env.example to .env.local:
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Project URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Publishable key (sb_publishable_…). Safe for the browser — RLS protects data. |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Legacy anon key; used only if the publishable key is unset |
NEXT_PUBLIC_SITE_URL | Public URL used in auth email links |
NEXT_PUBLIC_CODE_RUNNER_URL | Optional sandbox execution service for Java/Python |
No service-role key is needed: the app always acts as the signed-in user. Never commit .env.local.
npm install
cp .env.example .env.local # fill in your Supabase values
npm run dev # http://localhost:3000
Checks:
npm run typecheck
npm run lint
npm run build
node scripts/validate-db.mjs # migrations + content + permission tests in PGlite (no Docker)
Deploy to Vercel (or any Node host):
NEXT_PUBLIC_SITE_URL to the production URL and add it to Supabase Auth redirect URLs.npx supabase db push), then run
supabase/bootstrap-admin.sql to create your admin.There are two roles: student and admin. Admins teach and run the platform — they
create courses, lessons, roadmaps and problems, schedule classes, take attendance, grade
assignments, post announcements and cohort agendas, and manage users and settings. Every
/admin/* page requires the admin role, and every write is enforced by RLS (is_admin()).
| Capability | Student | Admin |
|---|---|---|
| Dashboard, agenda, roadmaps, courses, lessons, practice, progress, notes, achievements | ✓ | ✓ |
| Read own attendance / submissions / notifications | ✓ | ✓ |
| Modify attendance | ✗ | ✓ |
| Create/edit courses, modules, lessons, roadmaps, coding problems | ✗ | ✓ |
| Schedule classes, take attendance | ✗ | ✓ |
| Assignments: create, review, grade | ✗ | ✓ |
| Announcements, cohort agendas | ✗ | ✓ |
| Manage users & roles, platform settings, analytics | ✗ | ✓ |
| Record monthly student payments | ✗ | ✓ |
The database enum still contains
instructorfor compatibility, but migration0005converts existing instructors to admins and a check constraint prevents the value from being used.
pg_cron or a scheduled function.owner_idcourse_idagenda_item_progress