<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Addons Chrome Dev Notes]]></title><description><![CDATA[Addons Chrome Dev Notes]]></description><link>https://addonschrome.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 09 Nov 2026 11:11:31 GMT</lastBuildDate><atom:link href="https://addonschrome.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Designing a Safe Bulk Tweet Deleter: Backups, Verification and Rate Limits]]></title><description><![CDATA[Deleting a few thousand old posts on X sounds like a loop: find the item, call delete, move on. In practice a bulk tweet deleter that only does that will…]]></description><link>https://addonschrome.hashnode.dev/designing-a-safe-bulk-tweet-deleter-backups-verification-and-rate-limits</link><guid isPermaLink="true">https://addonschrome.hashnode.dev/designing-a-safe-bulk-tweet-deleter-backups-verification-and-rate-limits</guid><category><![CDATA[chrome extension]]></category><category><![CDATA[Twitter]]></category><category><![CDATA[privacy]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Yasin Muratoğulları]]></dc:creator><pubDate>Mon, 09 Nov 2026 09:20:50 GMT</pubDate><content:encoded><![CDATA[<p>Deleting a few thousand old posts on X sounds like a loop: find the item, call delete, move on. In practice a bulk tweet deleter that only does that will quietly leave posts behind, can lose things you meant to keep, and can get your session throttled. These are the design choices we made in <strong>Postwash</strong>, our free Chrome extension for cleaning up an X (Twitter) account, and why.</p>
<p><img src="https://www.addonschrome.com/images/box/postwash/1.jpg" alt="Postwash: choose what to clean on X" /></p>
<p><em>Disclosure: I'm part of the team that builds Postwash. Postwash is an independent tool and is not affiliated with X Corp.</em></p>
<h2>1. Scan and preview before anything is deleted</h2>
<p>A cleanup starts with a scan, not a delete. You pick what to look at (posts, replies, reposts, likes or bookmarks) and narrow it with filters: date (older than 30 days, 90 days, 6 months, 1 year, or a custom range), words, likes or views, and media. The scan only builds a list. Every item shows its date, text and engagement, and you can untick or protect anything you want to keep. The pinned post is left alone.</p>
<p>The point is simple: a destructive operation should have a reviewable plan before it runs.</p>
<h2>2. Backup first, and refuse to run without it</h2>
<p>Before the first deletion, Postwash saves a CSV or JSON file with the text and details of everything that is about to go to your Downloads folder. If that file cannot be saved, nothing is deleted. A backup that is "best effort" isn't a backup, so the delete step depends on it succeeding.</p>
<p>Scheduled cleanups (daily or weekly, for example posts older than 30 days every week) follow the same rule: each run saves its own backup first.</p>
<h2>3. Don't trust the success response: verify every deletion</h2>
<p>A delete request can come back looking successful when the post is still there. If a tool counts responses instead of results, its "done" number is wrong and you only find out later.</p>
<p>Postwash asks X again after each deletion and counts the item only when it is really gone. The final report splits results into <strong>deleted</strong>, <strong>already gone</strong> and <strong>failed</strong>, and the full activity log can be exported as CSV.</p>
<p><img src="https://www.addonschrome.com/images/box/postwash/3.jpg" alt="Back up, confirm, then verify" /></p>
<h2>4. Pace yourself and respect the rate limit</h2>
<p>Hammering an API is the fastest way to get stopped halfway. Postwash has three paces (gentle, balanced and fast) with random pauses between actions. It follows X's rate-limit counter, slows down before the limit runs out, and stops by itself if X pushes back, instead of retrying in a tight loop.</p>
<h2>5. Going past what the timeline shows</h2>
<p>The timeline only reaches back so far, roughly 3,000 posts. For older history, Postwash can import your X data archive (<code>tweets.js</code> and <code>like.js</code>) and delete by ID. The archive files are read on your computer and never uploaded.</p>
<h2>6. No password, no server</h2>
<p>Postwash works through the X session that is already open in your browser. You sign in to the extension with Google, it never asks for your X password, and your posts are read on your device rather than sent to a server.</p>
<h2>Try it</h2>
<p>Postwash is free, works in 50+ languages, and runs in Chrome:</p>
<ul>
<li><a href="https://chromewebstore.google.com/detail/ekpgkebodiolpkdmddnjblnlldckhmfb?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=postwash">Postwash on the Chrome Web Store</a></li>
<li><a href="https://www.addonschrome.com/extensions/postwash-delete-tweets-likes-reposts-for-x.html?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=postwash">Full guide and FAQ</a></li>
<li><a href="https://www.youtube.com/watch?v=FwjjBMA-uTg">Video walkthrough on YouTube</a></li>
</ul>
<p>If you have built something similar, I'd like to hear how you handled verification and rate limits.</p>
]]></content:encoded></item><item><title><![CDATA[How to Tell What a Website Is Built With Using Only DevTools]]></title><description><![CDATA[Six places in Chrome DevTools that reveal a website's framework, CMS, hosting and analytics: headers, HTML source, globals, bundles, requests and cookies.]]></description><link>https://addonschrome.hashnode.dev/how-to-tell-what-a-website-is-built-with-using-only-devtools</link><guid isPermaLink="true">https://addonschrome.hashnode.dev/how-to-tell-what-a-website-is-built-with-using-only-devtools</guid><category><![CDATA[webdev]]></category><category><![CDATA[devtools]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[chrome extension]]></category><dc:creator><![CDATA[Yasin Muratoğulları]]></dc:creator><pubDate>Wed, 14 Oct 2026 09:33:23 GMT</pubDate><content:encoded><![CDATA[<p>You land on a fast, good-looking site and wonder: is this Next.js? WordPress? Shopify? Which analytics, which CDN? You don't need a paid service to find out. Most sites leave clear fingerprints, and Chrome DevTools shows nearly all of them.</p>
<p>Here are the six places I check, in the order I check them.</p>
<h2>1. Response headers (Network tab)</h2>
<p>Open DevTools, go to the <strong>Network</strong> tab, reload, and click the first document request. Look at the response headers:</p>
<ul>
<li><code>server</code> often names the web server or edge: <code>nginx</code>, <code>Apache</code>, <code>cloudflare</code>, <code>Vercel</code>, <code>Netlify</code>.</li>
<li><code>x-powered-by</code> can reveal the backend, for example <code>PHP/8.2</code> or <code>Express</code>. Many sites remove it, but plenty don't.</li>
<li>Platform-specific headers are a strong signal: <code>x-vercel-id</code>, <code>x-nf-request-id</code> (Netlify), <code>cf-ray</code> (Cloudflare), <code>x-shopify-stage</code> or <code>x-shopid</code> (Shopify).</li>
</ul>
<h2>2. The HTML source</h2>
<p>Press <strong>Ctrl+U</strong> (or Cmd+Option+U on a Mac) and search the source:</p>
<ul>
<li><code>&lt;meta name="generator"&gt;</code> is the easiest win. WordPress, Wix, Hugo, Jekyll, Ghost and many others write their name and sometimes their version here.</li>
<li><code>/wp-content/</code> or <code>/wp-includes/</code> in asset paths means WordPress, even if the generator tag was removed.</li>
<li><code>__NEXT_DATA__</code> in a script tag means Next.js. <code>__NUXT__</code> means Nuxt. <code>id="___gatsby"</code> means Gatsby.</li>
<li><code>cdn.shopify.com</code> in image or script URLs means Shopify.</li>
</ul>
<h2>3. Global variables (Console tab)</h2>
<p>Frameworks and libraries often leave objects on <code>window</code>. In the <strong>Console</strong>, try:</p>
<pre><code class="language-js">!!window.React || !!document.querySelector('[data-reactroot]')
!!window.__NEXT_DATA__
!!window.Vue || !!window.__VUE__
!!window.jQuery &amp;&amp; jQuery.fn.jquery
!!window.ng
</code></pre>
<p>The jQuery line returns the version number, which is handy when you're checking for outdated libraries.</p>
<h2>4. Script and asset file names (Sources or Network tab)</h2>
<p>Bundle names give a lot away. <code>_next/static/chunks/</code> is Next.js, <code>/_nuxt/</code> is Nuxt, <code>/assets/index-[hash].js</code> is a common Vite build pattern, and <code>/static/js/main.[hash].js</code> is classic Create React App.</p>
<h2>5. Third-party requests</h2>
<p>Filter the Network tab by <strong>JS</strong> or by domain and you'll see the marketing and analytics stack:</p>
<ul>
<li><code>googletagmanager.com/gtag/js</code> or <code>/gtm.js</code> for Google Analytics and Tag Manager</li>
<li><code>connect.facebook.net</code> for the Meta Pixel</li>
<li><code>static.hotjar.com</code> for Hotjar</li>
<li><code>js.stripe.com</code> for Stripe</li>
<li><code>widget.intercom.io</code> or <code>embed.tawk.to</code> for live chat</li>
</ul>
<h2>6. Cookies (Application tab)</h2>
<p>Under <strong>Application &gt; Cookies</strong>, names are often branded: <code>_ga</code> (Google Analytics), <code>_fbp</code> (Meta Pixel), <code>_shopify_y</code> (Shopify), <code>wordpress_logged_in_</code> (WordPress), <code>PHPSESSID</code> (PHP sessions), <code>laravel_session</code> (Laravel).</p>
<h2>Putting it together</h2>
<p>No single clue is proof. Headers can be stripped and generator tags removed, so I look for two or three signals that agree. A <code>cf-ray</code> header plus <code>/wp-content/</code> paths plus a <code>_ga</code> cookie tells a pretty complete story: WordPress behind Cloudflare with Google Analytics.</p>
<h2>When you do this a lot</h2>
<p>If you check sites daily, for client audits, competitor research or sales prospecting, clicking through four DevTools tabs gets old. I built a free Chrome extension, <a href="https://addonschrome.com/extensions/detechtor-ai-website-technology-checker-tech-stack-detector.html">Detechtor AI</a>, that reads these same kinds of signals and shows the detected stack in one click. Full disclosure: I'm the developer. The manual method above works just as well when you only need it once in a while, and it's worth knowing either way, because it tells you <em>why</em> a tool says what it says.</p>
<p>What's the strangest stack you've uncovered this way? I'd like to hear it in the comments.</p>
]]></content:encoded></item></channel></rss>