<?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: Miguel C.G.</title>
    <description>The latest articles on DEV Community by Miguel C.G. (@miguel_cg_aab1211d6e269).</description>
    <link>https://dev.to/miguel_cg_aab1211d6e269</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%2F4087064%2Fade797a3-267c-41bc-935d-9f7e6b02940e.png</url>
      <title>DEV Community: Miguel C.G.</title>
      <link>https://dev.to/miguel_cg_aab1211d6e269</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/miguel_cg_aab1211d6e269"/>
    <language>en</language>
    <item>
      <title>How I Built a Local-First Chrome Extension to Stop Forgotten Auto-Renewals</title>
      <dc:creator>Miguel C.G.</dc:creator>
      <pubDate>Thu, 20 Aug 2026 17:52:39 +0000</pubDate>
      <link>https://dev.to/miguel_cg_aab1211d6e269/how-i-built-a-local-first-chrome-extension-to-stop-forgotten-auto-renewals-2693</link>
      <guid>https://dev.to/miguel_cg_aab1211d6e269/how-i-built-a-local-first-chrome-extension-to-stop-forgotten-auto-renewals-2693</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdxhfxjmy8j6f40dk8n1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdxhfxjmy8j6f40dk8n1.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;A few weeks ago, I got hit with a $30 automatic renewal for a subscription service I hadn't used in months. It was a classic "subscription creep" moment—a small, silent leak in my monthly budget.&lt;/p&gt;

&lt;p&gt;When I looked for subscription tracking tools, I noticed a frustrating pattern: almost every solution required registering a cloud account, syncing sensitive bank credentials via APIs, or downloading bloated, ad-heavy mobile apps. For simply tracking a few fixed monthly renewal dates, handing over personal financial data felt like a massive privacy trade-off.&lt;/p&gt;

&lt;p&gt;So, as a developer, I decided to build a lightweight, privacy-first tool: SubPulse.&lt;/p&gt;

&lt;p&gt;The Architecture: 100% Local by Design&lt;br&gt;
I wanted SubPulse to operate with zero server infrastructure, ensuring absolute data privacy and near-zero latency.&lt;/p&gt;

&lt;p&gt;Privacy First (chrome.storage.local): Everything runs inside the browser storage. No backend databases, no analytics pinging external endpoints, and zero data collection.&lt;/p&gt;

&lt;p&gt;Manifest V3 Compliant: Built entirely on modern Extension APIs for long-term browser compatibility and low memory consumption.&lt;/p&gt;

&lt;p&gt;Frictionless Onboarding: Since there are no user accounts or OAuth flows to handle, onboarding takes under 5 seconds.&lt;/p&gt;

&lt;p&gt;Core UI &amp;amp; Features&lt;br&gt;
Instead of complex multi-page dashboards, I focused on high-density visual clarity:&lt;/p&gt;

&lt;p&gt;Visual Budget Gauge: Set a custom monthly limit and immediately see spending status through a clean color-shifting progress bar (Green, Orange, Red).&lt;/p&gt;

&lt;p&gt;Actionable Renewal Deadlines: Uses humanized timelines (like "Tomorrow" or "In 2 days") to give you actionable windows before an auto-renewal strikes.&lt;/p&gt;

&lt;p&gt;Pausable Expenses: Easily freeze seasonal charges without cluttering active reports or losing historical data.&lt;/p&gt;

&lt;p&gt;Shared Cost Splitter: Audit your exact personal share for group or family plans.&lt;/p&gt;

&lt;p&gt;Tech Stack Lessons&lt;br&gt;
Building an extension with a focus on local execution forced me to keep state management clean and efficient. Using chrome.storage.local means state re-renders must be reactive without relying on heavy external syncing libraries.&lt;/p&gt;

&lt;p&gt;I'd love to hear from other extension devs: How do you balance feature density with digital minimalism in your browser extensions?&lt;/p&gt;

&lt;p&gt;Check out the tool on the Chrome Web Store by searching for SubPulse, or drop your thoughts below!&lt;/p&gt;

&lt;p&gt;Link to extension: &lt;a href="https://chromewebstore.google.com/detail/subpulse-%E2%80%94-rastreador-de/oilfoalnllbibcefadnollmchomhbple?hl=es&amp;amp;utm_source=ext_sidebar" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/subpulse-%E2%80%94-rastreador-de/oilfoalnllbibcefadnollmchomhbple?hl=es&amp;amp;utm_source=ext_sidebar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank!&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwiq4v4tqsejpmo9ypm3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwiq4v4tqsejpmo9ypm3.png" alt=" " width="440" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
