<?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 Fortes</title>
    <description>The latest articles on DEV Community by Diego Fortes (@codedcitadel).</description>
    <link>https://dev.to/codedcitadel</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%2F3995335%2F71cdb351-b23e-43b7-b147-9674acff38c0.jpg</url>
      <title>DEV Community: Diego Fortes</title>
      <link>https://dev.to/codedcitadel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codedcitadel"/>
    <language>en</language>
    <item>
      <title>How to Filter YouTube Videos by Length (Min and Max)</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:11:05 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-length-min-and-max-4mpb</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-length-min-and-max-4mpb</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Videos by Length (Min and Max)
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Duration&lt;/strong&gt; h/m/s min and max.&lt;/p&gt;

&lt;p&gt;I use YouTube for research every week, and the native filters always felt like a half solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Duration&lt;/strong&gt; h/m/s min and max.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Podcast vs clip:&lt;/strong&gt; 10–25 min &lt;code&gt;interview&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/sort-youtube-results-by-duration" rel="noopener noreferrer"&gt;sort youtube results by duration&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/hide-youtube-shorts-in-search" rel="noopener noreferrer"&gt;hide youtube shorts in search&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Search by View Count</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:10:52 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-search-by-view-count-5d6c</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-search-by-view-count-5d6c</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Search by View Count
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Set &lt;strong&gt;Views&lt;/strong&gt; min and/or max on video filters.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; because YouTube search never gave me the combo of filters I wanted in one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; Set &lt;strong&gt;Views&lt;/strong&gt; min and/or max on video filters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;View bands:&lt;/strong&gt; 5k–50k views on &lt;code&gt;Shopify theme&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/find-youtube-videos-under-10000-views" rel="noopener noreferrer"&gt;find youtube videos under 10000 views&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/sort-youtube-results-by-views" rel="noopener noreferrer"&gt;sort youtube results by views&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Channels by Join Date</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:10:26 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-join-date-1i0n</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-join-date-1i0n</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Channels by Join Date
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Channel joined&lt;/strong&gt; preset or range.&lt;/p&gt;

&lt;p&gt;I use YouTube for research every week, and the native filters always felt like a half solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Channel joined&lt;/strong&gt; preset or range.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fresh accounts:&lt;/strong&gt; Channels joined last year.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/find-new-youtube-channels-low-video-count" rel="noopener noreferrer"&gt;find new youtube channels low video count&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/youtube-channel-about-keyword-filter" rel="noopener noreferrer"&gt;youtube channel about keyword filter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Channels by Country</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:10:12 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-country-1opp</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-country-1opp</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Channels by Country
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Country include&lt;/strong&gt; list from About.&lt;/p&gt;

&lt;p&gt;I am not saying YouTube search is useless, but for narrow research it wastes a lot of time without extra filters.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Country include&lt;/strong&gt; list from About.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Geo research:&lt;/strong&gt; Include &lt;code&gt;DE&lt;/code&gt; for German tutorials.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/exclude-youtube-channels-by-country" rel="noopener noreferrer"&gt;exclude youtube channels by country&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/youtube-search-channel-stats-bar" rel="noopener noreferrer"&gt;youtube search channel stats bar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Channels by Total Lifetime Views</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:09:46 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-total-lifetime-views-50n0</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-channels-by-total-lifetime-views-50n0</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Channels by Total Lifetime Views
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Channel views&lt;/strong&gt; min/max.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; because YouTube search never gave me the combo of filters I wanted in one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Channel views&lt;/strong&gt; min/max.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Catalog scale:&lt;/strong&gt; Channels with 1M+ total views.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/find-new-youtube-channels-low-video-count" rel="noopener noreferrer"&gt;find new youtube channels low video count&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/filter-youtube-channels-by-country" rel="noopener noreferrer"&gt;filter youtube channels by country&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Videos by Views Per Day</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:09:33 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-views-per-day-4ghm</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-views-per-day-4ghm</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Videos by Views Per Day
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; In YouTube Filter Pro, set &lt;strong&gt;Views per day&lt;/strong&gt; min/max on the video filters row, run &lt;strong&gt;Search&lt;/strong&gt;, then review matches in the results panel.&lt;/p&gt;

&lt;p&gt;Long story short, I got tired of opening twenty tabs just to check upload dates and view counts on YouTube search.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube displays total views and rough age, but not views per day as a filter. You would have to calculate velocity yourself video by video.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open &lt;strong&gt;Views per day&lt;/strong&gt; and set a &lt;strong&gt;minimum&lt;/strong&gt; (e.g. 500) or a band (500–10,000) for your niche.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;For &lt;code&gt;Excel tips&lt;/code&gt;, a floor of 200 views/day removes dead uploads while keeping mid-tier tutorials visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pair with publish date
&lt;/h3&gt;

&lt;p&gt;Views/day without a date window mixes 10-year-old hits with new uploads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the data bar
&lt;/h3&gt;

&lt;p&gt;Enable the video stats row in Settings to see views/day on each match.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How is views per day calculated?
&lt;/h3&gt;

&lt;p&gt;From total views and publish date for each video the extension enriches.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I sort by views per day too?
&lt;/h3&gt;

&lt;p&gt;Yes—see the dedicated sort guide in this series.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work on Shorts?
&lt;/h3&gt;

&lt;p&gt;Use the Shorts filter row to include or exclude them first.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/find-youtube-videos-about-to-go-viral" rel="noopener noreferrer"&gt;find youtube videos about to go viral&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/sort-youtube-results-by-views-per-day" rel="noopener noreferrer"&gt;sort youtube results by views per day&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Videos by Like Count</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:09:06 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-like-count-5en7</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-like-count-5en7</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Videos by Like Count
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Likes&lt;/strong&gt; min/max.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; because YouTube search never gave me the combo of filters I wanted in one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Likes&lt;/strong&gt; min/max.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Social proof:&lt;/strong&gt; Min 1k likes on &lt;code&gt;iPhone review&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/youtube-like-rate-filter" rel="noopener noreferrer"&gt;youtube like rate filter&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/sort-youtube-results-by-likes" rel="noopener noreferrer"&gt;sort youtube results by likes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Filter YouTube Videos by Comment Count</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:09:03 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-comment-count-nnn</link>
      <guid>https://dev.to/codedcitadel/how-to-filter-youtube-videos-by-comment-count-nnn</guid>
      <description>&lt;h1&gt;
  
  
  How to Filter YouTube Videos by Comment Count
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Comments&lt;/strong&gt; min/max.&lt;/p&gt;

&lt;p&gt;I use YouTube for research every week, and the native filters always felt like a half solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Comments&lt;/strong&gt; min/max.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Discussion:&lt;/strong&gt; 500+ comments on &lt;code&gt;debate&lt;/code&gt; topics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/youtube-comment-rate-filter" rel="noopener noreferrer"&gt;youtube comment rate filter&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/sort-youtube-results-by-comments" rel="noopener noreferrer"&gt;sort youtube results by comments&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Hide Specific YouTube Channels From Search Results</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:08:26 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-hide-specific-youtube-channels-from-search-results-2nja</link>
      <guid>https://dev.to/codedcitadel/how-to-hide-specific-youtube-channels-from-search-results-2nja</guid>
      <description>&lt;h1&gt;
  
  
  How to Hide Specific YouTube Channels From Search Results
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Channel exclude&lt;/strong&gt; keywords in channel name.&lt;/p&gt;

&lt;p&gt;When I shipped YouTube Filter Pro, this exact workflow is what I had in mind.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Channel exclude&lt;/strong&gt; keywords in channel name.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Block reupload farms:&lt;/strong&gt; Exclude &lt;code&gt;Topic&lt;/code&gt; spam channels.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/youtube-title-keyword-filter" rel="noopener noreferrer"&gt;youtube title keyword filter&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/verified-youtube-channels-only-filter" rel="noopener noreferrer"&gt;verified youtube channels only filter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>How to Exclude YouTube Channels by Country</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Tue, 13 Oct 2026 04:08:23 +0000</pubDate>
      <link>https://dev.to/codedcitadel/how-to-exclude-youtube-channels-by-country-j9b</link>
      <guid>https://dev.to/codedcitadel/how-to-exclude-youtube-channels-by-country-j9b</guid>
      <description>&lt;h1&gt;
  
  
  How to Exclude YouTube Channels by Country
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; &lt;strong&gt;Country exclude&lt;/strong&gt; list.&lt;/p&gt;

&lt;p&gt;I am not saying YouTube search is useless, but for narrow research it wastes a lot of time without extra filters.&lt;/p&gt;




&lt;h2&gt;
  
  
  What YouTube lets you do today
&lt;/h2&gt;

&lt;p&gt;YouTube’s built-in search filters cover basics like upload date and content type. They do not expose view bands, engagement rates, channel metadata rules, or a dedicated filtered results panel with export.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to do it with YouTube Filter Pro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run a normal YouTube search for your topic.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Filter&lt;/strong&gt; next to the search bar (YouTube Filter Pro).&lt;/li&gt;
&lt;li&gt;Set the filters described below in the modal (Video or Channel tabs).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; in the footer and open &lt;strong&gt;View Results&lt;/strong&gt; when the panel appears.&lt;/li&gt;
&lt;li&gt;Leave the tab open while the extension scans more results (complex filters can take up to a minute).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This post:&lt;/strong&gt; &lt;strong&gt;Country exclude&lt;/strong&gt; list.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Language focus:&lt;/strong&gt; Exclude regions you do not serve.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and common mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start broad, then tighten
&lt;/h3&gt;

&lt;p&gt;If you get zero matches, loosen one constraint (usually views or subscribers) before giving up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leave the tab open
&lt;/h3&gt;

&lt;p&gt;The extension keeps scanning as YouTube loads more search results.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a YouTube account?
&lt;/h3&gt;

&lt;p&gt;You need to be on youtube.com in Chrome with the extension installed; login matches your normal YouTube session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does data leave my browser?
&lt;/h3&gt;

&lt;p&gt;Core filtering runs client-side on the page. Optional external enrichment may fetch public metadata—see the extension privacy note.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is the Filter button?
&lt;/h3&gt;

&lt;p&gt;Next to the YouTube search bar on supported pages (search results, home, watch, channel pages).&lt;/p&gt;

&lt;h3&gt;
  
  
  More guides?
&lt;/h3&gt;

&lt;p&gt;See the &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete hub&lt;/a&gt; for all filter tutorials.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt; is free to install; some sorts and metrics need &lt;strong&gt;Pro&lt;/strong&gt; (called out above when relevant). More guides: &lt;a href="https://codedcitadel.com/blog/youtube-search-filters-complete-guide" rel="noopener noreferrer"&gt;complete filter hub&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/filter-youtube-channels-by-country" rel="noopener noreferrer"&gt;filter youtube channels by country&lt;/a&gt;, &lt;a href="https://codedcitadel.com/blog/exclude-youtube-channels-from-search" rel="noopener noreferrer"&gt;exclude youtube channels from search&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What filter do you wish YouTube had built-in?&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>youtubefilterpro</category>
      <category>chromeextensions</category>
      <category>search</category>
    </item>
    <item>
      <title>I Made My First Sale in This Series! (Shopify Client Work, $1400)</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Mon, 13 Jul 2026 00:27:05 +0000</pubDate>
      <link>https://dev.to/codedcitadel/i-made-my-first-sale-in-this-series-shopify-client-work-1400-3e4f</link>
      <guid>https://dev.to/codedcitadel/i-made-my-first-sale-in-this-series-shopify-client-work-1400-3e4f</guid>
      <description>&lt;h1&gt;
  
  
  I Made My First Sale in This Series (Shopify Client Work, $1400)
&lt;/h1&gt;

&lt;p&gt;This is part of VibeCoding Until I Make $100K, where I'm building in public from $0 until I hit six figures. If you're new here, the full series is at &lt;a href="https://codedcitadel.com/blog/building-in-public-journey" rel="noopener noreferrer"&gt;codedcitadel.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of this series has been Chrome extensions. But this episode is different: it's the first time I'm making real money from a client project inside this series, and I want to document it the same way I document everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;Since the beginning of this challenge, I have seen Chrome extensions like seeds: they must be planted and cared for, but they will take time to give fruits - assuming that they ever will. Even if they don't, they may become nice trees and give some shading. Who knows? All I know is that there &lt;em&gt;may&lt;/em&gt; be some value in there, but it will take time.&lt;/p&gt;

&lt;p&gt;Before starting Coded Citadel, I was working as a Shopify developer. This is a field I have a lot of expertise in, so I thought I'd follow the same route.&lt;/p&gt;

&lt;p&gt;I started reaching out to a few businesses asking whether they were looking for a Shopify dev and presenting my &lt;a href="https://codedcitadel.com/work" rel="noopener noreferrer"&gt;"hire me" page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was lucky enough to be able to land a customer after 40~ emails sent. Coincidentally, this customer was looking for a developer for a brand new project, and after a conversation he decided I'd be a good fit for the project. &lt;/p&gt;

&lt;p&gt;I used to work exclusively with Shopify - themes from scratch, custom apps, the whole thing - so this was familiar territory. The total price for the project, a complete website on the coding side, is $1400 USD. I know that might sound like too little or too much depending on where you're from, but I am looking at this customer as a potential long-term client plus the first customer for the "Coded Citadel" brand, and the price reflects that relationship.&lt;/p&gt;

&lt;p&gt;After agreeing on the price, he sent me two things: a OneDrive folder with all the product data and images, and a list of competitor websites to use as inspiration.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkybt6vik4zv90slb27n6.jpg" 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%2Fkybt6vik4zv90slb27n6.jpg" width="800" height="392"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faug1doy0j1lmr4773ww2.jpg" 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%2Faug1doy0j1lmr4773ww2.jpg" width="798" height="95"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Analyzing the Competitors Before Writing Any Code
&lt;/h2&gt;

&lt;p&gt;My first instinct was to fetch the HTML of all the reference websites so I could analyze them locally with Cursor. I asked Claude to write a &lt;code&gt;.bat&lt;/code&gt; script to do it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcsv7gn1z0zqcivpgyk6.jpg" 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%2Flcsv7gn1z0zqcivpgyk6.jpg" width="800" height="468"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1653zlm517pu396bmq5.jpg" 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%2Ff1653zlm517pu396bmq5.jpg" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It wasn't fetching everything correctly, so I iterated on the script to try to pull in the CSS and JS as well.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Futtsci5l1qr1u2kjykrn.jpg" 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%2Futtsci5l1qr1u2kjykrn.jpg" width="800" height="464"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvfrzbehkpo854re48ixf.jpg" 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%2Fvfrzbehkpo854re48ixf.jpg" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It still wasn't perfect, so I changed approach: high quality screenshots instead of source code. Good enough for what I needed.&lt;/p&gt;

&lt;p&gt;While sorting that out, I also re-read the client's email and realized the reference websites were mostly about copy and messaging, not design. That made things a bit easier. I took screenshots of all the competitor sites, sent them to Claude, and asked it to find patterns - common sections, color palettes, font choices, structural decisions.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftsq3b2v44j6tr5anqroq.jpg" 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%2Ftsq3b2v44j6tr5anqroq.jpg" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the patterns identified, I also fed Claude a few emails from my conversation with the client so it could factor in what the owner actually wanted for the brand. Once I had a clear direction, I wrote the design prompt myself - accent color, general color palette, font family - and generated a first mockup in ChatGPT.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcg2ymffz9zbw0i0adjtu.jpg" 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%2Fcg2ymffz9zbw0i0adjtu.jpg" width="799" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first design was decent but needed to feel more unique, so I incorporated one of the client's actual products into it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjwlko5z90a2bzkc99j1z.jpg" 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%2Fjwlko5z90a2bzkc99j1z.jpg" width="521" height="908"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp7ke107r961f0xon4iji.jpg" 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%2Fp7ke107r961f0xon4iji.jpg" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I find it critical to have a visual identity to work towards before touching any code. If you don't, you end up imagining one thing and the client imagining something completely different. A mockup early on kills that mismatch before it becomes a problem.&lt;/p&gt;

&lt;p&gt;I wrote the client a thorough email covering everything I found in the competitor analysis - site structure, common sections, typical colors and font families - and included the ChatGPT mockup, making clear it was a reference for feel and colors rather than a pixel-perfect spec. We went back and forth a bit, agreed on the direction, and I waited for the first payment before starting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started (And Fixing My Own Chrome Extension First)
&lt;/h2&gt;

&lt;p&gt;A few days later the payment came through. The client purchased the Prestige theme and it was time to get to work.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwx9pbrjmo0mrq7nzvru.jpg" 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%2Fvwx9pbrjmo0mrq7nzvru.jpg" width="799" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this project I'm using Shopify Sync, a Chrome extension I built a while ago that syncs a local folder with Shopify theme files using the Shopify window object and GraphQL to handle all CRUD operations directly from the browser. I don't use the Shopify CLI because with theme-only access it's limited and adds an extra layer of complexity. With this extension I can work in Cursor like normal and have everything reflected in the theme in real time.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b44coio4ym2nzmupou3.jpg" 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%2F0b44coio4ym2nzmupou3.jpg" width="799" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before I could get started though, the extension itself had a CORS issue I needed to fix. It was trying to send files directly from the content script to the Node.js local server, which doesn't work. The fix was routing it through the background service worker instead: content script → background → Node. Once that was sorted, the bidirectional sync was working correctly - changes on the Shopify theme reflected locally, and changes made locally reflected in the theme.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbok46y6uvfjgzj6rqjpt.jpg" 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%2Fbok46y6uvfjgzj6rqjpt.jpg" width="800" height="562"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc0q9iup7w9dr1xlrtole.jpg" 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%2Fc0q9iup7w9dr1xlrtole.jpg" width="799" height="430"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwcrbj06vl0fkv0gj6vwp.jpg" 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%2Fwcrbj06vl0fkv0gj6vwp.jpg" width="800" height="459"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm97k5h76xi4ci58fifo4.jpg" 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%2Fm97k5h76xi4ci58fifo4.jpg" width="799" height="415"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8t8kr07gi93wo6uf6sm4.jpg" 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%2F8t8kr07gi93wo6uf6sm4.jpg" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can actually start the work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Coming Soon Page
&lt;/h2&gt;

&lt;p&gt;The first goal was getting the fonts and colors the client agreed on into the theme. I used Claude to handle the quick CSS changes, and with the Shopify Sync extension running in the background, Cursor's edits were reflected in the theme in real time without me having to manually upload anything.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ch10tvcnzlcpltsf5jx.jpg" 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%2F7ch10tvcnzlcpltsf5jx.jpg" width="799" height="291"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8m4nnnutcrajqe7w4mpb.jpg" 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%2F8m4nnnutcrajqe7w4mpb.jpg" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The coming soon page came together quickly. Basic, but a solid starting point.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftked6voca78sw8smxx6x.jpg" 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%2Ftked6voca78sw8smxx6x.jpg" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tested the email signup and it was working fine. The client came back with a few specific requests for the page, so I gathered his points, added my own suggestions based on experience with barber ecom stores, and generated a new mockup in ChatGPT combining both.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffax5jyu2b3o6kdijuga6.jpg" 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%2Ffax5jyu2b3o6kdijuga6.jpg" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm personally a fan of the dark background and gold color combination here. A few subtle animations or a gradient would push it further but we can add that later. After implementing all the requests and adding some load-in animations, the client was happy with the result.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F19p7vjh87dkl5qqpq8q7.jpg" 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%2F19p7vjh87dkl5qqpq8q7.jpg" width="800" height="119"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1b32cpaoorgblgmf6kll.jpg" 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%2F1b32cpaoorgblgmf6kll.jpg" width="317" height="212"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Homepage
&lt;/h2&gt;

&lt;p&gt;The client sent a specific reference for the homepage layout.&lt;/p&gt;

&lt;p&gt;One thing that immediately caught my eye was the scroll-triggered title animation on the competitor site. It looks like a small detail but it gives the whole site a premium feel that clients and their customers both notice.&lt;/p&gt;

&lt;p&gt;Keeping consistent animations, colors and sizing throughout a website not only makes your life easier as a developer, it also stops the site from looking like a Frankenstein of different design decisions stitched together.&lt;/p&gt;

&lt;p&gt;To analyze the reference site properly, I took a screenshot but it was too tall for Claude to read accurately, so I asked Claude to write a script to split it into multiple images by height. Instead of one 5000px screenshot, I now had a stack of 500px slices that Claude could actually work with.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizbsx7otxobwv4dyx8q5.jpg" 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%2Fizbsx7otxobwv4dyx8q5.jpg" width="800" height="558"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faybrtbqxx5aqydcquc1m.jpg" 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%2Faybrtbqxx5aqydcquc1m.jpg" width="800" height="276"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2jzu110o1186ocml4rm.jpg" 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%2Fq2jzu110o1186ocml4rm.jpg" width="799" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I fed those to Claude alongside a list of available Prestige sections and asked it to write a Cursor prompt to get the homepage started, specifying that all titles needed the same scroll animation as the reference site. I also dug into the competitor's code directly to pull the exact animation CSS and fed that to Claude as well.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdzzryvt2i6cdgxyozdyy.jpg" 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%2Fdzzryvt2i6cdgxyozdyy.jpg" width="800" height="472"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0u5nn2de8yxfdkx5jy4z.jpg" 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%2F0u5nn2de8yxfdkx5jy4z.jpg" width="685" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a few rounds of fixes - font sizes, scroll animation triggering, hero images for both mobile and desktop - the homepage was taking shape.&lt;/p&gt;

&lt;p&gt;For the hero image I used the &lt;a href="https://codedcitadel.com/blog/ep-8-gmail-to-pdf" rel="noopener noreferrer"&gt;Gmail to PDF&lt;/a&gt; extension (one I built in this series) to export the client's email thread directly to Claude and pull out the relevant brief without digging through the conversation manually. Then I generated placeholder AI images in ChatGPT for both mobile and desktop.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr67sku6j5lkcoszfrnh6.jpg" 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%2Fr67sku6j5lkcoszfrnh6.jpg" width="800" height="368"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2zue0hig9q2p8n6hql5.jpg" 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%2Fq2zue0hig9q2p8n6hql5.jpg" width="534" height="677"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi7v8t0bzf3vhmgqm4ygp.jpg" 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%2Fi7v8t0bzf3vhmgqm4ygp.jpg" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The client will replace these with real photography later, but the first impression of the website matters even at this stage. A good placeholder image is infinitely better than a blank space or a broken layout.&lt;/p&gt;

&lt;p&gt;I also replaced the default bullet points in the features section with custom SVG icons and added subtle hover animations. Attention to detail like this costs very little time and clients always notice it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fziuh6mkbcbc2zx2jx40g.jpg" 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%2Fziuh6mkbcbc2zx2jx40g.jpg" width="800" height="403"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnwsx4bbu6gwf1mytebqs.jpg" 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%2Fnwsx4bbu6gwf1mytebqs.jpg" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The footer came together the same way: screenshot of the target, screenshot of what we currently had, send both to Claude, get a Cursor prompt back.&lt;/p&gt;

&lt;p&gt;While working on the store I noticed an unwanted horizontal scroll on mobile. I tracked it down using a debugging technique I learned in my first junior dev job: delete elements one by one in DevTools until the scroll disappears. When it stops, you've found the culprit. Unwanted horizontal scroll is a hard no from a UX perspective and always worth fixing immediately.&lt;/p&gt;

&lt;p&gt;This is the homepage at this stage - no final copy or real images yet, but the structure and design language are there.&lt;/p&gt;




&lt;h2&gt;
  
  
  First Draft to the Client
&lt;/h2&gt;

&lt;p&gt;After finishing the homepage I sent the first draft to the client and got feedback.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu9tqqju4vippruruh4yc.jpg" 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%2Fu9tqqju4vippruruh4yc.jpg" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created the collections manually since there were only a few, then fed the client's product XLSX to Claude, converted it to CSV, and imported the products directly into the store.&lt;/p&gt;

&lt;p&gt;Product images were not part of the agreement - adding images to each product individually would have consumed hours of work that wasn't scoped into the project. I made sure the client understood that and waited for his reply.&lt;/p&gt;




&lt;h2&gt;
  
  
  Product Page
&lt;/h2&gt;

&lt;p&gt;After a few days the client came back with direction on how to move forward.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgio7w3t4mby38wuewclz.jpg" 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%2Fgio7w3t4mby38wuewclz.jpg" width="799" height="240"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwcqr7sh02tws2cojq00.jpg" 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%2Fpwcqr7sh02tws2cojq00.jpg" width="780" height="566"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwcj2mtjlkwbnwmqdrw01.jpg" 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%2Fwcj2mtjlkwbnwmqdrw01.jpg" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He had creative freedom questions about the product page, including whether a feature slider would work better than a written description. My take: both. I always assume visitors are going to be lazy, so redundancy on important information is never a bad idea. At the price point these products sit at, considered purchases justify longer descriptions that address objections and build confidence. But bullet points are essential for scannability, since most visitors scan before they decide to read.&lt;/p&gt;

&lt;p&gt;So the plan for the product page was: short benefit-led bullets right below the Add to Cart button (lead with what they get, not how it works - "stays cool for 8 hours" beats "double-wall vacuum insulation"), a scrollable feature section further down with one feature per slide and a supporting image, and accordion tabs at the bottom for specs, box contents, delivery and FAQ.&lt;/p&gt;

&lt;p&gt;Before coding any of that, I did a quick research pass on the top barber and clipper stores on Shopify. I pulled a list of popular brands, checked each one on SimilarWeb targeting a global rank of at least under 300k, and took mobile screenshots of their product pages to send to Claude for pattern analysis.&lt;/p&gt;

&lt;p&gt;The result was a product page mockup I sent to the client for sign-off.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F62klw77vrjz4qomj5s4j.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%2F62klw77vrjz4qomj5s4j.PNG" width="562" height="2855"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He confirmed, so it was time to build it.&lt;/p&gt;

&lt;p&gt;The sticky Add to Cart button was the first thing I tackled. Prestige includes one by default but it's not great. This is the default, untouched Prestige sticky ATC on a $400 theme:&lt;/p&gt;

&lt;p&gt;After rebuilding it properly:&lt;/p&gt;

&lt;p&gt;For the rest of the product page, I used metafields for the key specs, the pros checklist, the in-the-box pills, and the video section - so the client can update all of it per product without touching any code.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyg9l1rq8p5ihc18c568u.jpg" 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%2Fyg9l1rq8p5ihc18c568u.jpg" width="800" height="383"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbjfqdg1532qmqxf0i274.jpg" 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%2Fbjfqdg1532qmqxf0i274.jpg" width="498" height="866"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also had to do a quick pause to fix the Shopify Sync extension again - it was taking too long when force-pushing files from the browser to the local machine because it wasn't properly comparing files before overwriting. Fixed and back to work.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe5i7zzphsb3u0yyrv3ux.jpg" 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%2Fe5i7zzphsb3u0yyrv3ux.jpg" width="499" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The finished product page:&lt;/p&gt;

&lt;p&gt;With animations and final details:&lt;/p&gt;

&lt;p&gt;All the metafield sections are fully editable per product directly from the Shopify admin.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F535cg4qf3p2xxn60iwub.jpg" 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%2F535cg4qf3p2xxn60iwub.jpg" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Revisions
&lt;/h2&gt;

&lt;p&gt;The client came back with a few additional requests, all reasonable.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fffeajlflnhzeeay74guv.jpg" 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%2Fffeajlflnhzeeay74guv.jpg" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trust widget got updated and is now editable via metafields. The key specs section was updated to accept a list of meta objects instead of plain text.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foexb4s78990vc4x8ai5k.jpg" 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%2Foexb4s78990vc4x8ai5k.jpg" width="800" height="296"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmpb1r0gpyz39ro0op3l.jpg" 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%2Fvmpb1r0gpyz39ro0op3l.jpg" width="799" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He also asked for a fast delivery notice, which I added.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9is46zp413r9jmsguazi.jpg" 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%2F9is46zp413r9jmsguazi.jpg" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I applied the same scroll-triggered animation to all the metafield elements for consistency, and implemented a rule that no metafield section renders unless the field has actually been filled in. Empty boxes on a live storefront are a UX problem and something I always account for by default.&lt;/p&gt;

&lt;p&gt;The last thing the client sent over was the copy for all products to review. The main issue I flagged was that the FAQs weren't ending with a benefit. Every FAQ answer is an opportunity to reinforce why the product is worth buying, and closing on a positive note instead of just answering the question is a small but meaningful CRO detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;This is the first real money I've made inside this series and it came from the oldest source possible: a returning client. The project isn't fully done yet, but the homepage, coming soon page and product page are all live and signed off.&lt;/p&gt;

&lt;p&gt;If you want to follow the rest of the build, everything is at &lt;a href="https://codedcitadel.com/blog/building-in-public-journey" rel="noopener noreferrer"&gt;codedcitadel.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What are you building?&lt;/p&gt;

</description>
      <category>buildinginpublic</category>
      <category>shopify</category>
      <category>freelance</category>
      <category>clientwork</category>
    </item>
    <item>
      <title>12 Chrome Extensions Deployed Within 2 Months (Not AI Slop). All Data + My First Financially Successful Extension</title>
      <dc:creator>Diego Fortes</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:03:56 +0000</pubDate>
      <link>https://dev.to/codedcitadel/12-chrome-extensions-deployed-in-2-months-all-data-my-first-financially-successful-extension-53aa</link>
      <guid>https://dev.to/codedcitadel/12-chrome-extensions-deployed-in-2-months-all-data-my-first-financially-successful-extension-53aa</guid>
      <description>&lt;p&gt;[this post was not written by AI]&lt;/p&gt;

&lt;p&gt;I have coded and published 12 extensions in 52 days. &lt;/p&gt;

&lt;p&gt;I documented each and every one of them step by step &lt;a href="https://codedcitadel.com/blog/" rel="noopener noreferrer"&gt;on my blog&lt;/a&gt; and on YouTube, going from how I found the idea, how I validated it, the coding process, and publishing it live.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fajo40mx4i1v3ukln1xrz.jpg" 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%2Fajo40mx4i1v3ukln1xrz.jpg" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit of background
&lt;/h2&gt;

&lt;p&gt;My journey with Chrome extensions started back in 2017, close to the time where I landed my first position as a senior front-end dev.&lt;/p&gt;

&lt;p&gt;Back then I was coding mostly for my personal use. After a while, I decided to publicly publish my very first Chrome extension back in 2019.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqfi7k3iu5qd7tm6smro.jpg" 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%2Fqqfi7k3iu5qd7tm6smro.jpg" width="801" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There were a few bugs I couldn't completely handle back then, and the reviews started getting lower and lower, so I decided to let it go and focused on my career as a Shopify dev.&lt;/p&gt;

&lt;h2&gt;
  
  
  My first financial success with a Chrome extension
&lt;/h2&gt;

&lt;p&gt;Back in 2020, almost one year later after my first published Chrome extension, I noticed a huge market gap for a specific Chrome extension. There was one competitor receiving multiple negative reviews due to a bug, so I decided to code an alternative.&lt;/p&gt;

&lt;p&gt;I coded it and published it on October 31, 2020. I didn't think much of it.&lt;/p&gt;

&lt;p&gt;For 8 months, I had less than 100 users. It didn't get real traction until April 2022, about a year and a half in, when active users jumped from ~1,400 to ~2,200 in just two weeks and kept climbing from there. &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9gblxlvo25cr8dixqpr.jpg" 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%2Fm9gblxlvo25cr8dixqpr.jpg" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was sharing this extension everywhere throughout the months, however, it became really popular after a few YouTubers made videos about it. Back then it was 100% free. &lt;/p&gt;

&lt;p&gt;Once it became popular (around 10k users), I started studying how to implement monetization and, even though some users weren't happy with it and I had to manage everyone's expectations, it was still profitable: average of $2k~ USD/monthly of profit. &lt;/p&gt;

&lt;p&gt;The payment system was "per-credit." There were no monthly subscriptions, but there was a one lifetime fee for $400 USD, sold around once per week.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygxtqs1cfnysce0astb6.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%2Fygxtqs1cfnysce0astb6.png" width="799" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before that inflection point, growth was slow and linear: it took until January 2022 to break 1,000 active users, and November 2022 to hit 10,000 (almost 2 years).&lt;/p&gt;

&lt;p&gt;The extension crossed 38,000 active users on November 13, 2024, roughly 4 years after launch. It peaked shortly after, around 38,500 users in late November 2024, then entered a slow decline, sitting at ~22,300 as of July 2026. &lt;/p&gt;

&lt;p&gt;Nowadays, after recent updates in the platform that my Chrome extension was coded for, and my extension became obsolete. It's essentially useless, unfortunately. &lt;/p&gt;

&lt;p&gt;And this is what led me to my current path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trying to replicate it in 2026
&lt;/h2&gt;

&lt;p&gt;Is it possible to replicate this in 2026? I do think so, but I must be honest: With the rise of AI, I believe the time is running out. And I don't think that through Chrome extensions alone. &lt;/p&gt;

&lt;p&gt;I heard someone say that "if you have a loyal following you can monetize anything", and I'd say that this may be one of the very few ways to monetize extensions nowadays. Natural growth can still happen, but it's extremely unlikely, at least as far as I can tell. &lt;/p&gt;

&lt;p&gt;The two main difficulties I see nowadays:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Noise. There is a lot of vibecoded things with dubious quality and immediate paywalls. This makes users become more resistant to even try extensions.&lt;/li&gt;
&lt;li&gt;Uncertainty. Back then you had to watch out for competitors copying your code, now AI has the potential to make anything obsolete with every new release.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Either way, I'm willing to bite the bullet and test how difficult it really is, and that is why I coded 12 extensions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The extensions I coded + my strategy
&lt;/h2&gt;

&lt;p&gt;I view these extensions kind of like seeds: I don't expect any of them to sprout any time soon. I'm planting them, and expecting something to happen only in the months to come.&lt;/p&gt;

&lt;p&gt;With that being said, when creating each extension, I avoided as much as possible going down the "weather app" route of Chrome extensions and focused on building things that could be legitimately useful. &lt;/p&gt;

&lt;p&gt;I firmly believe that most of the extensions I coded are valuable to, at least, a small group of people. But whether they will come across these extensions is a different story.&lt;/p&gt;

&lt;p&gt;I won't go too much in depth here about how I found and validated the ideas, but you can read the &lt;a href="https://codedcitadel.com/blog/" rel="noopener noreferrer"&gt;individual blog posts&lt;/a&gt; if you're interested, where I cover everything in details. Long story short: I relied a lot on scraping Reddit, Instagram and YouTube comments.&lt;/p&gt;

&lt;p&gt;I'd scrape hundreds of comments within specific niches and send it to Claude to find frequent complaints and what could potentially be turned into an extension. &lt;/p&gt;

&lt;h2&gt;
  
  
  Here's everything I coded:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/coding-to-100k-youtube-comments-scraper" rel="noopener noreferrer"&gt;YouTube Comments Exporter&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/epokpidfnienjjfncmhnallghfhaijbj" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - bulk export YouTube video and playlist comments to CSV, XLSX, JSON, or TXT. Built for product research and AI analysis, scrape comments from individual videos or entire playlists and send them to Claude or ChatGPT to uncover real user pain points and app ideas. Free, minimal setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/dbkkcbfafkckhmefkpgnelikibobcabb" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - filter YouTube search results in real time by video duration, view count, publish date, channel size, and title keywords. Irrelevant videos are hidden or faded as results load while you scroll. Settings sync across Chrome sessions automatically. Ideal for research, content curation, and finding niche videos that match exact criteria.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/claude-conversation-search-chrome-extension" rel="noopener noreferrer"&gt;Claude Message Search&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/dfkkbbcdbjaecgnaocgfonoodmfmkmmm" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - full-text search across all your Claude.ai conversations from one place. Find old answers buried in chat history without scrolling through dozens of titles. Runs entirely locally in your browser, no servers, no data sent anywhere. Trigger via toolbar button or Ctrl+Shift+F. Free, fast, fully private.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/instagram-dm-exporter-chrome-extension" rel="noopener noreferrer"&gt;Instagram DM Exporter&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/hgojieiehkjgjhdnbglfhbcojeeggigi" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - export any Instagram direct message conversation to HTML, TXT, or JSON in one click. No API key needed, works from your logged-in session by reverse-engineering Instagram's internal API. Handles long conversations with pagination. Export continues in the background after you close the popup. Free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/chrome-extension-save-to-google-drive-under-8-hours" rel="noopener noreferrer"&gt;Save to Google Drive&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/jadjgiiaompdjacagaomgogdihbpgcpg" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - save any file download directly to Google Drive instead of your local downloads folder. Right-click links or use the context menu to push files to drive with one click. OAuth-integrated with minimal permissions. Turns Google Drive into your browser's default download destination. Built and shipped in under eight hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/coding-to-100k-claude-limit-monitor" rel="noopener noreferrer"&gt;Claude Limit Monitor&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/mljfhcfnjbfibedpiaheeihpbjajfcal" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - monitor your Claude.ai free-tier usage in real time. See how many messages remain and when your limit resets before Claude cuts you off mid-conversation. Reverse-engineers Claude's hidden usage API to display remaining allowance directly in the UI. Free, no extra login required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/ai-bookmark-chrome-extension-claude-chatgpt-grok" rel="noopener noreferrer"&gt;AI Bookmark&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/golankbkfnepjbpcekbcglcfgmbpgnmb" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - bookmark specific AI replies from Claude, ChatGPT, and Grok and manage them in one place. Save great answers without losing them in long chat threads. Synced library with search and organization across all three platforms from a single extension. Google login via Supabase. The most complex extension in the series so far.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/ep-8-gmail-to-pdf" rel="noopener noreferrer"&gt;Gmail to PDF&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/bhagkmlelgbjbklgafgdjeebkdhlibjf" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - bulk export Gmail emails as PDF, HTML, TXT, or JSON, including images and attachments bundled as a zip. No third-party login, minimal permissions, no permanent buttons injected into Gmail's UI. Export single or multiple emails from the toolbar. History tab tracks your last 100 exports. Privacy-first alternative to broken extensions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/ep-9-instagram-comments-exporter" rel="noopener noreferrer"&gt;Instagram Comments Exporter&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/dpfdehgiffggecppcbkdacbifbljeiii" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - extract every comment on Instagram posts and reels, including nested replies, to CSV, JSON, XLSX, or TXT. Pause and resume long extractions. Native-feeling UI cloned from Instagram's design. Handles GIFs and proper date formatting. Rebuilt from scratch after existing tools broke on long sessions. Free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/ep-10-youtube-keyword-alert" rel="noopener noreferrer"&gt;YouTube Keyword Alert&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/pniolepdakiocafjiibgiabkcdhgkfep" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - get notified the moment a new YouTube video matching your keyword filters is uploaded, without opening YouTube. Set keyword rules and receive alerts when fresh content appears. Built for creators, researchers, and anyone tracking niche topics. Lightweight, background monitoring. Free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/discord-message-exporter-chrome-extension" rel="noopener noreferrer"&gt;Dex&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/cdagimhkcpohhjipcnpaaebppnmgegjo" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - export Discord messages, channels, DMs, and attachments to HTML, PDF, TXT, JSON, or markdown. Choose channels, date ranges, or recent messages. Preview and download attachments separately. Floating in-app UI integrates with Discord's design. Bulk export for servers, group chats, or one-on-one conversations. Free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/hide-reposts-bluesky-chrome-extension" rel="noopener noreferrer"&gt;Hide Reposts for Bluesky&lt;/a&gt;&lt;/strong&gt; (&lt;a href="https://chromewebstore.google.com/detail/hide-reposts-for-bluesky/amcnbfpogccggckogifbdjekbammlahl" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;) - hide reposts from your Bluesky following timeline with one click, no page reload, no unfollowing. Pick which accounts to filter with per-account checkboxes, search, and pagination. Original posts always stay visible, only reshares get hidden. Stats track reposts hidden over time. Multi-language support.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My numbers and conclusions
&lt;/h2&gt;

&lt;p&gt;From the beginning of this "challenge", I committed to sharing every number publicly. &lt;/p&gt;

&lt;p&gt;I'm manually scraping all of my Chrome extensions + Google Anaytics data and updating it on my website. At the time of this post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;982&lt;/strong&gt; gross installs across 12 extensions (~55 days of tracking)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;449&lt;/strong&gt; active users (46% of gross installs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;254&lt;/strong&gt; uninstalls - &lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt;&lt;/strong&gt; has the highest churn at ~43%; &lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/coding-to-100k-claude-limit-monitor" rel="noopener noreferrer"&gt;Claude Limit Monitor&lt;/a&gt;&lt;/strong&gt; retains best at ~73%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/coding-to-100k-claude-limit-monitor" rel="noopener noreferrer"&gt;Claude Limit Monitor&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://codedcitadel.com/blog/youtube-filter-chrome-extension-coding" rel="noopener noreferrer"&gt;YouTube Filter Pro&lt;/a&gt;&lt;/strong&gt; each account for &lt;strong&gt;47%&lt;/strong&gt; of all installs and &lt;strong&gt;65%&lt;/strong&gt; of active users&lt;/li&gt;
&lt;li&gt;Last 7 days: &lt;strong&gt;379&lt;/strong&gt; new installs vs &lt;strong&gt;255&lt;/strong&gt; the week before (+49%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0&lt;/strong&gt; revenue - all extensions are free; but all extensions are free on purpose. I have only added a "buy me a coffee" link.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5yg80b3jrunizfn7ge9c.jpg" 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%2F5yg80b3jrunizfn7ge9c.jpg" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything I learned so Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My fastest growing extension (&lt;a href="https://codedcitadel.com/blog/coding-to-100k-claude-limit-monitor" rel="noopener noreferrer"&gt;Claude Limit Monitor&lt;/a&gt;) is open source, and that is probably why it's growing so fast.&lt;/li&gt;
&lt;li&gt;Request reviews/feedback after a few successful actions. For example, let's say you have a "website to PDF" export. Once the user successfully exports 4 or 5 times successfully, show a small modal with a "thank you for using, please review it helps" type message.&lt;/li&gt;
&lt;li&gt;I heard that making extensions in multiple languages can help increase visibility. So I made most of them in 8 languages. So far, I haven't seen any major improvements.&lt;/li&gt;
&lt;li&gt;Always add a "thank you" and "uninstall" page that lead back to your landing page, on extension install and uninstall, respectively. For the thank you page, add a short tutorial teaching the user how to use your extension. For the uninstall page, add a way to collect feedback on why they uninstalled. Make it super quick and simple. I later wrote about how I &lt;a href="https://codedcitadel.com/blog/chrome-extension-uninstall-page-optimization" rel="noopener noreferrer"&gt;optimized that uninstall page&lt;/a&gt; and jumped from ~3% to ~34% feedback rate.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnwtogr96no98c0ax5ar.jpg" 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%2Fgnwtogr96no98c0ax5ar.jpg" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use "key" for manifest.json to keep your same id. This makes things easier especially if you plan to implement OAuth or a backend.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F507lu3ughr259c59urnt.jpg" 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%2F507lu3ughr259c59urnt.jpg" width="799" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you add the "key" to manifest.json, beware that the .zip you send to the Chrome web store can't have the key in it, but your local build does. To handle that I have a custom &lt;code&gt;run-and-build.bat&lt;/code&gt; file. It runs &lt;code&gt;npm run build&lt;/code&gt;, checks &lt;code&gt;dist/&lt;/code&gt;, strips the dev key from manifest.json via &lt;code&gt;strip-manifest-key.mjs&lt;/code&gt;, then zips &lt;code&gt;dist/&lt;/code&gt; into &lt;code&gt;zipped/{version}__{timestamp}.zip&lt;/code&gt; for store upload.&lt;/li&gt;
&lt;li&gt;Beware of your permissions. Add only what is absolutely necessary.&lt;/li&gt;
&lt;li&gt;If you decide to mass-build, bear in mind you will need to update your extensions frequently.&lt;/li&gt;
&lt;li&gt;I firmly believe that AI extensions is where it's at. In my opinion, if you plan to build Chrome extensions, focus on the AI market and/or implementing features that use AI.&lt;/li&gt;
&lt;li&gt;Trust is a big issue nowadays, understandably so. From what I've seen, many people think your extension is either going to have a surprise paywall at some point or have some type of malware.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>chromeextensions</category>
      <category>buildinpublic</category>
      <category>indiehacking</category>
      <category>shipping</category>
    </item>
  </channel>
</rss>
