Skip to content
Shashi Gyawali
← All work

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
Next caseEV charging & parking UI04