Cliquer pour passer

Projet freelance2026

Russian with Julia

Next.jsConvexStripeCloudflare R2Google Calendar APIResendConvex Authshadcn/uiTailwindTypeScript

Le site d'une prof de russe internationale

Site freelance complet pour Julia, professeure particulière de russe avec plus de 500 élèves répartis dans 25 pays. La spécificité du projet : combiner dans un seul site une vitrine grand public, un système de réservation et de paiement en ligne, et une plateforme de cours vidéo en ligne payants achetables à l'unité. Le tout pensé pour qu'elle soit ensuite totalement autonome (elle ajoute ses cours, gère ses élèves, et reprend la main sur son site sans avoir besoin de moi).

Vue d'ensemble01

Une vitrine ouverte à tous, un espace privé pour ses élèves, et une réservation en moins d'une minute.

Le site d'une prof de russe internationale
Fig.01 — Page d'accueilrussianwithjulia.com

Le site combine deux mondes en général séparés : une vitrine publique consultable sans la moindre friction, et un espace privé pour les élèves qui achètent les cours vidéo. Tout le marketing est ouvert : on parcourt les sections, on lit les avis, on regarde la carte du monde des élèves, et on peut réserver un premier appel sans avoir à créer de compte.

La connexion n'apparaît qu'au moment où elle a vraiment du sens, pour retrouver les cours déjà achetés. L'élève reçoit un lien de connexion par email, sans mot de passe, et accède à son tableau de bord. La prof, elle, dispose d'un espace administrateur où elle gère ses cours, ses élèves et son agenda en complète autonomie.

Le site est en ligne sur russianwithjulia.com, n'hésitez pas à aller le visiter pour vous en faire votre propre idée.

Enjeux & défis02

Trois questions à trancher avant la première ligne de code.

Chaque pilier ci-dessous correspond à un choix structurant : ce qui rend ce site spécifique, et ce qui l'a forcé à sortir des sentiers battus du site vitrine classique.

Enjeu n°1

Paiement Stripe et Google Calendar enchaînés

L'élève choisit un créneau, paie en ligne, reçoit l'invitation Google Calendar avec lien de visioconférence : toute la chaîne tient en quelques secondes, sans intervention manuelle de la prof.

Enjeu n°2

Une plateforme de cours vidéo auto-hébergée

Une vraie alternative à Podia ou Teachable, sans abonnement récurrent et mieux protégée que YouTube. Packs de leçons achetables à l'unité, vidéos servies par URL signée depuis Cloudflare R2, zéro frais d'egress.

Enjeu n°3

Une direction artistique qui retient

Logo, palette, carte du monde des élèves, témoignages bilingues, micro-interactions soignées. Une home one-page efficace pour le marketing, un espace dédié pour les cours payants : un site qu'on a envie de parcourir, et qui génère naturellement du trafic.

Section03

La carte des élèves dans le monde

La carte du monde est l'une des sections que j'ai le plus aimé construire. Chaque point correspond à un élève réel : la carte traduit visuellement la dimension internationale de Julia, qui enseigne à plus de 500 personnes réparties dans 25 pays. Les noms des villes les plus représentatives sont positionnés à la main, ce qui donne un rendu plus humain qu'un placement automatique. Pour la voir vivre, le mieux est encore d'aller faire un tour sur russianwithjulia.com.

Le site d'une prof de russe internationale — La carte des élèves dans le monde — vue 0
Section04

La réservation d'un premier appel

Le widget de réservation occupe la moitié droite de l'écran : un calendrier, des créneaux disponibles, un bouton de paiement, et c'est tout. L'élève choisit son moment, paie en ligne, et reçoit dans la foulée une invitation Google Calendar avec un lien de visioconférence prêt à l'emploi. L'évènement apparaît directement dans l'agenda de la prof, dans son fuseau horaire à elle. Aucune saisie manuelle, aucun email à envoyer.

Le site d'une prof de russe internationale — La réservation d'un premier appel — vue 0
Section05

Témoignages bilingues, espace élève et admin

Le carrousel des avis défile en continu, mêlant alphabets cyrillique et latin (j'ai uniformisé les avis en anglais). Le composant vient à l'origine de 21st.dev, retravaillé pour coller à l'identité du site. Côté élève, un tableau de bord donne accès aux packs achetés et aux leçons en streaming. Côté admin, Julia crée ses formules, uploade ses vidéos directement vers le stockage, suit ses élèves et connecte son agenda Google.

Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 0
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 1
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 2
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 3
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 4
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 5
Le site d'une prof de russe internationale — Témoignages bilingues, espace élève et admin — vue 6
Côté technique06

Six décisions qui ont fait le projet.

Pour les développeurs et les recruteurs qui ouvrent cette page : voici les choix techniques que ce projet m'a obligé à formuler, pas ceux que j'aurais pris par défaut. Chaque entrée est documentée en interne sous forme d'ADR (Architecture Decision Record).

01

Combiner site vitrine et application authentifiée dans un seul site

La plupart des sites font l'un ou l'autre : un one-page de présentation, ou bien une vraie application qui demande de se connecter dès l'arrivée. Ici les deux cohabitent. Tout le marketing reste public, instantanément consultable. La connexion n'apparaît qu'au moment où elle a vraiment du sens (acheter un pack ou retrouver ses cours déjà achetés). Pas de mur d'authentification au premier contact, mais une vraie session sécurisée pour la partie payante.

02

Authentification sans mot de passe (magic link)

Les élèves comme la prof se connectent en recevant un lien à usage unique sur leur email : un clic, et la session est ouverte. Aucun mot de passe à créer, à mémoriser, à oublier ou à réinitialiser. Côté technique, c'est Convex Auth qui gère le flow, avec Resend pour l'envoi des emails depuis un domaine professionnel vérifié. Le passage en production a demandé de configurer des records DNS spécifiques (SPF, DKIM) sur la zone du domaine pour garantir que les emails arrivent bien dans la boîte de réception et pas en spam.

03

Paiement et calendrier enchaînés en moins de cinq secondes

L'élève choisit un créneau et paie via Stripe. Dès que le paiement est confirmé côté serveur, un évènement Google Calendar est créé automatiquement dans l'agenda de la prof, avec un lien de visioconférence généré à la volée et l'élève invité. Toute la chaîne (paiement, écriture en base de données, création de l'évènement, envoi de l'invitation) tient en quelques secondes. La prof n'a strictement rien à faire entre la réservation et le rendez-vous lui-même.

04

Hébergement vidéo privé sur Cloudflare R2

Cloudflare R2 a été choisi plutôt qu'AWS S3 pour une raison simple : R2 ne facture pas la bande passante sortante, là où S3 facture chaque gigaoctet servi. Sur de la diffusion vidéo, c'est ce poste-là qui explose en premier. Les 10 Go de stockage gratuits suffisent largement pour des cours de langue, et même en dépassant, le coût reste minime. Surtout, c'est une vraie alternative aux abonnements Podia ou Teachable à 20-40€/mois qui étaient l'option à éviter. L'admin uploade ses fichiers directement depuis son navigateur via une URL pré-signée : la vidéo ne transite jamais par le serveur Next.js, ce qui évite les frais de proxy et accélère les uploads.

05

Carte du monde des élèves : placement manuel plutôt qu'algorithme

La carte est rendue par dotted-map, une petite bibliothèque qui transforme une carte du monde en grille de points stylisée. Première tentative pour placer les noms des villes : un algorithme automatique qui devait éviter les chevauchements de labels, avec des traits pointillés reliant chaque nom à son point. Trop fragile, et le rendu paraissait robotique. Bascule vers un système manuel : en mode développeur, un overlay permet de placer chaque label à la souris, les positions sont stockées en local, et un bouton exporte le JSON à coller dans le code pour la production. Résultat humain, ajustable en deux minutes quand un nouveau pays s'ajoute.

06

Souveraineté complète de la cliente sur ses outils

Le domaine, le compte de paiement Stripe, le compte d'envoi d'emails Resend, l'accès Google Cloud : tout est ouvert au nom de la prof, pas du développeur. Mes accès se limitent à des credentials temporaires partagés en visio le temps de configurer les services. Si demain elle change de développeur, tout reste en place et lui appartient (aucune migration à faire). Cette logique est documentée dans le code source du projet sous forme d'ADR (Architecture Decision Record), réutilisable comme modèle sur les prochains projets freelance.

Stack du projet07

Les outils qui font tourner le site.

01Next.js 16App Router · pages statiques + zone authentifiée /courses
02ConvexBase de données temps réel · auth · suivi de progression
03Convex AuthMagic link sans mot de passe · whitelist d'admins
04StripePaiement des packs vidéo · checkout des séances de cours
05Cloudflare R2Hébergement des vidéos · zéro frais d'egress · URL signées
06Google CalendarCréation automatique des rendez-vous + lien de visioconférence
07ResendEnvoi des magic links et confirmations · domaine vérifié
08dotted-mapCarte du monde stylisée des élèves
09next-intlInternationalisation FR / EN
10Tailwind · shadcnSystème d'UI cohérent et productif

Vous aimez ce type de site ?

Je crée des sites sur mesure pour artistes, indépendants et petites entreprises.

Identité visuelle, e-commerce, interface d'administration — chaque projet est pensé et codé de A à Z.

Voir mes formules

Projet suivant

BNP Paribas

Module e-learning IA générative