J’ai réfléchi à ce blog pendant deux ans.

Dire « vouloir » n’est pas tout à fait exact, c’est plutôt une obsession. Au début, je ne savais pas écrire de code front‑end ou back‑end, ni de code embarqué, et c’est à cette époque que cela a commencé. Je bricolais encore avec l’électronique et, par hasard, j’ai découvert la vidéo B‑Station et le site de @ushio; cela m’a paru très amusant et j’ai voulu essayer moi‑même. J’ai ensuite passé environ six mois à apprendre le C et un peu de JS/CSS depuis zéro, et avec Hexet j’ai monté un blog statique hébergé sur GitHub Pages, ce qui peut être considéré comme mon petit coin de paradis.

Hexo : un framework de blog rapide, simple & puissant. , hexo.io, opens in new tab
Ceci est une capture d'écran de la page d'accueil du projet Hexo, un site à thème sombre avec un logo hexagonal « H » et une navigation supérieure pour Docs, API, News, Plugins, Themes et About. Le titre principal indique « Un framework de blog rapide, simple et puissant » au-dessus d'une commande d'installation en style terminal, `npm install hexo-cli -g`, encadrée par des badges affichant 41 k étoiles GitHub, 5 k forks, 212 k téléchargements par mois et un compteur de suivi pour @hexojs sur X. En dessous se trouve une chronologie des versions répertoriant les versions 8.1.0 (2025‑10‑26), 8.0.0 (2025‑09‑16), 7.3.0 (2024‑07‑02) et 7.2.0 (2024‑04‑17), et la page commence à basculer vers une section présentant les fonctionnalités « Blazing Fast » et « Markdown Support ». L'image constitue une preuve du rythme actuel de publication de Hexo et des métriques d'adoption de la communauté telles qu'affichées sur son site officiel.
Hexo : un framework de blog rapide, simple et puissant. , hexo.io, opens in new tab
Ceci est une capture d'écran de la page d'accueil du projet Hexo, un site à thème sombre avec un logo hexagonal « H » et une navigation supérieure pour Docs, API, News, Plugins, Themes et About. Le titre principal indique « Un framework de blog rapide, simple et puissant » au-dessus d'une commande d'installation en style terminal, `npm install hexo-cli -g`, encadrée par des badges affichant 41 k étoiles GitHub, 5 k forks, 212 k téléchargements par mois et un compteur de suivi pour @hexojs sur X. En dessous se trouve une chronologie des versions répertoriant les versions 8.1.0 (2025‑10‑26), 8.0.0 (2025‑09‑16), 7.3.0 (2024‑07‑02) et 7.2.0 (2024‑04‑17), et la page commence à basculer vers une section présentant les fonctionnalités « Blazing Fast » et « Markdown Support ». L'image constitue une preuve du rythme actuel de publication de Hexo et des métriques d'adoption de la communauté telles qu'affichées sur son site officiel.

再后来,看到了 @Innei 的小站,设计很精致、功能也很全,当时的我看了一眼我就想要,甚至还赞助支持了,虽然后面没用上但是这钱也花的不怨 因为我摸到了 React 源码,就和我最初看到 C 一样,不过就是代码嘛,有什么大不了的,总有一天我要自己写一个。

ushio , sakura-ushio.icu, opens in new tab
Une capture d'écran de la page d'accueil d'un blog personnel montre une barre latérale avec un avatar de style anime, le nom « 小汐 », un lien « 主页 », et une navigation « 所有文章/友链/关于我 » accompagnée d'icônes GitHub et d'autres réseaux sociaux, placée à côté d'un fil d'articles épinglés. Le premier article, daté du 29 janvier 2023 et étiqueté « 置顶 » (épinglé), est intitulé « PD-METER-R4 » avec la remarque « 正在开发,相较于R3优化布局,更换主控,增加少量新功能 » (en développement, mise en page optimisée par rapport à R3, remplacement du contrôleur principal, ajout de quelques nouvelles fonctionnalités), illustrée par deux photos d'un circuit imprimé vert portant la mention « USBC‑R4 SAKURA » montrant son côté composant et son verso nu sur un fond en tissu. En dessous, commence un second article intitulé « WORX‑BAT‑Charger », daté du 14 février 2023, coupé au bas du cadre. L'image constitue une preuve d'un projet matériel en cours documentant les révisions itératives d'un dispositif de mesure USB‑C PD (Power Delivery).

Plus tard, j’ai découvert le petit site de @Innei : son design est très soigné et ses fonctionnalités très complètes. En le voyant, j’ai tout de suite eu envie de l’obtenir, au point même de le soutenir financièrement. Même si je ne l’ai jamais réellement utilisé, je ne regrette pas cet argent dépensé, car cela m’a permis d’explorer le code source de React, ce qui m’a rappelé la première fois où j’ai découvert le langage C. Ce n’est « juste » du code, rien de plus. Un jour, je suis convaincu que j’écrirai le mien.

Forêt calme

C'était l'année 2024, puis 24, 25, 26 ans jusqu'à présent

Depuis, cela ne s’arrête plus.

Hors de contrôle

Au départ, je voulais simplement ajouter un bascule clair/sombre au thème Hexo Nlvi de @colmugx. J’ai bourré un petit script JavaScript à la Dark Reader – c’était moche et je n’étais pas satisfait. Ensuite, j’ai appris le CSS @media, je suis passé à un bascule SPA en JS, j’ai testé la classe .dark de TailwindCSS, puis le SSR avec next‑theme, et enfin j’ai bricolé un script inline Cookie + Head Sync pour éliminer le scintillement FOUC. J’ai fini par essayer quatre ou cinq solutions différentes.

🎨 Un thème simple pour Hexo. , github.com, opens in new tab
Il s'agit d'une maquette d'écran promotionnelle d'un thème de blog, affichant le logo texte « Nlvi » avec un soulignement corail à gauche, accompagné de deux aperçus superposés de fenêtres de navigateur d'un site créé avec le générateur de sites statiques Hexo. Les deux panneaux d'aperçu montrent le même article de démonstration daté du 27‑12‑2013, intitulé « Elements », avec du texte factice Lorem Ipsum et une gamme complète d'exemples typographiques : titres 1 à 6 décroissants, une section de paragraphe avec des liens stylisés, du texte en gras et en italique, des soulignements et une citation en bloc, suivis d'un tableau à trois colonnes avec les en‑têtes « Table Header 1/2/3 » et des lignes « Division ». La barre de navigation supérieure indique « ARTICLE, ARCHIVES, TAGS, ABOUT » accompagnée d'une icône de recherche, indiquant qu'il s'agit d'une page de guide de style ou de démonstration du thème destinée à montrer le rendu des éléments HTML dans le thème Hexo.

Mais ce n’est que la partie visible de l’iceberg. Après avoir découvert React, je suis passé de l’époque primitive avec Hexo et Vanilla JS à Next.js 13 Page Router, puis je me suis tourné vers Vue, étudié le routage SPA, compris le fallback index.html, et créé d’innombrables projets. J’ai acheté un serveur, bricolé avec Docker, Nginx, NAS ; trouvant 1Panel inesthétique, j’ai écrit moi‑même le panneau Canopy, exploré les matrices de stockage NAS et développé RFS. En gérant le SSL, l’environnement local rendait acme.sh si pénible que j’ai fini par écrire un reverse‑proxy en Rust : Vane & Lazyacme. Ce qui était au départ un projet « junk » de 800 lignes réalisé en trois heures un soir est devenu, après les encouragements d’un ami, quatre mois de travail, y intégrant HTTP/3, Zero‑Copy, le modèle Layer et le moteur Flow. Plus tard, il y a aussi Seam, un framework full‑stack qui est également un vrai cauchemar — j’en parlerai plus tard.

Sur‑ingénierie

Puis l'ère de l'IA est arrivée, et l'anxiété a doublé.

Le plus ironique, c’est que ces choses auraient dû être réalisées en même temps que le blog, en les consignant au fur et à mesure. Mais le blog a été abandonné à plusieurs reprises, les idées se sont multipliées et il n’y avait nulle part où les enregistrer. D’un côté, mon intérieur me réprimande ; j’avais promis de terminer Vane, mais je n’ai pas pu, j’ai dû m’arrêter. De l’autre, un sentiment d’impuissance grandit à mesure que je m’éloigne. Je me souviens toujours de ce que je veux faire, mais je n’y parviens pas. En y réfléchissant, je réalise que cela fait longtemps que je ne me suis pas assis pour écrire quoi que ce soit. En y repensant maintenant, tout cela pointe vers la même chose — le sur‑ingénierie.

À l'époque, je ne pensais vraiment pas que je m'écartais. Vane ? De toute façon, le blog devra être déployé plus tard, il faut donc un reverse proxy. Seam ? Vu que je finirai par écrire du full‑stack, autant mettre en place dès maintenant le framework que j'imagine. Chaque étape a une raison, chaque étape est « utile plus tard ». Mais le problème, c’est que « plus tard » n’arrive jamais, parce que je n’ai jamais commencé…

Échec

Créer un blog ne nécessite en réalité ni proxy inverse, ni framework maison. Pourtant, à l'époque, je les considérais comme des conditions préalables, comme une excuse toujours bloquante mais apparemment raisonnable, alors qu'elles ne l'étaient jamais. La seule vraie condition préalable est simple : asseyez‑vous et écrivez votre premier article.

En réalité, le blog n'est pas resté inactif ; au contraire, je l'ai fait trois fois.

Vercel , vercel.com, opens in new tab
Ceci est une capture d’écran de la page d’accueil de Next.js, thème sombre avec un logo triangulaire et une barre de navigation supérieure répertoriant Showcase, Docs, Blog, Templates, Enterprise, une barre de recherche, ainsi que les boutons Deploy et Learn. La section héro lit « The React Framework for the Web », suivie d’un sous‑texte expliquant que Next.js est utilisé par certaines des plus grandes entreprises du monde pour créer des applications web de haute qualité avec des composants React. En dessous se trouvent deux boutons, « Get Started » et « Learn Next.js », ainsi qu’une ligne de commande de type terminal affichant « npx create-next-app@latest », attestant du rôle du site en tant que page officielle de marketing et d’onboarding du framework.

La première fois était à l'époque du Next.js 13 Page Router. À ce moment-là je ne comprenais même pas ce qu'était une SPA, et les concepts SSR, SSG, ISR me étaient totalement inconnus, mais comme les autres disaient que le SSR était bon, j’ai voulu l’utiliser aussi. Au fil de l’écriture, je me suis rendu compte que je ne comprenais pas quels problèmes ces architectures résolvaient, et je n’ai plus pu poursuivre. Ensuite, je suis passé à une SPA pure avec Vue 2. Pourquoi Vue ? Honnêtement, le nom me plaisait, il était nouveau, alors je l’ai essayé. Ça n’a pas duré longtemps. La troisième fois, je suis revenu à React, en partant du simple JSX, j’ai appris TypeScript, maîtrisé le TSX, compris la différence entre CJS et ESM, je suis tombé amoureux du paradigme réactif et j’ai commencé à utiliser Lucide, Framer Motion, Radix UI, des bibliothèques dont je ne peux plus me passer — cette fois, ça ressemblait enfin à quelque chose de cohérent. Mais j’ai quand même échoué, car en réalité je ne faisais qu’imiter : je prenais ce que les autres utilisaient, cela semblait correct en apparence, mais je ne comprenais pas pourquoi cela devait être fait ainsi. En plus, avec les hallucinations de l’IA, on pouvait faire fonctionner un MVP, mais lors du passage à l’échelle, c’était un champ de mines.

Remix , remix.run, opens in new tab
Une capture d'écran du site du framework Remix, avec le logo Remix en haut à gauche et une barre de navigation en haut à droite reliant Blog, Jam, Store et V2 Docs. Le titre centré indique « Remix 3 est en cours de développement actif », sous-titré « Un nouveau framework full‑stack construit sur les Web APIs », et en dessous se trouve une illustration d’un objet en forme de voiture recouvert d’un drap noir, avec le logo flèche de Remix et une bande diagonale à rayures arc‑en‑ciel qui apparaît là où le tissu recouvre le capot. L’image de la voiture sous le drap évoque le dévoilement d’un produit ou un teaser, signalant que Remix 3 est une version à venir qui est encore en cours de construction.

Plus tard, j’ai aussi appris React (Remix) Router Loader, le Next.js 15 App Router et RSC, mais à ce moment-là, mon quotidien était déjà très chargé, je n’avais guère de temps pour coder et je n’ai même pas eu l’occasion d’échouer une quatrième fois. En y repensant, mon site est passé de Next.js 13 à Next.js 15 ; j’avais à peine fini la migration et, avant même de le mettre en ligne, Next.js 16 beta‑1 était déjà sorti.

Lâcher prise

Dire « 想开了 » n’est pas exact ; c’est simplement que je suis fatigué·e.

Capture d'écran d'un terminal ou d'une fenêtre d'application affichant un tableau de données au thème sombre, intitulé d'un chemin tronqué se terminant par « roject », répertoriant l'utilisation quotidienne des modèles sur des lignes datées du 03‑03‑2026 au 13‑03‑2026, avec des colonnes pour les modèles utilisés (combinaisons de haiku‑4‑5, opus‑4‑6 et sonnet‑4‑6), plusieurs colonnes numériques d'usage atteignant des milliards, et une colonne finale de coût en dollars variant d'environ 97,92 $ à 1 765,56 $ par jour. Le coût le plus élevé et le nombre de tokens apparaissent le 09‑03‑2026 (plus de 3,27 milliards dans la plus grande colonne, 1 765,56 $), tandis que le 12‑03‑2026 montre une chute brutale à 97,92 $, ce qui suggère une journée partielle ou anormale. Cela semble être la preuve d'une utilisation de l'API IA et du suivi de facturation, probablement provenant d'un tableau de bord de suivi des coûts pour un projet logiciel.

Le rythme de l’ère de l’IA est trop rapide. Les modèles s’enchaînent les uns après les autres, de nouvelles technologies émergent continuellement, et je deviens de plus en plus anxieux, comme si s’arrêter signifiait être dépassé. Au plus fou, j’ai écrit 16 petits morceaux de code en un jour ; les tokens pouvaient brûler 1 900 $ USD en une journée (vers février), et j’étais sur le point de perdre la tête. Mais ce qui a tout arrêté n’était pas une illumination, simplement la fatigue pure. Dans ce rythme toujours plus pressé, la dernière paille a fini par me faire céder, et j’ai ressenti un soulagement, me suis ouvert, j’ai abandonné la lutte ; ainsi, c’est en fait assez bien.

J’ai commencé à lâcher prise. J’ai abandonné les choses auxquelles j’étais autrefois accro, appris à m’arrêter au bon moment, et à remettre à demain ce qui peut attendre. Vane n’est pas terminé ? On le laisse de côté pour l’instant. Seam est encore loin d’être fini ? On y reviendra plus tard. Le blog n’est pas parfait ? On le publie d’abord. Commencez à faire du Vibe Coding à fond ; s’il n’y a pas de problème, on ne s’en occupe pas, sinon on en parlera plus tard.

Étrangement, la qualité ne s’est pas détériorée après avoir laissé aller. Je pense que c’est probablement parce que les jours de programmation « 古法 » n’ont pas été vains ; dès l’époque GPT‑2, j’ai commencé à utiliser l’IA, mais à l’époque je rédigeais chaque ligne de code avec soin et comprenais chaque concept. Cette expérience m’a donné une base, et plutôt que d’appeler cela Vibe Coding, on pourrait parler de Context Coding ; le jugement nécessaire est toujours présent, et le fait de lâcher prise n’a pas entraîné d’erreurs basiques ni d’accidents.

Tous les tracas précédents m'ont donné le capital de pouvoir lâcher prise maintenant.

Origine

La solution finale est en fait très simple : All in Cloudflare. Stockage d’objets R2, base de données D1 Edge, KV pour le cache, Worker exécute le SSR, tout est sans serveur, il n’y a pas de serveur.

Cloudflare Worker , workers.cloudflare.com, opens in new tab
Ceci est une capture d'écran de la section héro d'un site marketing, affichée sur un fond dégradé orange chaud avec une texture ponctuée subtile. Une barre de navigation s'étend en haut avec des liens vers Produits, Solutions, Ressources et Tarification, ainsi que les boutons Connexion et Commencer à construire à droite. Le titre indique « Tout ce que nous avons appris en alimentant 20 % d'Internet — le vôtre par défaut », suivi d'un texte secondaire identifiant l'entreprise comme Cloudflare et la décrivant comme un « Cloud IA avec calcul, inférence IA et stockage » qui permet aux utilisateurs « de déployer des applications au lieu de gérer l'infrastructure », avec un deuxième bouton d'appel à l'action Commencer à construire centré en dessous.

Cette réponse est‑elle sarcastique ? Très sarcastique. Parce qu’avant d’atteindre cette « simple » destination, j’ai fait tout un détour. J’avais prévu de tout héberger moi‑même, il fallait donc gérer le serveur, bidouiller Docker, gérer les conteneurs, alors j’ai écrit Canopy comme panneau d’administration, Lazycert pour la gestion des certificats, Vane comme proxy inverse, et Twig pour les points d’injection de surveillance des ressources. Une pile de projets, uniquement pour servir un serveur poubelle.

Le stockage est similaire. Je trouve le stockage d’objets trop cher, alors j’ai voulu utiliser les disques durs de mon propre serveur, et j’ai donc écrit RFS, un VFS permettant une déduplication atomique et la fusion de fichiers uniques, voire ressuscitant le concept de registre des années 80‑90, avant de le monter via FUSE. Le résultat ? J’ai passé encore plus de temps à fabriquer une roue pas très efficace, le serveur est resté inactif pendant un an, c’est devenu une affaire totalement déficitaire.

Vercel , vercel.com, opens in new tab
Capture d'écran de la page d'accueil marketing de Vercel sur fond noir, avec une barre de navigation supérieure indiquant Produits, Ressources, Solutions, Entreprise et Tarifs, ainsi que les boutons Demander l'IA, Se connecter et S'inscrire à côté du logo triangulaire Vercel. En dessous, un grand titre indique « Construisez et déployez sur le cloud IA », suivi du sous‑texte « Vercel fournit les outils de développement et l'infrastructure cloud pour créer, faire évoluer et sécuriser un web plus rapide et plus personnalisé », et deux boutons libellés « Commencer le déploiement » et « Obtenir une démo ». La moitié inférieure est dominée par un prisme triangulaire facetté et lumineux, rendu en maillage filaire, diffusant des lumières bleues, vertes, orangées et rouges sur un fond à grille, clairement une réinterprétation 3D stylisée du logo Vercel utilisée comme visuel principal.

En fin de compte, après un long détour, je reviens au serverless. Le concept de Vercel est bon, mais je n’aime pas Next.js ; de plus, Vercel recourt à trop de « magie », et le design du middleware pré‑compilé pour s’exécuter sur l’Edge finit par être fragmenté, voire à l’origine de plusieurs CVE. Il vaudrait mieux tout centraliser sur l’origine. En revanche, Cloudflare Workers est excellent : il atteint un autre extrême en compilant des produits de moins de 10 Mo en WASM, capables d’exécuter la véritable logique métier sur l’Edge, exactement ce que je recherche. En dehors du coût, il n’y a vraiment aucun inconvénient – même si ce n’est pas vraiment un défaut, car le temps économisé représente de l’argent.

Moins, c’est plus

J'ai entendu cette phrase d'innombrables fois, mais il m'a fallu deux ans pour en saisir réellement le sens.

L’essence du retour à l’ingénierie est : « Make it function, make it correct, then make it exceptional. ». J’ai enfin repris le bon chemin et l’ai rendu functional. Mon blog est‑il rudimentaire ? Oui, il l’est. Incomplet ? Effectivement incomplet. Mais cela vaut mieux que rien. Si vous n’avez même pas de mise en ligne et que vous continuez à travailler sur ce qui est « peut‑être nécessaire », en poursuivant une perfection invisible, vous finirez par n’avoir rien à présenter. Ce n’est pas un compromis, c’est un compromis d’ingénierie. Quoi qu’il en soit, j’ai fini par l’accepter. Donc je l’ai accepté. Je ne suis plus obsédé par un détail, j’ai plutôt quitté la maison. Mon album photo n’a pas eu de photo en plein air depuis longtemps, alors j’ai rapidement pris une photo du bord de la route — cela fait longtemps que je ne suis pas sorti.

C’est une photographie prise en extérieur, vue de dessus d’une haie basse et dense de petits arbustes à feuilles petites plantés le long d’une rue ou d’un trottoir, avec une bordure en granit qui s’étend en diagonale du coin inférieur gauche vers le coin supérieur droit et une route asphaltée visible dans le coin inférieur gauche. La haie montre une nouvelle pousse vert clair sur des branches ligneuses plus sombres, avec la base d’un tronc d’arbre visible près du bord supérieur et une bande de sol mulché ou nu brun au-delà des arbustes. Un soleil lumineux et direct projette des ombres nettes sur les feuilles et la bordure, suggérant que la photo a été prise vers midi.

En repensant aux détours que j’ai pris auparavant, est‑ce que je le regrette ? Non, je ne le regrette pas. Certaines choses, si vous ne les essayez pas vous‑même, resteront peut‑être incompréhensibles pour toujours. D’autant plus qu’à l’ère de l’IA, essayer de suivre le vieux chemin que je parcourais autrefois n’est plus vraiment possible ; de nombreux flux de travail ont déjà changé. En outre, ce projet est Taki, 100 % de codage assisté par IA, mais cela ne signifie pas qu’il ne peut pas être maintenu sur le long terme, ni qu’il manque de chaleur humaine. En réalité, la présence ou non d’IA n’a pas d’importance, et de plus, ce que j’aime n’est pas tant d’écrire du code en soi, mais de construire quelque chose…