Tenu depuis le Dernière entrée 5 apps publiées · 1 en cours · 11 paquets
Adrien Lacourpaille
Ce que je code le soir, une fois la journée finie, une ligne datée par projet : les apps d’abord, puis les paquets qu’elles partagent. Je cherche mon prochain poste.
Des jeux de soirée sur tous les téléphones de la pièce, au même instant.
Une étagère de jeux de soirée qui partagent une salle, un QR code et des écrans. Un écran mène la partie, les autres jouent sur ce qu’ils ont sous la main, et le premier qui sait remporte la manche.
Mécanisme · un serveur, un socket vers chaque écran
Écran hôte
mène la partie
Un serveur
Hono · date chaque buzz
WebSocket vers chaque téléphone
1er · gagne
L’ordre se décide à l’arrivée sur le serveur, pas selon l’horloge des téléphones.
Inscrit
on-record
App · vie publique · en ligne
Ce que font vraiment les députés, pièces à l’appui, pas ce qu’ils disent.
Comment votent vraiment les députés, scrutin par scrutin. Chaque vote public de l’Assemblée nationale, expliqué en clair pour qui n’a jamais suivi une séance, chaque chiffre ramené au compte rendu officiel.
Chaque scrutin public de chaque député, avec le groupe où il siégeait le jour du vote. Ni classement ni note : chaque chiffre renvoie aux votes qu’il compte, et chaque page cite sa source officielle.
Ni serveur ni base de données : chaque nuit, un job GitHub Actions demande à l’open data de l’Assemblée si quelque chose a changé, ne reconstruit que ce qui a bougé et déploie. Une nuit sans nouveau vote ne télécharge rien et ne déploie rien.
L’hébergeur publie 20 000 fichiers par déploiement, et il y a plus de 8 000 scrutins : ils partent en blocs, un fichier par député, de petits index pour les listes et la recherche, et le build vérifie toute sa sortie contre un budget.
Environ 750 pages prérendues par les loaders mêmes que le navigateur exécute, un faux fetch leur servant les données pendant le build, chacune avec ses propres balises head et sa place dans le sitemap.
Trouver son député depuis sa commune ou son adresse, en français, en clair comme en sombre.
Mécanisme · pas de serveur, un job de nuit demande ce qui a changé
Chaque nuit
GitHub Actions
Open data
du nouveau ?
Reconstruire
nouveau vote · juste ce qui a changé
Déployer
Cloudflare Pages
Nuit calme
aucun vote · ni téléchargé ni déployé
20 000 fichiers par déploiement, 8 000+ votes livrés par blocs, le tout vérifié contre un budget.
Inscrit
Séance
App · entraînement · installable, hors ligne
Un manuel d’entraînement qui marche hors ligne et se souvient de tout, sur l’appareil seul.
Un programme au poids du corps dessiné comme un manuel de gymnastique, une planche par mouvement. Il guide une séance de trente minutes, tient un journal et trace les courbes de progrès — installable, hors ligne, avec des rappels, et chaque chiffre gardé sur l’appareil.
Installe · 10 paquets maison, tous sauf react-aria
Installable et entièrement hors ligne : un service worker Workbox écrit à la main met toute l’app en cache, et chaque route répond réseau coupé, séance en cours comprise.
Des rappels sans serveur : une horloge dans l’app, les Notification Triggers là où ils existent, et le Periodic Background Sync qui lit le planning dans IndexedDB depuis le worker — et l’écran de réglages dit franchement ce que ce navigateur sait faire.
Des graphiques de progression dessinés à la main en SVG et HTML : régularité comptée en semaines, volume par semaine, tour de taille et poids jamais sur un même axe, chacun parcourable par un input range natif invisible et doublé d’un tableau.
Chaque chiffre reste sur l’appareil : une sauvegarde JSON le transporte ailleurs, et un profil spécimen généré à graine montre les graphiques pleins sans jamais toucher aux données du lecteur.
Trente-sept figures animées dessinées à partir d’articulations, pas de tracés : l’interpolation est polaire et chaînée depuis la hanche, pour qu’aucun os ne s’étire en plein mouvement.
Mécanisme · zéro serveur, tout en cache sur l’appareil
Cet appareil
Coque de l’app
précachée
Service worker
Workbox · rappels
IndexedDB
chaque chiffre
Sans serveur
réseau coupé
Sauvegarde JSON
la seule sortie
Inscrit
Analytics
App · mesure d’audience · tableau de bord public
Une mesure d’audience sans cookie, incapable de distinguer deux visiteurs.
Hono sur Cloudflare Workers, D1 et les Core Web Vitals, avec un tableau de bord public. Une ligne tient un chemin, un domaine référent, un pays, une langue, un thème et un type d’appareil, et il n’y a pas de bandeau de consentement : il n’y a rien à consentir.
Ni cookie, ni IP, ni user agent, ni empreinte, ni hash stockés : une ligne tient un chemin, un domaine référent, un pays, une langue, un thème et un type d’appareil.
Pas de bandeau de consentement : il n’y a rien à consentir.
Une page vue atteinte depuis une autre page du même site prolonge une visite ; tout le reste en commence une.
tracker.js pèse moins de 1 ko compressé, suit la navigation des applications monopages, et ne tourne jamais sur localhost ni dans un navigateur automatisé.
Ajouter ?analytics=off à une URL arrête de compter ce navigateur.
Mécanisme · trois apps envoient, un Worker écrit une ligne
Ce site · Taverla · on-record
tracker.js
Un Worker
Hono · Cloudflare
D1 · une ligne
chemin · hôte référent · pays · langue · thème · type d’appareil
Tableau de bord
public · React
Jamais stocké
cookie · IP · user agent · empreinte · hash
Inscrit
Scoreboard
App · score en direct · salle de club
Le score de chaque table sur un seul grand écran, en direct, compté depuis n’importe quel téléphone.
Un tableau des scores en direct pour les clubs qui jouent sur plusieurs tables à la fois. Quatre écrans dans le navigateur — le grand écran, la console d’arbitre, la console d’organisation et la vue spectateur — partagent un Durable Object par événement sur l’offre gratuite de Cloudflare, sans rien à installer.
Chaque arbitre compte son match depuis l’appareil qu’il a sous la main, et tous les matchs en cours s’affichent sur un seul grand écran au fond de la salle.
Un Durable Object par événement garde la suite ordonnée des points dans son propre stockage SQLite et la diffuse en WebSocket.
Les points comptés hors ligne attendent en file et repartent à la reconnexion, et une erreur s’annule d’un geste.
Score, service et durées se déduisent tous des événements : l’organisateur corrige un score faux ou déplace un match sur une autre table en direct.
Le tennis de table est le premier règlement ; les règles de score se branchent, d’autres sports peuvent suivre.
Le registre que vous lisez. React 19, prérendu par langue, en anglais et en français, clair et sombre sans flash, des primitives accessibles signées react-aria, et un score Lighthouse vérifié en CI.
0.1.1Utilisé par TaverlaUtilisé par on-recordUtilisé par Séance—Pas utilisé par Analytics—Pas utilisé par ScoreboardUtilisé par Ce siteTaverla, on-record, Séance, Ce siteLivré
Traduit, et sait dès la compilation ce que chaque message attend.
0.3.0Utilisé par TaverlaUtilisé par on-recordUtilisé par SéanceUtilisé par Analytics—Pas utilisé par ScoreboardUtilisé par Ce siteToutes sauf ScoreboardLivré
Garde le thème choisi sans flash, jusqu’à la barre du téléphone.
0.3.0Utilisé par TaverlaUtilisé par on-recordUtilisé par Séance—Pas utilisé par Analytics—Pas utilisé par ScoreboardUtilisé par Ce siteTaverla, on-record, Séance, Ce siteLivré
Copie dans le presse-papiers même en HTTP simple, où l’API Clipboard n’existe pas.
0.1.1Utilisé par TaverlaUtilisé par on-recordUtilisé par Séance—Pas utilisé par Analytics—Pas utilisé par ScoreboardUtilisé par Ce siteTaverla, on-record, Séance, Ce siteLivré
L’anneau de focus et la composition de classes sur react-aria-components.
0.1.0Utilisé par TaverlaUtilisé par on-record—Pas utilisé par SéanceUtilisé par AnalyticsUtilisé par ScoreboardUtilisé par Ce siteToutes sauf SéanceLivré
Les réglages du linter et du formateur qu’étend chaque projet.
0.1.0Utilisé par TaverlaUtilisé par on-recordUtilisé par SéanceUtilisé par AnalyticsUtilisé par ScoreboardUtilisé par Ce siteLes 6 appsLivré
À propos
Depuis 2023, je suis au travail le seul développeur d’une plateforme multi-écrans en production. Je tiens à une architecture saine, des monorepos aux API typées de bout en bout, à l’accessibilité et aux tests, et je garde mes projets sur les dernières versions de leur écosystème.
Prochaine entrée
Votre équipe, 2026
Je cherche mon prochain poste. Écrivez-moi, ou prenez le CV : un mis en page, et un sobre pour les logiciels de recrutement.