Retour aux projets
SaaS B2C · Veille personnelle

ALLIN : Briefing personnalisé

Transformer 10 heures de contenu suivi sur 8 plateformes en un briefing de 2 minutes livré chaque matin par email. Architecture edge Cloudflare.

Contexte

Créateur, marketeur, journaliste, investisseur, ou simplement curieux d'un sujet de niche : aujourd'hui, suivre son domaine, c'est surveiller une trentaine de sources éparpillées sur YouTube, TikTok, Instagram, Twitter/X, Telegram, Substack, des podcasts et des flux RSS. Le volume est tel qu'on finit noyé : on passe son temps à scroller sans jamais avoir le sentiment d'être vraiment à jour. Les agrégateurs comme Feedly ou Inoreader se contentent d'empiler des liens. ALLIN va plus loin : il résume, hiérarchise et personnalise.

J'aime ce projet parce qu'il touche à beaucoup de couches : modélisation de données, scraping multi-plateforme, LLMs en parallèle, edge computing, billing, transactionnel, delivery email. Un vrai projet "couteau suisse", le genre de problème sur lequel je suis à l'aise.

Le challenge métier

Construire un produit qui scale techniquement (chaque utilisateur = une matrice unique de sources × préférences) sans exploser le coût marginal LLM. La réponse architecturale : déduplication agressive en amont, résumés réutilisables, personnalisation au moment du delivery.

Le flow : du sign-up au briefing du matin

Deux flows imbriqués : un parcours utilisateur côté front (inscription + sélection des sources + billing) et un pipeline opérationnel automatisé qui tourne chaque nuit pour livrer le briefing à 7h.

  1. 1. Inscription : l'utilisateur arrive sur l'une des 5 landing pages Astro A/B testées et crée son compte.
  2. 2. Sélection de sources : il choisit les comptes, podcasts et feeds qu'il suit parmi 8 plateformes (YouTube, TikTok, Instagram, X, Telegram, Substack, podcasts, RSS).
  3. 3. Billing : Lemon Squeezy gère le paiement (freemium ou premium) et déclenche l'activation via webhook.
  4. 4. Pipeline nocturne, scraping : un cron sur VPS récupère les nouveaux contenus de toutes les sources suivies via les 8 scrapers.
  5. 5. Transcription : Whisper (Workers AI) transforme l'audio des podcasts et des vidéos en texte.
  6. 6. Résumé LLM : 4 LLMs en parallèle (GPT-4, Claude, Grok, Gemini) génèrent un résumé brut par contenu. Le résultat est mis en cache KV : un même contenu suivi par 100 utilisateurs n'est résumé qu'une seule fois.
  7. 7. Assemblage personnalisé : au moment du delivery, le Worker compose le briefing en ne piochant que les résumés des sources de l'utilisateur.
  8. 8. Podcast custom : TTS xAI génère une version audio personnalisée (stockée sur R2, avec un lifecycle de 7 jours).
  9. 9. Email 7h : Resend délivre le briefing HTML et le lien du podcast dans la boîte mail de l'utilisateur.
flowchart TB subgraph U["Parcours utilisateur (front)"] U1["1. Sign-up
landing Astro A/B"] U1 --> U2["2. Sélection sources
8 plateformes possibles"] U2 --> U3["3. Billing Lemon Squeezy
freemium / premium"] end subgraph P["Pipeline nocturne (cron VPS)"] P1["4. Scraping
8 scrapers multi-plateforme"] P1 --> P2["5. Transcription Whisper
audio → texte"] P2 --> P3["6. Résumé LLM
4 modèles en parallèle"] P3 --> P4["Cache KV
résumés mutualisés"] end subgraph D["Delivery 7h"] D1["7. Assemblage personnalisé
Worker compose le briefing"] D1 --> D2["8. Podcast TTS xAI
R2 lifecycle 7j"] D2 --> D3["9. Email Resend
briefing + lien podcast"] end U3 -.active user.-> P1 P4 --> D1

Stack technique

Back-end edge Cloudflare
  • Cloudflare Workers (Hono + TypeScript)
  • D1 SQL (SQLite distribué)
  • KV namespace (cache résumés)
  • R2 bucket (rapports + MP3, lifecycle 7j)
  • Workers AI (Whisper + embeddings BGE)
Scrapers multi-plateforme
  • YouTube RSS · TikTok · Instagram
  • Twitter/X · Telegram Bot (MTProto)
  • Substack · Podcast RSS
  • Puppeteer + gstack headless
LLM & recherche
  • GPT-4 / Claude / Grok / Gemini
  • Triple moteur recherche : Brave + Serper + Grok
  • Transcription Whisper (Workers AI)
  • TTS xAI pour podcast personnalisé
Frontend & billing
  • Astro + Alpine.js + Tailwind
  • 5 landing pages A/B testées (lp1-5)
  • Lemon Squeezy (paiement + webhooks)
  • Resend (email transactionnel + digest)

3 décisions d'architecture clés

1. Edge computing pour le delivery, VPS pour le scraping

Les Workers Cloudflare sont parfaits pour servir des requêtes à faible latence et faire la composition finale des briefings. Mais ils ne sont pas faits pour des jobs longs (10 minutes de scraping vidéo). J'ai donc migré les crons vers un VPS daemon, en gardant le Worker comme façade API exposée /api/run-pipeline avec ADMIN_TOKEN. Découplage propre.

2. Résumés mutualisés en KV, briefings personnalisés au delivery

Le même YouTube vidéo regardé par 100 utilisateurs n'a pas besoin d'être résumé 100 fois. Le résumé brut (LLM) est mis en cache KV avec une clé content_id. Au moment du delivery, le Worker assemble un briefing personnalisé en piochant uniquement les résumés des sources que cet utilisateur suit. Coût marginal LLM : O(content) plutôt que O(content × users).

3. Lifecycle automatique R2 : 7 jours puis suppression

Les briefings HTML et les podcasts MP3 personnalisés sont stockés sur R2 avec une règle de lifecycle "auto-delete > 7 jours". Aucun nettoyage manuel, aucun risque de facture surprise. C'est l'équivalent d'un trigger Apex "scheduled delete", mais géré au niveau de l'infra.

Résultats

8
scrapers multi-plateforme
5
landing pages A/B testées
4
LLMs intégrés (GPT, Claude, Grok, Gemini)
Edge
back-end Cloudflare Workers

Lien direct avec Salesforce

ALLIN est une mini-org Salesforce multi-tenant. Voici la cartographie :

Lessons learned

← EEL Projet suivant : Tokenverse →