Skip to content
Julien Bigot, home
Menu
All work

05/E-learning platform · Serverless

LearnJS

14 interactive FR/EN JavaScript courses, with payments, magic links and edge-protected content.

Role
Design, content and development, solo
Period
Mar 2026
Status
Live
learnjs.eu landing page: "From beginner to developer who understands"
FR / EN courses
14
of development
4 jours
dependencies to verify JWTs
0

Context

A short project to put web fundamentals and a secure serverless architecture to the test, alongside my React work.

The problem

Protect paid content on a static site, without a classic database or framework, and handle refunds cleanly.

Architecture & technical choices

  1. 01

    JWT verified at the edge, dependency-free

    An Edge Function (Deno) checks the token’s HMAC-SHA256 signature itself with crypto.subtle. The cookie is HttpOnly, Secure and SameSite=Strict.

  2. 02

    Revocation on refund

    A signed Stripe webhook (charge.refunded) sets a revocation key with a TTL in Redis, checked on every request. A single active session limits account sharing.

  3. 03

    Magic links without enumeration

    A 15-minute JWT is exchanged for a session token; the response stays neutral whatever address is entered.

  4. 04

    Teaching components in vanilla JS

    Scroll-synced table of contents (IntersectionObserver), quizzes, progress tracking and home-made i18n, with no library at all.

Stack

  • JavaScript
  • HTML / CSS
  • Netlify Functions
  • Netlify Edge Functions (Deno)
  • Web Crypto
  • Stripe Checkout & webhooks
  • JWT HS256
  • Upstash Redis
  • Resend

Select an image to enlarge it.

  • 01learnjs.eu: 14 interactive FR/EN courses, in framework-free HTML/CSS/JS.
  • 02A free course: scroll-synced table of contents (IntersectionObserver), running mini-project, live demo.
  • 03The landing page on mobile, with a home-made language switcher.
  • 04Courses are designed for mobile too.