Case study 03 / Data Science Institute
Python exams that run in the browser
A self-paced certification platform delivering two accredited data science programs. I was the sole engineer, working directly with the founders and owning the architecture end to end.
Role
Full-stack lead engineer
Years
2025 – 2026
Stack
Next.js 15, React 19, JupyterHub, Docker, PostgreSQL
Scope
Architecture, platform, exams, payments
The problem
An accredited certification can't be graded on a multiple-choice quiz — students have to write real Python, under proctoring, without installing anything. Doing that for every learner means giving each one a live sandbox, and doing it self-hosted means the bill has to stay predictable while the course content stays easy for non-engineers to edit.
What I built
- An in-browser Python environment: JupyterHub integrated into the Next.js platform, with a custom Clerk JWT authenticator (RS256/JWKS) for single sign-on and a per-user isolated Docker container spawned on demand.
- A dual-mode container architecture — lightweight auto-culled containers for practice, dedicated higher-resource ones for proctored exams, with bookings throttled to keep self-hosted costs predictable.
- The coding-exam pipeline end to end: scheduled slots, live proctoring via OctoProctor, automated notebook capture through the JupyterHub Contents API, submission archival to Cloudinary, and workspace locking after submit.
- The learner platform in Next.js 15, React 19 and TypeScript — parts, units and lessons served with TanStack Query, Zustand and Tailwind.
- A Sanity headless CMS syncing course content to PostgreSQL over signature-verified webhooks with tag-based cache invalidation, plus dual payment gateways (Stripe globally, Razorpay in India) with webhook-driven access provisioning.
Result
2
Accredited programs live
0 installs
Python runs in the browser
2 rails
Stripe and Razorpay