Case study · Built with Claude Code

I wanted to launch a newsletter.
I ended up building
a tool just for me.

I'd had the idea for months. A site where I'd share my watch on AI, business, sports, everything that interests me. Before writing the first line of code, I asked Claude Code to do the market research. It told me no. So I built something else.

9 min read Case study Tools Claude Code
Jérémy Sagnier Jérémy Sagnier · I test AI every day · I share what helped me Published · Updated April 20, 2026
What you'll read, in 30 seconds

The story in three points

  • I wanted to launch a general-interest newsletter. The research sub-agents handed me a brutal verdict: saturated market, huge opportunity cost, less than 5% odds of making a living from it in 24 months.
  • I pivoted four times before making a call. The last pivot: stop aiming for a public product and build the watch tool I actually needed for myself.
  • In a single day of building with Claude Code, I shipped a tool that ingests 96 sources every morning at 7 a.m., proposes 30 topics in French, and generates 1,000-word long-form analyses. It all runs locally on my Mac. Real cost: about €5 a month.

Brand new to AI?

If some of the terms lose you (Claude Code, terminal, agent, MCP, skill…), start with the beginner's guide first and keep the glossary open in another tab. You'll come back here with the basics.

— The starting point

The idea I'd had in my head for a long time.

I wanted to launch a site. A personal hub where I'd share what I read, what I watch, what I test. Not just about AI: also about business, sports, fatherhood, geopolitics. The urge had been there for months. I told myself that after piling up so much watch, I had something worth passing on.

Before writing the first line of code, I did what I always do now: I asked Claude Code to check whether the idea held up. I had no desire to spend six months on a project only to discover along the way that there was no audience. This logic of putting agents to work in parallel before coding, I learned it by reading the work of Karpathy.

— The diagnosis

What the sub-agents told me.

I fired up three research sub-agents in parallel (specialized mini-AIs that work alongside the main conversation). Their mission: dig into the market for newsletters and "public second brains" in French, quantify the potential, benchmark the existing players.

A brutal verdict I didn't see coming:

  • The format already exists. Internationally, it's saturated.
  • The median Substack newsletter makes €4,000 a year after 24 months of work.
  • The free-to-paid conversion rate hovers around 1 to 3%.
  • To stand out, count on 8 to 14 hours a week for a year and a half, minimum.
  • And above all: less than 5% odds of clearing €4,000 a year. A huge opportunity cost against time invested elsewhere.

The sub-agents were very direct: "Drop the general-interest, multi-topic newsletter. Put those hours into something else."

— The attempts

The four pivots before making a call.

Instead of giving up, I tried to find the angle that might work. I explored four successive tracks with Claude Code:

# Angle Verdict
1 A general-interest site, "a founder reads the world" Requires ten years of public track record I don't have yet
2 A pure curation newsletter Already occupied by established French players (Snowball, Flint, Marie Dollé)
3 A journal of an entrepreneur dad Empty editorial slot, but low demand (fewer than 5,000 reachable subscribers)
4 Multi-project "build in public" Good fit with my profile, but exposes my companies too much

By the end of that exploration, I was stuck. Each angle had a blocking flaw. I was ready to shelve the project.

— The click

The moment I changed my goal.

The click came when I stopped wanting a product and asked myself what I, concretely, would have loved to have in my day.

Here's what I wrote to Claude Code that morning:

"This will be my own watch first. Build a tool to do my watch on every topic. Be able to add sources. The goal: have the data I need."

Everything changed with that sentence. We went from a public product to sell to a private tool to build. The constraints fell away one by one:

  • No need to find a marketing angle
  • No need for a sellable promise
  • No need for 8 to 14 hours a week publishing
  • No need for an acquisition strategy

Just a tool. For me. That runs at my place.

— The story

What I built in one day.

On April 16, 2026, in a single day of building with Claude Code, I shipped the full v1 of the tool. Ten phases, from the database to the generated analyses, by way of the automatic ingestion.

Here's what's inside:

  • 96 sources on AI and business, multilingual — English, French, Spanish, German and Japanese — Ethan Mollick, Stratechery, a16z, McKinsey, podcasts, YouTube channels, GitHub, Hacker News, Reddit, Product Hunt.
  • A worker that runs at 7 a.m. (a little program that runs on its own in the background), triggered by my Mac's scheduler. It ingests everything new from overnight while I sleep. It's the same loop pattern I describe in Claude Code loops — an agent that runs unattended to produce a deliverable by the time you wake up.
  • A SQLite database (a mini database stored in a single file) that lives entirely on my disk. No cloud. One portable file.
  • A semantic search engine that runs locally thanks to Ollama — a multilingual embedding model (in plain terms: it turns text into numbers to compare their meaning, not just their words) that understands the 96 sources even when they speak different languages. If open source sounds like a dev topic to you, it's less and less so — Ollama and SQLite are accessible without a technical background.
  • Two Claude models used at different stages: Claude Sonnet to propose 30 topics of the day, Claude Opus to write the long-form analyses when I pick a topic.
The watch tool dashboard with a sidebar on the left and topics ranked by score on the right
The tool's dashboard — navigation on the left, the day's topics ranked by score on the right

All of it, in a single day of design and coding. With Claude Code. If you want to understand the "second brain" philosophy behind this kind of tool, I've written at length about Karpathy's LLM Wiki, which is one of the big inspirations for this approach.

— Under the hood

How it works, step by step.

When I say "the tool ingests 96 sources and hands me 30 topics," that stays vague. Here's what actually happens, in five steps, every morning while I sleep. By the end of the last step, my dashboard holds the topics I'll spend my day on.

The big picture, in one line:

Reddit + HN + GitHub + RSS + YouTube  →  Bot  →  5-axis score  →  Top 60  →  My hands  →  10 kept
Watch pipeline funnel — 5 steps Vertical funnel showing the drop from raw feed to signal: 96 sources, 476 items, 310 clusters, 60 scored, 10 kept, a 2 percent retention rate. FROM RAW TO SIGNAL · RATE 2 % 96 SOURCES Reddit · HN · RSS · YouTube 476 ITEMS ingested in parallel 310 CLUSTERS after Jaccard dedup 60 ITEMS after 5-axis scoring 10 KEPT today's reading RATE 2 % my daily reading capacity IN OUT
From raw to signal: 476 items become 10 reads of the day. Rate 2%.

And the detail of the five steps, with the real numbers from a typical Friday morning run:

1. Parallel source collection — ~476 items fetched

The worker fires off around thirty requests in parallel: 11 Reddit subreddits, 5 Hacker News searches, 2 GitHub searches, 8 official RSS feeds (OpenAI, Google AI, Hugging Face, Simon Willison, TechCrunch AI, The Verge AI, MIT Tech Review, HN Best), around ten dynamic Google News feeds on keywords I want to follow, and 16 YouTube channels via their Atom feed (free, no API key).

All of it in parallel so there's no waiting. In 30 to 60 seconds, I have about 476 raw items in an in-memory array. Many are duplicates, many are noise. But it's the wide net you have to cast first.

2. Deduplication by title similarity — ~310 clusters left

When OpenAI announces a new model, I get the news 5 times: on the OpenAI Blog, on HN, on Reddit r/OpenAI, on Google News, and on a YouTube video talking about it. It's useful information once.

The tool measures the similarity between titles (a dead-simple calculation that compares the words they share, what's called a "Jaccard") and groups everything that clears 50% resemblance. The 476 items become about 310 clusters. Total engagement accumulates within the cluster, so a piece of news seen everywhere mechanically rises.

3. Scoring on 5 axes — score of 0 to 10 per item

Each cluster takes an exam on five criteria: how many people are talking about it, is it in my topics, does it age well, have I tested it myself, is there already a clear article on it. Details in the section right after — I devote a whole block to it because it's the heart of the system.

The final score is a weighted average multiplied by a coefficient tied to the editorial cluster (Claude Code = ×1.25, frontier = ×1.0, off-cluster = ×0.5) and by a YouTube channel boost when the item comes from a channel right in my universe (1.0 to 1.15).

4. Anti-noise filtering + minimum threshold — ~60 items kept

The filtering is what changes everything. I built two keyword lists over the weeks:

  • Noise list (KEYWORDS_NOISE): memes, drama, "we're cooked" doomerism, jailbreaks, NSFW, low-value questions like "am I the only one." Any title containing one of these words takes a massive markdown.
  • YouTube signal list (YT_SIGNAL_KEYWORDS): for business channels like Silicon Carne or Underscore_, I only accept videos whose title or description contains an AI / entrepreneurship / workflow keyword. Otherwise Silicon Carne would surface episodes about French rap, which is great but not the topic of the day.

After the filter + a minimum score threshold (5 if the item is in a cluster, 7 otherwise), about 60 qualified items remain.

5. Final sort + human judgment — top 15 in the backlog, 10 kept by hand

The top 15 is written into BACKLOG.md with, for each idea, the score, the cluster, the clickable sources and a spot for my personal angle. Ideas older than 60 days that haven't been chosen automatically move to "rejected." The active backlog never exceeds 40 entries, which keeps me from choice paralysis.

In the morning, I look at the top 15. I spend about 10 minutes making calls. I keep a dozen topics I really want to dig into, I move 5 to "chosen," and I ask Claude Opus for the long-form version. It's the only truly manual step of the pipeline. And that's on purpose: this is where my voice and my angle enter the chain.

— The detail

The real sources scanned every day.

When I say "96 sources," I want you to be able to check. Here's the precise detail of what the worker digs through every morning, grouped by family. Every link works.

Reddit — 11 subreddits

#SubredditTargeted clusterItems / day
01r/ClaudeAIClaude Code~25
02r/ChatGPTCodingClaude Code + agents~25
03r/CursorAI tools~25
04r/LocalLLaMAFrontier~25
05r/MachineLearningFrontier~25
06r/artificialGeneral frontier~25
07r/EntrepreneurEntrepreneurship~25
08r/SaaSAI entrepreneurship~25
09r/ChatGPTAI tools~25
10r/OpenAIAI tools~25
11r/singularityFrontier (reinforced filter)~25

Hacker News + GitHub — targeted searches

#SourceQueryItems / day
12HN Algolia"claude code"~30
13HN Algolia"anthropic"~30
14HN Algolia"ai agent"~30
15HN Algolia"mcp"~30
16HN Algolia"llm tutorial"~30
17GitHub Search API"claude code"~15
18GitHub Search API"mcp server"~15

Official RSS feeds — 8 sources

#SourceTypeItems / day
19OpenAI BlogOfficial announcements~3
20Google AI BlogOfficial announcements~3
21Hugging Face BlogOpen source models~5
22Simon WillisonReference personal blog~10
23TechCrunch AITech media~15
24The Verge AITech media~10
25MIT Tech ReviewTech media~5
26HN BestHN curation~30

On top of that come 10 dynamic Google News feeds generated on the keywords I want to follow (Claude Code, Anthropic, AI agents, AI skills, the Superpowers plugin), in French and English. That's what brings me the business media announcements before they hit the blogs.

YouTube — 16 channels scanned via Atom feeds

For each channel, the worker fetches the Atom feed (free, no API key), filters videos less than 45 days old, applies the AI / business signal filter and keeps at most 10 videos per channel. The flagship channels (Underscore_, Silicon Carne, Vision IA, Grand Angle, IA et Stratégie) get a score boost of ×1.15 because they're the core of my universe.

#ChannelCategoryBoost
27Silicon CarneAI & Tech×1.15
28IA et StratégieAI & Tech×1.15
29Vision IAAI & Tech×1.15
30Underscore_AI & Tech×1.15
31MelvynxAI & Tech×1.10
32Grand AngleAI & Tech×1.10
33Grand Angle NovaAI & Tech×1.10
34Alex HormoziBusiness×1.0
35Leila HormoziBusiness×1.0
36GaryVeeBusiness×1.0
37Iman GadzhiBusiness×1.0
38Grant CardoneBusiness×1.0
39LEGENDBusiness×1.0
40Oussama AmmarBusiness×1.05
41Le DéclicBusiness×1.0
42Antoine BlancoBusiness×1.0

The total runs between 96 and 110 active sources depending on the week (the Google News feeds vary with the keywords I tweak). It's deliberately capped: beyond that, I bury myself under the noise. Below it, I miss things.

— The heart of the system

The 5-axis scoring, demystified.

The whole point of the pipeline sits here. Without scoring, I'd surface 60 items at random. With scoring, I surface the 60 items that match my own editorial angle. That's what turns an aggregator into a personal tool.

I deliberately gave up on using an LLM to score. Too expensive (×476 items × 4 runs / day = way too much), too opaque (impossible to debug why an item is at the top), too slow. Instead, simple rules on the title. Five axes, each scored out of 10. Here's what each one measures.

1. Demand — how many people are talking about it

This is raw engagement: Reddit upvotes + comments × 2, HN points + comments × 2, YouTube views / 100 + likes × 10, GitHub stars + forks × 3. All of it normalized to a scale of 0 to 10.

Concrete example. An r/ClaudeAI post at 2,000 upvotes and 300 comments makes a raw engagement of 2,600. Demand score: 10. An official OpenAI release on their blog starts at 5 (official baseline) and rises if HN picks it up.

2. Relevance — is it in my domain

The title runs through a sieve of positive keywords (claude, agent, mcp, skill, automation, prompt, llm, solopreneur…) and an anti-noise list (memes, drama, doomerism, jailbreaks). Each positive match adds 1.5 points, each anti-noise match subtracts 4 points.

Concrete example. "How I built an agent with Claude Code MCP" → +1.5 (built) +1.5 (agent) +1.5 (claude code) +1.5 (mcp) = 9 out of 10. "Anyone else feel AGI is coming?" → -4 (anyone else) -4 (agi coming) = 0 out of 10, eliminated.

3. Evergreen — will it still matter in 6 months?

Same logic on the title: tutorial words boost ("how to," "tutorial," "guide," "pattern," "lessons learned," "my config"), announcement words mark down ("released," "announce," "new version," "coming soon").

Concrete example. "Lessons learned building 10 Claude Code agents" → +1.5 = 6.5/10, will last over time. "Anthropic announces Claude 5" → -1.5 = 3.5/10, will be stale in 3 weeks (but can still clear the threshold thanks to the other axes).

4. Lived experience — have I tested it myself?

This axis is neutral by default (5/10). I adjust it by hand when I enter the idea into the backlog. If I've already spent a day on the topic, I bump it to 9. If it's a topic I've just heard about, I leave it at 5. If it's a topic where I have no experience to add, I drop it to 2.

Why this axis exists. My best articles are the ones where I have real lived experience. This filter keeps me from getting swept up by sellable topics I have nothing specific to say about.

5. Gap — is a clear article on the topic missing?

The tool compares the proposed title to every article already published on the site (a Jaccard measure on the title's words). The lower the similarity, the higher the gap. If I've already published "The loops of Claude Code explained," a new item "Understanding Claude Code loops" scores 0.6 similarity and drops to 1/10. If nothing matches, score 10.

Why this axis is crucial. Without it, I'd rewrite the same article on sub-agents 5 times. The gap forces me to explore topics that are genuinely new for my collection.

The final formula

The title's score is a weighted average:

base_score = (demand × 0.25) + (relevance × 0.30) + (evergreen × 0.15) + (lived × 0.10) + (gap × 0.20)

final_score = base_score × cluster_multiplier × youtube_channel_boost

The 6 editorial clusters with their multiplier:

#ClusterMultiplierTypical keywords
01Claude Code tutorials×1.25claude code, mcp, skill, hook, sub-agent
02Concrete AI agents×1.25built an agent, gmail agent, n8n, langgraph
03Sharp opinions×1.10vs, overrated, i tried, lessons learned
04AI tools of the moment×1.10chatgpt, gemini, cursor, perplexity, comparison
05Entrepreneurship + AI×1.0solopreneur, mrr, my saas, indiehacker
06Frontier made simple×1.0karpathy, paper, transformer, scaling laws
Off-cluster×0.5(massive markdown if nothing matches)

And for items that come from YouTube, an extra channel boost (1.0 to 1.15) depending on how close I am to the channel's voice. Underscore_ dropping a Claude Code video at ×1.15 + Claude Code cluster at ×1.25 = a score inflated by +44% vs the raw value. On purpose.

This formula has evolved. At first, I just had raw engagement. The result: Reddit drama at the top, interesting topics at the bottom. I added relevance. Better, but too much fresh news with no interest to me. I added evergreen and cluster. That's when I started getting genuinely relevant ideas. The gap came last, because I'd written the same article twice.

— Your turn

Want to do the same? Three levels.

The tool I describe here isn't magic, and it's certainly not the only path. Depending on the time you can invest in it, here are the three levels of setup. Each level gives you back 70 to 80% of the value of the next one. No need to go to level 3 to have a real watch that changes your day.

Level 1 — Feedly + 5 official RSS feeds + a paper checklist (5 minutes)

The bare minimum. You create a free account on Feedly, add 5 official RSS feeds to it (OpenAI, Google AI, Hugging Face, Simon Willison, TechCrunch AI). You install the app on your phone. You sit down for 10 minutes in the morning with a coffee and read what came up.

What you gain. You stop missing official announcements. You stop scrolling X to discover a release you could have had firsthand 3 days earlier. Cost: €0. Setup time: 5 minutes. Daily time: 10 to 15 minutes.

The paper checklist as a bonus. 3 questions on a sticky note next to the keyboard: (1) "Does this touch my work?" (2) "Will I remember it in 3 months?" (3) "Do I have a reason to share it?" If the answer is no to all three, you close the tab. It sounds dumb but it changes everything: you stop hoarding noise.

A few extra sources worth wiring in as early as level 1 depending on your angle: Korben.info for mainstream French tech watch, Console.dev for new, well-filtered dev tools, and Hacker News directly (or via its Algolia) for the conversations that fall outside the official circuit.

Level 2 — n8n or Make + Reddit/HN scraping + manual scoring (1 weekend)

You move up a level when Feedly is no longer enough. You install n8n in self-hosted mode (free) or you get a Make account (lightly paid). You set up a workflow that fetches Reddit (free API), Hacker News (free Algolia API), your RSS feeds, and drops all of it into a Google Sheet or a Notion database every morning.

The scoring is done by hand: you add a "rate 1 to 5" column and you sort. It's less automatic than my tool but it's 10 times more powerful than Feedly because you choose exactly which sources come in and you can filter by keyword.

What you gain. You see Reddit and HN go by without having to go there. You build your own view. Cost: €0 to €20 / month. Setup time: one weekend. Daily time: 15 to 20 minutes.

Level 3 — Your own Claude Code pipeline (1 month)

This is what I did. You build your own with Claude Code, starting from scratch or drawing on mine (the brainstorm.js code is public on my site's repo). You get: custom sources, custom scoring, custom filters, a dashboard integrated into your work tool, total control over your data.

What you gain. A tool that becomes an extension of your head. Cost: €5 to €10 / month in API. Setup time: 1 month on the side in the evenings, or one full day if you can free up a whole Saturday like I did. Daily time: 5 minutes to judge the top 15.

Honestly: start at level 1. If in 3 weeks you find yourself thinking "I'm missing Reddit and HN," move to level 2. If in 3 months you think "I want scoring that matches my obsessions exactly," move to level 3. The worst mistake is to aim for level 3 from the start and never begin because it's too big to tackle.

— The contrast

My watch before, my watch now.

Before. I did my watch like a lot of people: I scrolled X, I checked Google News, I hung around YouTube. It was time-consuming. I'd sometimes spend an hour scrolling only to end up with three pieces of information in my head, two of them badly explained. I missed important announcements because they were drowned in the noise. And when I did stumble on something interesting, I didn't have the time to really dig in.

Now. I get up, grab my coffee, open my tool. The worker has already digested the 96 sources from overnight. I click "Run the watch." Thirty topics in French appear, ranked by score. I read the titles, I check the ones that interest me. Claude Opus hands me a 1,000-word analysis per topic, in French, with the sources cross-referenced.

Full view of the list of topics proposed by the watch tool each morning
The topics proposed each morning after digesting the 96 sources — scored impact, category, excerpt

Right now, the tool surfaces precise topics for me that I wouldn't have seen by scrolling:

  • The latest on Gemma, Google's open-source model
  • Anthropic's announcements as the weeks go by
  • American investment funds' analyses of AI use in the enterprise

These are topics I wouldn't have found on my own, or wouldn't have understood in depth if I'd seen them go by on X.

— The numbers

What it costs me, what it brings me.

The monthly cost runs around €5 a month, sometimes a bit more depending on how often I use it. Max €10 in the months when I run a lot of analyses. It's the calls to Claude Sonnet (the 30 topics proposed each day) and to Claude Opus (the long-form analyses) that make up almost all of that amount. The rest — ingesting the 96 sources, the Ollama embeddings, the SQLite database — runs for free on my Mac.

For €5 a month, here's what I get:

  • My watch digested every morning
  • French analyses on the topics I select
  • The raw material to write my newsletter
  • The raw material to produce content (articles, posts, shares)
  • My data staying with me, on my disk

It's probably the best value-for-money I've gotten from building a tool myself.

— My takeaways

What I take away from this story.

Three lessons I've been repeating to myself since:

1. Before you build a product, ask Claude Code to check the market.

I nearly invested months in a newsletter that had only a 5% chance of taking off. Three sub-agents in two hours spared me that mistake. It's not a guarantee, but it's a huge filter.

2. The tool you build for yourself is sometimes worth more than the product you dream of selling.

I no longer need to chase a thousand paying subscribers. I need a tool that runs every morning. And one feeds the other, by the way: the watch I do with this tool fuels the content I publish. The public product came out as a consequence, not as a goal.

3. In a single day, with Claude Code, you can build something that really runs.

Not a prototype. A complete tool, with automatic ingestion, clustering, long analyses, a polished interface. When I was alone with my idea, I'd have told myself it was a six-month project. With Claude Code, it's a single day of building, and four days later you tweak the visual identity so it looks nice.

— Over to you

And you, what's your watch like?

If you do your watch the way I used to — scrolling X, Google News, YouTube, LinkedIn, with the feeling of missing the essentials — I'm curious what your days look like.

Reply to this email with:

  • The three sources you check most often
  • How much time you spend on watch per day
  • What you'd like to see improved

I read everything. I'm not selling anything. I'm just trying to understand how others go about it.

— FAQ

FAQ on the AI watch pipeline.

What is the 5-axis scoring?

Five weighted axes: Demand (raw engagement, votes, comments), Relevance (match with my topics), Evergreen (longevity, not just fresh news), Lived experience (match with my own use) and Gap (rare topic versus already covered). The raw score is multiplied by a cluster coefficient (1.0 to 1.25 depending on the editorial category) and a YouTube boost (1.0 to 1.15 for the flagship channels).

How much does it cost per month?

About €5 a month, sometimes up to €10 in the months when I run a lot of long-form analyses. It's the calls to Claude Sonnet (the 30 topics a day) and to Claude Opus (the analyses) that make up almost all of it. The rest — ingesting the 96 sources, Ollama embeddings, SQLite database — runs for free on my Mac.

How many ideas per run?

A typical run: 476 items ingested from 96 sources, 310 clusters after deduplication by Jaccard similarity, 60 items after signal/noise filtering, 15 items in the active backlog, 10 items I actually keep for deep analysis. That's a 2% retention rate between the raw ingestion and what deserves my attention.

Which sources does the tool scan?

96 sources in four families. Eleven subreddits (r/ClaudeAI, r/ChatGPTCoding, r/LocalLLaMA, r/MachineLearning, r/Entrepreneur, etc.). Seven HN + GitHub sources via the Algolia API. Eight official RSS feeds (OpenAI, Google AI, Hugging Face, Simon Willison, TechCrunch AI, The Verge AI, MIT Tech Review, HN Best). Sixteen YouTube channels via Atom feeds. Plus ten dynamic Google News feeds. Real total: 96 to 110 active sources depending on the week.

Do you need to be a developer to reproduce this pipeline?

No. For level 3 (the full Claude Code pipeline), you need to know how to install Claude Code, create an Anthropic account and be willing to spend a full day or a month on the side building-testing-tuning. But 70 to 80% of the value comes at level 1 (Feedly + 5 official RSS feeds, 5 minutes) or level 2 (self-hosted n8n + Reddit/HN scraping, one weekend). Start at level 1, move up if you feel the need.

What's the difference between this tool and Feedly?

Feedly is an RSS aggregator that lists the latest published articles for you. This tool goes three notches further: it also scrapes Reddit, Hacker News and YouTube, it deduplicates by Jaccard similarity to group the variants of a single topic, it scores on five weighted axes tuned to my obsessions, and it calls Claude Opus to produce a 1,000-word French analysis per chosen topic. Feedly gives you the raw feed, this tool gives you something digested and prioritized.

Why not use an LLM to score instead of a formula?

I deliberately gave up on using an LLM to score. Too expensive: on 476 items a day, that would be tens of thousands of calls a month. Too opaque: impossible to understand why an item moves up or down. Too slow: each call adds 2 to 10 seconds, which is hours of latency across the whole thing. The math formula with cluster multipliers is fast, readable and auditable.

How do you add a new source?

Three steps depending on the type. For a subreddit or an official RSS feed: add the URL to the config table and rerun. For a YouTube channel: resolve the channelId once (cached for 90 days), add it to the youtube-channels.js file with its boost. For a dynamic Google News search: add the keywords to the worker. Budget 5 to 15 minutes to integrate a source cleanly, test it on one run and adjust the signal/noise filters if needed.

Why Ollama rather than OpenAI embeddings?

Ollama runs locally on my Mac with a multilingual embedding model, for free, without sending a single line over the Internet. OpenAI text-embedding-3-small costs $0.02 per million tokens — cheap but paid, and my data goes to OpenAI. On 476 items a day the financial gap is tiny, but the data control is total with Ollama. And I avoid one more dependency.

Does the pipeline work on Windows?

Yes. The code is Node.js + SQLite, two cross-platform building blocks. Ollama has run on Windows since 2024, and so has Claude Code. The only friction: the worker currently runs on my Mac via launchctl for the fixed-time trigger. On Windows you'd go through the Windows Task Scheduler or WSL2. For 99% of the code, zero changes needed.

Spot a mistake?

A piece of outdated info, a number that has moved, a stale source? Write to me at sagnier.jeremy@gmail.com · I fix it within 48h max and note the update date at the top of the article. Field feedback is worth a thousand times more than the articles — I read everything, I reply.

Jérémy Sagnier
Thanks for reading this far 👋

Shall we keep going?

I test AI for real and share what works, no jargon and no hype. If this article helped you, the easiest way to not miss anything is my Friday letter. And if you have a question or a doubt: reply to me, I read everything.

Get the newsletter → Read more articles