Alternative à 1of10 : J'ai créé le mien en un après-midi pour 0€/mois

8 min read

Si vous cherchez des idées de contenu viral, une méthode fonctionne ridiculement bien : les outliers YouTube. Ces vidéos qui explosent les moyennes habituelles de leur chaîne, généralement sur des petites chaînes que personne ne suit encore. Une chaîne qui fait 50K vues d'habitude sort soudain une vidéo à 500K ? Quelque chose a marché. Le titre, la miniature, le sujet, le timing, peu importe. Ça vaut le coup d'étudier.

Il existe un outil pour ça. Il s'appelle 1of10. Il coûte 29$ ce mois-ci. Ou 39$. J'ai arrêté de suivre leur page de prix, ça bouge sans arrêt. Plus un tableau de bord bourré de fonctionnalités que personne n'a demandées, pas d'API, rien que je puisse intégrer dans mon propre workflow.

Alors j'ai construit le mien. Pas dans le sens héroïque "un après-midi, 200 lignes, regardez-moi". Dans le sens ennuyeux : j'ai tapé quelques prompts courts à Claude et le truc a marché.

TL;DR — Ce n'est pas un tutoriel. C'est comment je travaille vraiment avec l'IA quand je construis un petit outil. Le code n'est pas intéressant. Le prompt pivot, c'est : celui où j'ai arrêté d'essayer de spécifier une solution et où j'ai donné un problème à Claude à la place. Ce mouvement, c'est tout l'article.

Développeur comparant frénétiquement les tarifs à son bureau tandis qu'un collègue se détend avec une notification de projet terminé sur son laptop
Un dev a livré. Un dev lit encore les grilles tarifaires. Devinez qui a gagné.

Le Paywall et les Specs

Le déclencheur était un post de forum que je ne linkerai pas (Medium fait les liens à la dure et la crédibilité meurt au clic). En paraphrasant :

Entraînez Claude sur les titres viraux et les titres YouTube. L'article en lui-même n'a pas vraiment d'importance. Le titre et la miniature, si. On utilise 1of10 pour trouver les vidéos outliers et reverse-engineer les patterns.

Workflow valide. Paywall agaçant. Et j'avais l'intuition que 1of10 était trois appels d'API dans un trench-coat.

Les specs, écrites dans ma tête et tapées nulle part. Une requête de recherche en entrée. Les 10 meilleures vidéos YouTube qui surperforment par rapport à la moyenne de leur propre chaîne en sortie. Formule de score : vues / moyenneChaine. YouTube Data API gratuite, 10K unités de quota par jour, environ 100 recherches complètes. Coût : 0$ pour toujours.

La métrique, c'est une division. C'est toute la raison pour laquelle 1of10 est surpayé : les maths qu'ils vendent sont triviales, le tableau de bord c'est là où vit la facturation.

Le Prompt Qui A Fait le Vrai Boulot

La mise en place n'est pas intéressante. Installer l'app. Non, la mettre dans le bon dossier de projet. Utiliser gh au lieu de curl. Trois prompts, trois minutes. L'échafaudage de l'app Astro et l'algorithme lui-même s'étaient passés dans une session Claude antérieure dont je n'ai plus les logs (sauvegardez vos projets Claude Code, j'ai appris ça à la dure).

App qui tourne en local. Je tape une recherche. L'UI est moche. Le classement est bruyant. Un top-10 trié par score outlier mélange de vrais outliers avec des vidéos normales-ish et je n'arrive pas à dire où le vrai signal s'arrête. Mes yeux voient trois gagnants évidents. Mon cerveau ne peut pas nommer l'algorithme qui dit la même chose.

Alors j'ai tapé ça :

can u improve the interface ? [screenshot]
not readable, and i'd want a one-click
copy of the best outlier titles
(the top 3 here really stand out,
idk how you calculate that,
where it really jumps mathematically)

Trois demandes. Fix de l'UI. Bouton de copie. Et celle qui compte : idk how you calculate that, where it really jumps.

Ce dernier bout, c'est tout l'article.

Voici ce que j'aurais tapé un mauvais jour, le genre de jour où j'essaie de sonner comme un ingénieur : implémente une fonction qui flag les N premiers outliers statistiques en utilisant z-score ou seuillage de percentile, avec gestion propre des cas limites et tests unitaires.

Ce prompt donne des z-scores. Les z-scores ne marchent pas sur ces données. La distribution n'est nulle part près d'être normale, les classements d'outliers suivent au mieux une loi de puissance, et je me retrouverais avec une fonction qui flag dix résultats sur une courbe lisse et zéro sur une courbe dentelée. Inutile.

Ce que j'ai tapé à la place était le problème, pas la solution. "Où ça saute vraiment."

Claude est revenu avec trois algorithmes candidats (z-score, ratio d'écart, seuil de percentile), a expliqué pourquoi le ratio d'écart convient le mieux à ce type de données, et l'a écrit :

for each pair of consecutive scores (sorted desc):
  ratio = score[i] / score[i+1]
  keep track of the largest ratio seen
  mark the cut at that position
if the best ratio is below 1.5x: only the first result is an outlier

Dix lignes. Lancez-le sur [45, 28, 20, 3.2, 2.8, 2.1], la coupure tombe entre 20 et 3.2 (un écart de 6.25x), et les trois premiers sont flaggés comme de vrais outliers. Exactement ce que mes yeux voyaient. Rien que j'aurais pu spécifier moi-même.

Décrivez le problème, pas la solution. Le modèle a lu dix mille papiers sur le classement et la segmentation. Vous en avez lu zéro.

Trois Autres Prompts, Même Forme

YOUTUBE_API_KEY not configured / it's in infisical

Le serveur de dev avait planté sur un secret manquant. Je tape le message d'erreur plus un indice : it's in Infisical. Infisical est un gestionnaire de secrets. Il garde les clés API hors des fichiers .env en clair. Le genre d'hygiène dont je n'ai commencé à me soucier qu'après la troisième fois où j'en ai leaké une. Claude a wrappé la commande de lancement avec infisical run, l'app a booté, on est passés à autre chose. Deux secondes. C'est comme ça qu'on dit à une IA où est le secret sans coller le secret.

no find the titles that overperform on a given topic [long paste of the forum thread]

Claude avait dérivé vers une fonctionnalité adjacente. Ça avait l'air cool, ce n'était pas ce que je voulais. Je l'ai tué avec "no" et j'ai collé les specs originales du forum, verbatim. Recentrer par répétition, pas par explication. Ne pas argumenter avec le modèle. Re-ancrer.

the blue on black isn't readable [screenshot] and it's good to copy min 5 results to identify patterns

Deuxième passe UI. Screenshot des liens bleus illisibles, plus une règle business glissée dans le feedback : min 5 results to spot a pattern. Claude a ajusté le contraste, tué le bleu, mis en évidence les vrais outliers avec un accent corail, grisé le reste. La règle est devenue le défaut pour le bouton d'export : minimum 5, remonte s'il y a plus selon le détecteur d'écart. Un tour.

Ceux que j'ai sautés étaient ok, A, C, ok, ok. Validations et réponses à choix multiples aux propres questions de design de Claude. Plus une vérification de coût en milieu de session (is the Google API free?) parce qu'on ne veut pas finir de construire quelque chose qu'on ne peut pas se permettre de faire tourner. Le rythme, c'est que de l'information, pas de cérémonie.

24 Heures Plus Tard, Je le Voulais Dans Claude Code

App shippée. Qui tourne en local. Marchait. Et déjà je détestais l'utiliser.

Parce que le flow était : ouvrir le navigateur, taper la requête, attendre deux secondes, cliquer "copy top N", revenir à Claude, coller, demander des angles. Six étapes pour quelque chose que je fais vingt fois par semaine. Inacceptable.

Le lendemain. Un commit. 234 lignes. J'ai déplacé l'algorithme dans mon serveur MCP personnel (celui qui contient déjà mes outils de stats Medium, mon extracteur de transcripts YouTube, ma recherche d'archive d'articles). Une action Convex wrappant la même logique findOutliers, exposée comme un outil appelé find_youtube_outliers.

Si MCP est nouveau pour vous, pensez-y comme un protocole standard qui permet à Claude Code d'appeler vos fonctions comme si elles étaient intégrées dans l'assistant. La fonction vit sur votre serveur. Claude décide quand l'appeler selon le message de l'utilisateur.

Maintenant quand je brainstorme avec Claude je tape juste "find outliers for X and suggest 5 angles." Claude appelle l'outil lui-même, lit les titres, propose des hooks, enchaîne souvent directement sur get_youtube_transcript sur le premier résultat pour échantillonner le pattern de hook, puis sur search_articles contre ma propre archive pour vérifier si j'ai déjà couvert l'angle.

Pas de navigateur. Pas de TSV. Pas de paste. Pas de changement de contexte.

Une réserve. Je suis allé sur MCP ici parce que je suis le seul utilisateur et Claude Code le seul appelant. Pour un outil un-utilisateur-une-machine, MCP va bien. Si vous prévoyez d'appeler votre chercheur d'outliers depuis des cron jobs, un autre script, un bot Discord, n'importe où ailleurs, un CLI simple est généralement la meilleure forme. Je suis allé plus loin sur les compromis entre intégration CLI et MCP ailleurs.

Le vrai shift ici n'est pas MCP vs CLI. C'est que votre outil arrête d'être une app que vous ouvrez et devient une capacité que le modèle utilise. Même code. Gravité différente. 🛠️

Pourquoi Chaque Article "Alternative à 1of10" Est une Pub

J'ai googlé "1of10 alternative" avant de construire le mien. Chaque article en page 1 était un article d'affiliation. Même template à chaque fois :

1of10 est génial MAIS c'est cher. Voici [lien d'affiliation], seulement 9$/mois, bien meilleur rapport qualité-prix.

Ce ne sont pas des alternatives. C'est du SaaS moins cher sur le même modèle économique. Vous payez chaque mois, les données restent sur leurs serveurs, et vous attendez qu'une équipe produit shippe le filtre dont vous avez besoin. Ce qu'ils ne feront pas, parce que leur roadmap est pilotée par ce qui les fait apparaître sur Product Hunt, pas par votre boucle de brainstorming.

La vraie alternative c'est "j'ai écrit le truc et je le possède." Personne n'écrit cet article parce qu'il n'y a pas de lien d'affiliation dedans.

Même mouvement que j'ai fait quand Anthropic a tué mon setup de scraping à 200$/mois et que je l'ai reconstruit pour 15$. Même principe à chaque fois : le SaaS est presque toujours une UI par-dessus quelque chose de gratuit. Si vous pouvez décrire ce que vous voulez à un modèle, vous payez pour l'habillage.

Ce qui, si vous ne savez pas coder, est fair. Si vous savez coder mais préférez payer plutôt que prompter, aussi fair. Mais si vous aimez construire, sachez que le paywall est optionnel. Et de plus en plus optionnel chaque mois.

Dans six mois il y aura quinze nouveaux "alternative à 1of10, seulement 9$/mois !" sur Product Hunt. Tous construits sur la même API publique gratuite. Tous avec un tableau de bord, un toggle dark mode, un appel d'onboarding que personne ne veut faire.

Et puis il y a ceux qui ouvrent leur éditeur. Qui utilisent l'IA pour construire des outils exactement à la forme de leur workflow. Comme les artisans japonais, qui fabriquent leurs propres ciseaux pour le bois qu'ils sculptent.

Pas de churn. Pas de pivot IA. Juste une boucle for.


Sources

(*) La couverture est générée par IA. J'ai essayé de prompter "a viral thumbnail outlier", juste pour voir. Le modèle a renvoyé un poster de conférence.