<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Diego Fernando</title>
    <description>The latest articles on DEV Community by Diego Fernando (@diegosantdev).</description>
    <link>https://dev.to/diegosantdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3840713%2F7ae66c92-ce14-462c-907c-0bb022f782ed.png</url>
      <title>DEV Community: Diego Fernando</title>
      <link>https://dev.to/diegosantdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/diegosantdev"/>
    <language>en</language>
    <item>
      <title>LicensePulse: The Missing Layer in Open Source License Monitoring</title>
      <dc:creator>Diego Fernando</dc:creator>
      <pubDate>Fri, 27 Mar 2026 17:09:49 +0000</pubDate>
      <link>https://dev.to/diegosantdev/licensepulse-the-missing-layer-in-open-source-license-monitoring-4nep</link>
      <guid>https://dev.to/diegosantdev/licensepulse-the-missing-layer-in-open-source-license-monitoring-4nep</guid>
      <description>&lt;p&gt;Most license tools answer a static question:&lt;/p&gt;

&lt;p&gt;What license does this dependency use right now?&lt;/p&gt;

&lt;p&gt;Useful question.&lt;/p&gt;

&lt;p&gt;But not the one that kept bothering me.&lt;/p&gt;

&lt;p&gt;The harder question is:&lt;/p&gt;

&lt;p&gt;What happens when an upstream project changes its license tomorrow?&lt;/p&gt;

&lt;p&gt;That is a very different problem.&lt;/p&gt;

&lt;p&gt;A dependency scan tells you the current state of your project.&lt;br&gt;
It does not watch the repositories you rely on.&lt;br&gt;
It does not tell you when the acceptable usage boundaries shift.&lt;br&gt;
And it usually does not help much with the next question:&lt;/p&gt;

&lt;p&gt;What do we do now?&lt;/p&gt;

&lt;p&gt;That is why I built LicensePulse.&lt;/p&gt;

&lt;p&gt;The problem with treating licenses as static metadata&lt;/p&gt;

&lt;p&gt;In practice, most teams treat open source licenses like package metadata.&lt;/p&gt;

&lt;p&gt;Something you inspect during audits.&lt;br&gt;
Something legal checks later.&lt;br&gt;
Something tooling reports as a label.&lt;/p&gt;

&lt;p&gt;But licenses are not always static.&lt;/p&gt;

&lt;p&gt;We have already seen major examples of projects changing their licensing model:&lt;/p&gt;

&lt;p&gt;Terraform&lt;br&gt;
Redis&lt;br&gt;
Elasticsearch&lt;br&gt;
MongoDB&lt;/p&gt;

&lt;p&gt;And every time, the engineering impact is bigger than people think.&lt;/p&gt;

&lt;p&gt;Even when the license change is forward-looking and does not retroactively invalidate earlier versions, it still changes the decision space around:&lt;/p&gt;

&lt;p&gt;future upgrades&lt;br&gt;
commercial usage&lt;br&gt;
internal policy&lt;br&gt;
procurement review&lt;br&gt;
long-term dependency strategy&lt;/p&gt;

&lt;p&gt;That means a license change is not just a legal event.&lt;/p&gt;

&lt;p&gt;It is also a software supply chain event.&lt;/p&gt;

&lt;p&gt;Why existing tooling was not enough&lt;/p&gt;

&lt;p&gt;There are already strong tools for scanning dependency licenses.&lt;/p&gt;

&lt;p&gt;They are useful.&lt;br&gt;
They solve an important problem.&lt;/p&gt;

&lt;p&gt;But I wanted something more upstream.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;what licenses are in my project today?&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;which repositories I depend on are becoming risky over time?&lt;/p&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;A scanner can tell you what is already inside your dependency tree.&lt;br&gt;
It usually does not treat license change itself as a first-class signal worth tracking historically.&lt;/p&gt;

&lt;p&gt;That was the gap.&lt;/p&gt;

&lt;p&gt;What LicensePulse is&lt;/p&gt;

&lt;p&gt;LicensePulse is an open-source tool that monitors GitHub repositories for license changes and makes those changes easier to interpret.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;license scanners check your project&lt;br&gt;
LicensePulse watches theirs&lt;/p&gt;

&lt;p&gt;That means tracking the source repo itself, not just waiting until a changed license shows up later as part of a dependency audit.&lt;/p&gt;

&lt;p&gt;What it actually does&lt;/p&gt;

&lt;p&gt;LicensePulse started as a license change watcher, but it evolved into something more actionable.&lt;/p&gt;

&lt;p&gt;Today it focuses on four core areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;License change detection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It detects when a monitored repository changes its license and records that change as a trackable event.&lt;/p&gt;

&lt;p&gt;Not just “MIT” or “Apache-2.0” as metadata.&lt;br&gt;
A real before/after state change.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Risk scoring&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A license change is not equally risky in all cases.&lt;/p&gt;

&lt;p&gt;So LicensePulse adds a risk score per repository to help prioritize attention.&lt;/p&gt;

&lt;p&gt;The goal is not legal certainty.&lt;br&gt;
The goal is operational prioritization.&lt;/p&gt;

&lt;p&gt;If you depend on dozens or hundreds of packages, you need to know which ones deserve a closer look first.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Recommended alternatives&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When a project shifts toward a more restrictive licensing model, the next question is obvious:&lt;/p&gt;

&lt;p&gt;What should we use instead?&lt;/p&gt;

&lt;p&gt;LicensePulse now suggests alternatives where relevant.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Terraform → OpenTofu&lt;br&gt;
Redis → Valkey&lt;br&gt;
Elasticsearch → OpenSearch&lt;/p&gt;

&lt;p&gt;This turns the tool from passive reporting into something more decision-oriented.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dependency graph mapping&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A lot of license risk is indirect.&lt;/p&gt;

&lt;p&gt;You may think you are evaluating one package, but in practice you are accepting an entire transitive graph.&lt;/p&gt;

&lt;p&gt;So LicensePulse can map the full dependency tree for npm packages and make that graph visible.&lt;/p&gt;

&lt;p&gt;For example, a package like Express pulls in multiple transitive dependencies.&lt;br&gt;
Monitoring only the top-level package is often not enough.&lt;/p&gt;

&lt;p&gt;The engineering mindset behind it&lt;/p&gt;

&lt;p&gt;I did not want LicensePulse to become a wall of legal terminology.&lt;/p&gt;

&lt;p&gt;I wanted something that felt closer to how engineers actually work:&lt;/p&gt;

&lt;p&gt;detect change&lt;br&gt;
compare states&lt;br&gt;
rank risk&lt;br&gt;
suggest next moves&lt;br&gt;
reduce time-to-decision&lt;/p&gt;

&lt;p&gt;That is really the core idea.&lt;/p&gt;

&lt;p&gt;Not replacing legal review.&lt;br&gt;
Not pretending license interpretation is trivial.&lt;/p&gt;

&lt;p&gt;Just making upstream change visible earlier and more actionable.&lt;/p&gt;

&lt;p&gt;Why this matters more now&lt;/p&gt;

&lt;p&gt;Modern engineering teams depend on a huge amount of upstream software.&lt;/p&gt;

&lt;p&gt;That means your stack is not just code you wrote.&lt;br&gt;
It is also a graph of external decisions you do not control.&lt;/p&gt;

&lt;p&gt;Versioning changes.&lt;br&gt;
Maintainers change.&lt;br&gt;
Ownership changes.&lt;br&gt;
Licenses change.&lt;/p&gt;

&lt;p&gt;We already treat security issues in dependencies as first-class supply chain concerns.&lt;/p&gt;

&lt;p&gt;I think license drift deserves more of that same mindset.&lt;/p&gt;

&lt;p&gt;Not because every change becomes a crisis.&lt;/p&gt;

&lt;p&gt;But because late awareness is expensive.&lt;/p&gt;

&lt;p&gt;By the time many teams notice a licensing issue, the conversation is already harder:&lt;/p&gt;

&lt;p&gt;upgrades are blocked&lt;br&gt;
legal is involved late&lt;br&gt;
alternatives were not evaluated in advance&lt;br&gt;
context is missing&lt;br&gt;
decisions become rushed&lt;/p&gt;

&lt;p&gt;That is exactly the timing problem LicensePulse is trying to reduce.&lt;/p&gt;

&lt;p&gt;Built for practical workflows&lt;/p&gt;

&lt;p&gt;I care a lot about tools being usable in real environments, not just demos.&lt;/p&gt;

&lt;p&gt;So LicensePulse is designed to be:&lt;/p&gt;

&lt;p&gt;open source&lt;br&gt;
CLI-friendly&lt;br&gt;
zero-config oriented&lt;br&gt;
useful in automation workflows&lt;br&gt;
focused on practical output instead of noise&lt;/p&gt;

&lt;p&gt;The goal is to make it easy to integrate into the way technical teams already work.&lt;/p&gt;

&lt;p&gt;Final thought&lt;/p&gt;

&lt;p&gt;Open source license monitoring should not begin and end with a static scan.&lt;/p&gt;

&lt;p&gt;If an upstream dependency changes the rules around how it can be used, that deserves visibility as its own event.&lt;/p&gt;

&lt;p&gt;That is the idea behind LicensePulse.&lt;/p&gt;

&lt;p&gt;Not just telling you what a license is.&lt;/p&gt;

&lt;p&gt;But helping you notice when the ground moves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwnrtf51stnm40xjtsgo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwnrtf51stnm40xjtsgo.PNG" alt=" " width="498" height="395"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5c2wpf3ow9clj28jrqc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5c2wpf3ow9clj28jrqc.PNG" alt=" " width="497" height="213"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhraxtdvyhjk2skbvc1p4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhraxtdvyhjk2skbvc1p4.png" alt=" " width="486" height="902"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;LicensePulse is open source and available here&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://github.com/diegosantdev/LicensePulse" rel="noopener noreferrer"&gt;https://github.com/diegosantdev/LicensePulse&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I built a CLI that finds businesses losing $10k/month (and helps you close them)</title>
      <dc:creator>Diego Fernando</dc:creator>
      <pubDate>Mon, 23 Mar 2026 19:24:35 +0000</pubDate>
      <link>https://dev.to/diegosantdev/i-built-a-cli-that-finds-businesses-losing-10kmonth-and-helps-you-close-them-1gb7</link>
      <guid>https://dev.to/diegosantdev/i-built-a-cli-that-finds-businesses-losing-10kmonth-and-helps-you-close-them-1gb7</guid>
      <description>&lt;p&gt;I got tired of cold outreach. Low reply rates, no context, wrong timing.&lt;/p&gt;

&lt;p&gt;So I built LeadStrike, a Node.js CLI that detects businesses with strong Google reputations but zero digital presence. The gap between those two things is the opportunity.&lt;/p&gt;

&lt;p&gt;A dentist with 250 reviews, 4.9 stars, and no website is losing patients every day. They just do not know it. That is the easiest sales conversation you will ever have.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;p&gt;LeadStrike pulls from Google Places API and scores each business based on the difference between reputation and visibility. The bigger the gap, the hotter the lead.&lt;/p&gt;

&lt;p&gt;Setup is three commands:&lt;/p&gt;

&lt;p&gt;npm install&lt;br&gt;
cp .env.example .env&lt;br&gt;
npm start&lt;/p&gt;

&lt;p&gt;Covers 17 countries and 65+ niches. MIT license.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/diegosantdev/LeadStrike" rel="noopener noreferrer"&gt;https://github.com/diegosantdev/LeadStrike&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback on the scoring weights and what other signals would make a lead more actionable.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
