Ça fait des années que j'accumule des liens un peu partout : des favoris FreshRSS qui s'entassent, des onglets jamais refermés, des favoris navigateur qu'on ne retrouve jamais. J'étais passé sur Linkding pendant un moment, ça a fait le taf, mais je voulais un truc qui soit plus sympa et blindé de fonctionnalités : une synchro FreshRSS automatique, une vraie recherche, un mode lecture propre, et une page publique. Je ne trouvais rien donc je l'ai fait grâce à Claude Code.

Avant toute chose, on va parler d'un truc développé avec une IA, Claude en l'occurrence, donc si ça ne vous plaît déjà pas là, vous pouvez passer votre chemin. J'en ai un peu marre de voir des projets vibe codés se faire taper dessus alors qu'il suffit juste de les ignorer. Je respecte les pros, les anti et la majorité qui est au milieu du coup, j'attends la même chose. Voilà, c'est dit, on passe à la suite pour ceux qui restent.

Pourquoi coder encore un gestionnaire de liens

Linkding avait fait son travail, mais il me manquait plein de fonctions et bon, c'est très efficace, mais assez moche. Ensuite j'avais des favoris Firefox, des étoiles dans FreshRSS, des trucs enregistrés dans Reddit ça commençait à me gonfler. Coder le mien voulait dire qu'il allait faire tout ce que je voulais et me permettre de tout aggréger.

Résultat : Excerpta (qui doit vouloir dire "extraits" mais un peu sélectionnés) a vu le jour a fini par remplacer Linkding début juillet, et links.notarobot.fr sert maintenant de page publique dédiée. Les deux tournent sur la même stack : FastAPI, SQLModel, SQLite en WAL, Jinja2 et un peu d'Alpine.js côté client, sans dépendance à un quelconque CDN. Tout est servi localement, y compris les polices et les librairies JS. Ah oui et avec une appli Android compagnon.

Ce qu'Excerpta fait aujourd'hui

C'est un peu parti loin en termes de fonctionnalités, on ne va pas se mentir, mais je pense que j'ai atteint ce que je voulais. En vrac, ce qui est dedans :

  • Recherche full-text sur les titres, descriptions, notes et URLs, avec surlignage des résultats
  • Dossiers hiérarchiques avec glisser-déposer, et tags avec fusion automatique
  • Mode lecture : extraction du contenu à la demande (à la Firefox Reader View), utile quand un lien devient payant ou disparaît
  • Archivage automatique vers la Wayback Machine à l'ajout d'un lien comme ça on perd aucun lien
  • Vérificateur de liens cassés et récupération via la copie archivée en cas de 404
  • Compatible OIDC pour utiliser mon Pocket ID
  • Application Android (configurable avec un QRCode)
  • Synchronisation FreshRSS : mes articles étoilés atterrissent directement dans Excerpta, désétoilage automatique si je sors un lien du dossier suivi (oui j'invente des mots au passage !).
  • Page publique par utilisateur (/u/{slug}) avec flux RSS, pour partager une sélection de liens sans exposer toute la base
  • Export/import Netscape HTML, bookmarklet, et une appli Android maison
  • 9 thèmes clair/sombre au choix
Liste des liens, thème sombre
Liste des liens, thème sombre

Il y a aussi une vue en grille quand j'ai envie de parcourir visuellement plutôt que de lire une liste :

Vue en grille
Vue en grille

Et le mode lecture, qui extrait le contenu propre d'une page directement dans l'interface :

Mode lecture
Mode lecture

Ajouter un lien se fait en quelques secondes, avec récupération automatique des métadonnées (titre, description, image) :

Formulaire d'ajout d'un lien
Formulaire d'ajout d'un lien

Et la page publique, pour celles et ceux qui veulent juste piocher dans ce que je partage sans avoir de compte :

Page publique des liens
Page publique des liens

Codé avec Claude, du premier commit au pentest

C'est le point que je voulais mettre en avant dans cet article : Excerpta n'a pas une ligne de code que je n'ai pas écrite avec Claude. Concrètement, je fonctionne avec Claude Code : je décris le comportement que je veux, souvent avec le contexte métier autour (pourquoi FreshRSS doit désétoiler un item plutôt que juste le supprimer, pourquoi telle route doit être protégée contre le SSRF, etc.), Claude écrit le code, et je teste, je relis, je renvoie ce qui ne va pas.

À aucun moment, je dis que le code est nickel par contre avec le nombre de code review croisées et de pentests que j'ai fait, je pense que ça tient.

Rien de tout ça n'aurait avancé aussi vite en solo ce n'est pas mon métier ni ma passion 😄

Essayer / voir le code

Si l'idée d'un gestionnaire de liens qui fait exactement ce que vous voulez (et rien de ce que vous ne voulez pas) vous parle, allez jeter un œil au code. Je sais pas trop comment je vais gérer le projet pour l'instant je pense que je vais ouvrir les PR et Issues et on verra si c'est gérable. Et sinon vous pouvez forker !