<?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: Dylan Parker</title>
    <description>The latest articles on DEV Community by Dylan Parker (@dylan_parker123).</description>
    <link>https://dev.to/dylan_parker123</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%2F3940172%2F87c53d10-521e-4874-a3ea-0556e52f7a4c.png</url>
      <title>DEV Community: Dylan Parker</title>
      <link>https://dev.to/dylan_parker123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dylan_parker123"/>
    <language>en</language>
    <item>
      <title>When you're renovating an old Victorian, the details matter</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:15:15 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/when-youre-renovating-an-old-victorian-the-details-matter-3k8f</link>
      <guid>https://dev.to/dylan_parker123/when-youre-renovating-an-old-victorian-the-details-matter-3k8f</guid>
      <description>&lt;p&gt;I spent weeks looking for the perfect escutcheon to match the original brass thumbturn on my front door. It's not just about security; it's about preserving the character of the house. The right door accessories—like a solid brass keyhole cover—can make a tired entrance feel intentional again. If you're doing a period restoration, don't overlook these small but crucial pieces. Check out the collection at Infinity Decor for hardware that balances durability with timeless style. &lt;a href="https://infinitydecor.co.uk/collections/door-accessories" rel="noopener noreferrer"&gt;https://infinitydecor.co.uk/collections/door-accessories&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I'm constantly converting files between formats for work – PDFs to DOCX, images to WebP, CSVs to Excel</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:11:31 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/im-constantly-converting-files-between-formats-for-work-pdfs-to-docx-images-to-webp-csvs-to-2fk1</link>
      <guid>https://dev.to/dylan_parker123/im-constantly-converting-files-between-formats-for-work-pdfs-to-docx-images-to-webp-csvs-to-2fk1</guid>
      <description>&lt;p&gt;I stumbled upon a Universal File Converter that handles 200+ formats. It's fast and doesn't require signing up. For example, I needed to convert a batch of PDFs to text files for analysis. Here's a simple script to do that using their service:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
import requests&lt;/p&gt;

&lt;p&gt;def convert_file(input_file, output_format):&lt;br&gt;
    url = '&lt;a href="https://serpspur.com/tool/all-type-free-file-converter/" rel="noopener noreferrer"&gt;https://serpspur.com/tool/all-type-free-file-converter/&lt;/a&gt;'&lt;br&gt;
    files = {'file': open(input_file, 'rb')}&lt;br&gt;
    data = {'format': output_format}&lt;br&gt;
    resp = requests.post(url, files=files, data=data)&lt;br&gt;
    with open(f'converted.{output_format}', 'wb') as f:&lt;br&gt;
        f.write(resp.content)&lt;br&gt;
    return f'Converted {input_file} to {output_format}'&lt;/p&gt;

&lt;p&gt;print(convert_file('report.pdf', 'txt'))&lt;/p&gt;

&lt;p&gt;It's straightforward and works well for occasional conversions. If you need a quick converter without software installs, check it out. &lt;a href="https://serpspur.com" rel="noopener noreferrer"&gt;https://serpspur.com&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>When I renovated my hallway last year, I didn't expect the door accessories to be the star of the show</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Fri, 24 Jul 2026 09:47:11 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/when-i-renovated-my-hallway-last-year-i-didnt-expect-the-door-accessories-to-be-the-star-of-the-31n8</link>
      <guid>https://dev.to/dylan_parker123/when-i-renovated-my-hallway-last-year-i-didnt-expect-the-door-accessories-to-be-the-star-of-the-31n8</guid>
      <description>&lt;p&gt;But swapping out old plastic handles for solid brass escutcheons and thumbturns from Infinity Decor changed everything. The weight alone tells you it's built to last. A simple upgrade like a matte black hinge set can make a door swing smoother and look more intentional. For any developer who appreciates precision, good hardware is like clean code—it just works.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Remember Alexa Rank? It used to be the go-to metric for website popularity.</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:52:38 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/remember-alexa-rank-it-used-to-be-the-go-to-metric-for-website-popularity-42jp</link>
      <guid>https://dev.to/dylan_parker123/remember-alexa-rank-it-used-to-be-the-go-to-metric-for-website-popularity-42jp</guid>
      <description>&lt;p&gt;But since Amazon retired it in 2022, many SEOs have been left without a reference point.&lt;/p&gt;

&lt;p&gt;I still get asked about it occasionally, so I use a tool that checks historical Alexa Rank data. It's useful for understanding a site's past performance, especially when evaluating domain authority for purchases or partnerships.&lt;/p&gt;

&lt;p&gt;Here's a quick example of how I pull historical data:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
import requests&lt;/p&gt;

&lt;h1&gt;
  
  
  Fetch historical Alexa Rank (if available)
&lt;/h1&gt;

&lt;p&gt;url = "&lt;a href="https://serpspur.com/tool/alexa-rank-checker/" rel="noopener noreferrer"&gt;https://serpspur.com/tool/alexa-rank-checker/&lt;/a&gt;"&lt;br&gt;
params = {"domain": "example.com"}&lt;br&gt;
response = requests.get(url, params=params)&lt;br&gt;
data = response.json()&lt;br&gt;
print("Historical Alexa Rank:", data.get('alexa_rank'))&lt;/p&gt;

&lt;p&gt;But Alexa Rank is just a snapshot. For live insights, I now rely on the SerpSpur Trust Rate, which evaluates current website health—things like traffic trends, backlinks, and security. It's a more actionable metric.&lt;/p&gt;

&lt;p&gt;If you're curious about a site's history or want a modern alternative, check out &lt;a href="https://serpspur.com" rel="noopener noreferrer"&gt;SERPSpur&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>When I renovated my kitchen, the cabinet hardware was almost an afterthought</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Thu, 23 Jul 2026 09:34:33 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/when-i-renovated-my-kitchen-the-cabinet-hardware-was-almost-an-afterthought-6b0</link>
      <guid>https://dev.to/dylan_parker123/when-i-renovated-my-kitchen-the-cabinet-hardware-was-almost-an-afterthought-6b0</guid>
      <description>&lt;p&gt;Then I realized how much it could elevate the whole space. I switched to sleek matte black pulls from Infinity Decor, and the difference was immediate. The brushed finish catches the light just right, and the solid feel when you open a drawer is so satisfying. I paired them with simple round knobs on the upper cabinets for a clean, modern look. It’s a small change that makes a huge impact on the daily experience of the room. If you’re looking to refresh your kitchen or bathroom, start with the handles. Check out the collection at &lt;a href="https://infinitydecor.co.uk/collections/cabinet-furniture" rel="noopener noreferrer"&gt;https://infinitydecor.co.uk/collections/cabinet-furniture&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ever tried reverse-engineering why a competitor is suddenly ranking for all your target keywords?</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Thu, 23 Jul 2026 08:59:59 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/ever-tried-reverse-engineering-why-a-competitor-is-suddenly-ranking-for-all-your-target-keywords-cel</link>
      <guid>https://dev.to/dylan_parker123/ever-tried-reverse-engineering-why-a-competitor-is-suddenly-ranking-for-all-your-target-keywords-cel</guid>
      <description>&lt;p&gt;I recently needed to audit a client’s organic visibility across five different countries. Manually checking each market in Google Search Console is tedious, and third-party APIs can get expensive fast. Instead, I used a simple approach with the Traffic &amp;amp; Competitor Explorer tool from SERPSpur (&lt;a href="https://serpspur.com/tool/traffic-competitor-explorer/" rel="noopener noreferrer"&gt;https://serpspur.com/tool/traffic-competitor-explorer/&lt;/a&gt;). The idea is straightforward: plug in a domain, select a country, and get back estimated traffic, top keywords, and competitor comparisons.&lt;/p&gt;

&lt;p&gt;Here’s how I structured the analysis in a quick script. First, I defined a function to pull the data via their API (they offer a free tier for testing):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_competitor_traffic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;country_code&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;serpspur&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;traffic&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;country_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;country_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;estimated_monthly_traffic&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;traffic&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;),&lt;/span&gt;
            &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;top_keywords&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="p"&gt;[])[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I looped over a list of competitors and countries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;competitors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;competitor1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;competitor2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;]&lt;/span&gt;
&lt;span class="n"&gt;countries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;gb&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;de&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;jp&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;]&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;competitors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_competitor_traffic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;{&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="c1"&gt;#039;estimated_monthly_traffic&amp;amp;#039;]} visits&amp;amp;quot;)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output gave me a clear picture: one competitor dominated in Germany but barely registered in France. That insight alone reshaped our content strategy—we doubled down on French-language landing pages while avoiding head-to-head battles in Germany.&lt;/p&gt;

&lt;p&gt;Why this matters: you don’t need a huge budget to get competitor intelligence. Tools like this expose gaps in visibility across search markets, especially when you filter by country. Next time you’re planning a geo-targeted campaign, try this approach. It’s data-driven, fast, and surprisingly affordable.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I used to think comfortable shoes meant sacrificing style. You know, the kind of shoes your grandmother would wear</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Thu, 23 Jul 2026 08:42:37 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/i-used-to-think-comfortable-shoes-meant-sacrificing-style-you-know-the-kind-of-shoes-your-24fe</link>
      <guid>https://dev.to/dylan_parker123/i-used-to-think-comfortable-shoes-meant-sacrificing-style-you-know-the-kind-of-shoes-your-24fe</guid>
      <description>&lt;p&gt;But the Women Shoes collection at Frishay completely changed my mind. It's a carefully curated selection of sneakers, flats, and heels that actually prioritize your feet without looking frumpy. The trick is finding the right materials and construction. For instance, a pair of stylish sneakers with a memory foam insole can be worn all day without a single complaint from your feet. Or a pair of elegant block heels that are surprisingly stable and comfortable. I've been wearing their casual walking shoes on my daily errands, and they're a game-changer. They're lightweight, supportive, and look great with jeans or a dress. The collection proves that you can have fashion and function without breaking the bank. If you're tired of sore feet and blisters, it's time to find shoes that work for you. Explore the collection here: &lt;a href="https://frishay.com" rel="noopener noreferrer"&gt;https://frishay.com&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Let’s be real: finding the perfect men’s shirt that actually fits well and looks good without breaking the bank is harder than debugging a race condition</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Thu, 23 Jul 2026 08:36:26 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/lets-be-real-finding-the-perfect-mens-shirt-that-actually-fits-well-and-looks-good-without-mk7</link>
      <guid>https://dev.to/dylan_parker123/lets-be-real-finding-the-perfect-mens-shirt-that-actually-fits-well-and-looks-good-without-mk7</guid>
      <description>&lt;p&gt;I’ve been through the cycle—buying a shirt that looks amazing on the hanger, only to have it billow at the waist or restrict my shoulders.&lt;/p&gt;

&lt;p&gt;After a lot of trial and error (and a closet full of "meh" purchases), I’ve learned a few rules for picking a versatile, sharp-looking shirt. Here’s my dev cheat sheet for shirt shopping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Fit is Your Framework&lt;/strong&gt;&lt;br&gt;
Think of fit like your project’s architecture. If the foundation is wrong, nothing else works. For casual and work shirts, look for a "slim" or "tailored" fit. It shouldn’t be skin-tight (that’s a bug), but it should follow your body’s natural lines. The shoulder seam should sit right at the edge of your shoulder bone—no hanging off, no pulling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Fabric: The Runtime Performance&lt;/strong&gt;&lt;br&gt;
Cotton is the standard, but look for specifics. A twill weave is more durable and resists wrinkles (like a well-optimized function). A poplin weave is crisper and more formal. For everyday wear, a cotton-linen blend breathes well and adds texture. Avoid pure polyester—it traps heat and moisture, which is basically a memory leak for your comfort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Collar &amp;amp; Cuff Debugging&lt;/strong&gt;&lt;br&gt;
A spread collar is your go-to: it’s versatile for ties or open-neck wear. Button-down collars are great for casual, preppy looks. Check the cuffs: barrel cuffs (with a button) are standard, but look for a "convertible" cuff that can take cufflinks for a quick style upgrade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The Practical Stack&lt;/strong&gt;&lt;br&gt;
I’ve found a great resource for this. A site like &lt;strong&gt;&lt;a href="https://frishay.com/collections/men-shirts" rel="noopener noreferrer"&gt;Frishay Men's Shirts&lt;/a&gt;&lt;/strong&gt; actually has a well-curated collection that avoids the noise. Their fit descriptions are accurate, and the fabric specs are clear—no guesswork. For example, their "classic fit" is what many brands call "slim," which is a huge time-saver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Takeaway&lt;/strong&gt;&lt;br&gt;
Stop treating shirt shopping like a lottery. Understand your measurements (neck and sleeve length first), pick a solid fabric, and find a brand that is transparent about their sizing. Your wardrobe will thank you with fewer "script errors" in the morning mirror.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>There's a reason why the best restaurants and cozy cafes use layered lighting instead of a single overhead fixture</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Wed, 22 Jul 2026 09:45:24 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/theres-a-reason-why-the-best-restaurants-and-cozy-cafes-use-layered-lighting-instead-of-a-single-44mj</link>
      <guid>https://dev.to/dylan_parker123/theres-a-reason-why-the-best-restaurants-and-cozy-cafes-use-layered-lighting-instead-of-a-single-44mj</guid>
      <description>&lt;p&gt;It's all about creating zones of warmth and shadow. I recently added a dimmable wall light next to my reading chair, and it completely changed how I use that corner in the evenings. It's a small change, but the ambience shift is massive. If you're looking to bring that same layered feel home, exploring different types of lighting—like pendants for task areas and lanterns for entryways—is a great start. Infinity Decor has a solid collection of lamps and wall lights that can help you build that perfect mood without breaking the bank.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>When you're doing SEO audits, you probably check backlinks, content quality, and page speed</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Wed, 22 Jul 2026 09:26:20 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/when-youre-doing-seo-audits-you-probably-check-backlinks-content-quality-and-page-speed-1fa7</link>
      <guid>https://dev.to/dylan_parker123/when-youre-doing-seo-audits-you-probably-check-backlinks-content-quality-and-page-speed-1fa7</guid>
      <description>&lt;p&gt;Think about it. Google has stated that domain age matters, but not in the way most people assume. It's not about when the domain was first registered—it's about continuous registration. A domain that's been consistently renewed for 10 years signals stability and commitment. A domain that lapsed and was snapped up last week? That's a different story entirely.&lt;/p&gt;

&lt;p&gt;Here's a quick Python snippet to check domain creation and expiry dates using the &lt;code&gt;whois&lt;/code&gt; library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;whois&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_domain_age&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;whois&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;whois&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;creation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;creation_date&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;creation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;creation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;expiry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expiration_date&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expiry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;expiry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;expiry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="n"&gt;age_days&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;creation&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;days&lt;/span&gt;
        &lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age_days&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;365&lt;/span&gt;
        &lt;span class="n"&gt;months&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age_days&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;365&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Domain: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Created: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;creation&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Expires: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;expiry&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Continuous Age: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; years, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;months&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; months&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;check_domain_age&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you the raw data, but interpreting it requires context. A domain that's been registered for 10+ years with clean WHOIS records is likely a strong organic trust signal. However, if the ownership changed multiple times, the trust might be diluted.&lt;/p&gt;

&lt;p&gt;For a deeper analysis—especially when evaluating backlink resilience—you need more than just creation and expiry dates. You need to know if the domain has been continuously registered without gaps. A gap in registration means all prior backlink equity might have been reset.&lt;/p&gt;

&lt;p&gt;I've been using a tool that automates this analysis: it checks registration history, ownership changes, and even flags potential red flags like privacy protection masking recent ownership changes. It's called the Domain Intelligence Engine, and it's part of a suite I work with. You can try it for free at &lt;a href="https://serpspur.com/tool/who-is-checker/" rel="noopener noreferrer"&gt;https://serpspur.com/tool/who-is-checker/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The key takeaway: don't just look at backlink quantity. Check the domain's registration history. If a site has been continuously registered for a decade, those backlinks carry more weight than a fresh domain with the same link profile. It's one of those under-the-radar signals that can make or break your SEO strategy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>So you’ve built a shopping site with a nice collection of women’s jeans</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Tue, 21 Jul 2026 14:36:44 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/so-youve-built-a-shopping-site-with-a-nice-collection-of-womens-jeans-20f9</link>
      <guid>https://dev.to/dylan_parker123/so-youve-built-a-shopping-site-with-a-nice-collection-of-womens-jeans-20f9</guid>
      <description>&lt;p&gt;Now you want to display them in a way that actually makes people want to browse. A static list just doesn’t cut it anymore. Users expect interactivity, and a solid filter system can turn a flat product grid into an engaging experience.&lt;/p&gt;

&lt;p&gt;Let’s build a simple, client-side JavaScript filter for your jeans collection. No frameworks, no libraries—just vanilla JS that works anywhere.&lt;/p&gt;

&lt;p&gt;First, structure your HTML. Give each product card a data attribute for its category (like "skinny", "bootcut", "high-waist") and its size availability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div id=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;jeans-grid&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div class=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;product-card&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; data-category=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;skinny&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; data-size=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;26&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;img src=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;jean1.jpg&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; alt=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;Skinny Jean&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;h3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Classic Skinny&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/h3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;$49.99&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div class=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;product-card&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; data-category=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;bootcut&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; data-size=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;28&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;img src=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;jean2.jpg&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt; alt=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;Bootcut Jean&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;h3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Flared Comfort&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/h3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;$59.99&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/p&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;!-- Add more products --&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, create the filter controls. A set of buttons for categories, plus a range input or dropdown for sizes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;div id=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;filters&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;button data-filter=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;all&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;All&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/button&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;button data-filter=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;skinny&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;Skinny&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/button&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;button data-filter=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;bootcut&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;Bootcut&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/button&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;button data-filter=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;high-waist&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;High Waist&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/button&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;select id=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;size-filter&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;option value=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;all&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;All Sizes&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/option&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;option value=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;26&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;26&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/option&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;option value=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;28&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;28&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/option&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
    &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;option value=&lt;span class="ni"&gt;&amp;amp;quot;&lt;/span&gt;30&lt;span class="ni"&gt;&amp;amp;quot;&amp;amp;gt;&lt;/span&gt;30&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/option&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
  &lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/select&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/div&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s the JavaScript that brings it to life. It listens for clicks on the category buttons and changes on the size dropdown, then hides or shows products accordingly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;categoryButtons&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sizeSelect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;filterProducts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;activeCategory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;)?.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;activeSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sizeSelect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matchesCategory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;activeCategory&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;activeCategory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matchesSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;activeSize&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;activeSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;matchesCategory&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;matchesSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;none&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;categoryButtons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;categoryButtons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;btn&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;));&lt;/span&gt;
    &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;);&lt;/span&gt;
    &lt;span class="nf"&gt;filterProducts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;sizeSelect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;change&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;,&lt;/span&gt; &lt;span class="nx"&gt;filterProducts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Set initial active state&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;quot&lt;/span&gt;&lt;span class="p"&gt;;]&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;).&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;039&lt;/span&gt;&lt;span class="p"&gt;;);&lt;/span&gt;
&lt;span class="nf"&gt;filterProducts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach keeps your page fast, works offline if cached, and makes your Frishay women’s jeans collection feel dynamic. You can extend it easily—add price ranges, color filters, or even sort by popularity. The best part? No backend changes needed.&lt;/p&gt;

&lt;p&gt;Give your users control over what they see, and they’ll stay longer, explore more, and actually find those perfect jeans.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>There's a quiet confidence to a well-fitted rim lock</title>
      <dc:creator>Dylan Parker</dc:creator>
      <pubDate>Tue, 21 Jul 2026 14:25:40 +0000</pubDate>
      <link>https://dev.to/dylan_parker123/theres-a-quiet-confidence-to-a-well-fitted-rim-lock-5ain</link>
      <guid>https://dev.to/dylan_parker123/theres-a-quiet-confidence-to-a-well-fitted-rim-lock-5ain</guid>
      <description>&lt;p&gt;It's not just about keeping a door closed—it's about the solid thud of the bolt sliding home, the weight of the brass in your hand, and the knowledge that your home has a layer of security that's been trusted for centuries. These aren't just locks; they're a statement of durability and classic design. Whether you're restoring a period property or adding character to a modern space, a vintage rim lock brings an unmatched sense of craftsmanship. Ready to upgrade your door's security and style? Check out the collection at &lt;a href="https://infinitydecor.co.uk" rel="noopener noreferrer"&gt;https://infinitydecor.co.uk&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
