Aller au contenu
Tous les projets
v1 (sur 4 versions prévues) · 2026

Opi!

Site d'entraînement au finnois : il présente le contenu nouveau, interroge par des exercices tapés au clavier, planifiés par répétition espacée, et corrige en montrant la forme attendue et la règle. Il tourne sur un cluster Kubernetes monté dans mon homelab, mis à jour automatiquement à chaque merge.

Année
2026
Technologies
  • Python
  • Flask
  • Kubernetes
  • k3s
  • Terraform
  • Proxmox
Accueil d'Opi! : la séance de révision du jour, sur fond d'aurore boréale

01 · Contexte

Le défi

Projet personnel né d'une petite application Flask de conjugaison, devenu une vraie plateforme pensée comme en production. Opi! fait trois choses : il présente le contenu nouveau (verbes, mots, expressions) sur une fiche de découverte, il interroge par des exercices tapés au clavier dont le rythme est planifié par répétition espacée (FSRS), et il corrige en montrant la forme attendue, les lettres qui diffèrent et la règle. Chaque session mélange les révisions dues, les exercices que débloquent les compétences de grammaire et les nouveautés du jour, et la Bibliothèque permet de parcourir tout le contenu. Ce contenu est la contrainte centrale : il vit dans des fichiers YAML relus à la main, seul ce que j'ai validé arrive dans les exercices, et le code n'invente aucune forme finnoise. Usage personnel, non public, déployé comme en production.

02 · Architecture

Comment c'est construit

Schéma d'architecture d'Opi! : le navigateur, le front (React, nginx), api avec Redis, puis lexicon et srs, chacun avec sa base dans une instance Postgres, et le dossier data/ importé dans lexicon
Quatre services qui ne se parlent qu'en HTTP JSON : api orchestre, lexicon et srs décident

Les points clés

  • Contenu finnois versionné dans Git et validé à la main : le code n'invente aucune forme
  • Quatre services (front React, api, lexicon, srs) qui ne communiquent qu'en HTTP JSON : aucun ne lit la base d'un autre
  • Révisions planifiées par la bibliothèque FSRS (répétition espacée), sans réimplémenter l'algorithme
  • Infrastructure décrite en code (Terraform) : trois machines virtuelles et un cluster k3s recréables à l'identique
  • Livraison automatique : un merge sur main reconstruit les images, les range dans un registre privé Harbor, et Argo CD met le cluster à jour
  • Site accessible seulement depuis le réseau privé (Tailscale), avec sauvegarde de la progression chaque soir, restaurée et testée

03 · En images

Galerie

Cliquer sur une image l'ouvre en plein écran, avec navigation entre les captures.

04 · Bilan

Ce que j'en retire

Décrire une infrastructure en code (Terraform) : les machines se recréent à l'identique, et Argo CD remet le cluster dans l'état décrit dans Git. Un merge suffit à déployer.