<?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: Caspar von Wrede</title>
    <description>The latest articles on DEV Community by Caspar von Wrede (@caspii).</description>
    <link>https://dev.to/caspii</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%2F4131799%2Fdb00d0a5-c6c2-45d5-820c-c78714cc16ea.jpg</url>
      <title>DEV Community: Caspar von Wrede</title>
      <link>https://dev.to/caspii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/caspii"/>
    <language>en</language>
    <item>
      <title>Launch Directories Are a Grift That Sells Nothing to People Who Have Nothing</title>
      <dc:creator>Caspar von Wrede</dc:creator>
      <pubDate>Fri, 16 Oct 2026 20:43:53 +0000</pubDate>
      <link>https://dev.to/caspii/launch-directories-are-a-grift-that-sells-nothing-to-people-who-have-nothing-2bh8</link>
      <guid>https://dev.to/caspii/launch-directories-are-a-grift-that-sells-nothing-to-people-who-have-nothing-2bh8</guid>
      <description>&lt;p&gt;I paid BetaList $39 to list my new side project. Within hours, five other launch directories had emailed me to ask for more money. Congratulations to me, I had been discovered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why BetaList
&lt;/h2&gt;

&lt;p&gt;I wanted a quick way to boost the search ranking of my new side project, &lt;a href="https://qrpage.co/" rel="noopener noreferrer"&gt;QRpage&lt;/a&gt;. A launch directory gets you a backlink, and I remembered BetaList from back in the day. So I bought the $39 Lite plan and waited for a trickle of visitors.&lt;/p&gt;

&lt;p&gt;What I got was email.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five emails
&lt;/h2&gt;

&lt;p&gt;PeerPush, LaunchNest, PostYourStartup, LaunchBuff and Shorebyte Lab. I'm not linking to any of them. They've had enough free backlinks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey, I saw your startup on BetaList. Turning physical things into scannable websites is a smart move.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was PostYourStartup. The flattery lasted exactly one sentence. Then came the offer: a free listing in exchange for a backlink. Nothing says "we love your product" like asking for something in the next breath.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I saw [my side project] on Betalist and believe it would work well on PeerPush.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sure you do.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Still sitting on an unlaunched product?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was LaunchNest. My side project had launched that day. It's the only reason they had my email address. Great research, guys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Founders selling to founders
&lt;/h2&gt;

&lt;p&gt;All five are basically the same site. Same pitch, same two prices ($19 and $39), and a free listing if you put their badge on your site.&lt;/p&gt;

&lt;p&gt;AI has made launch directories trivial to build, so people build them. A new directory has no audience, so it watches a site that does, like BetaList, and emails every founder who shows up there. Nobody visiting these sites is looking for products, because nobody is visiting these sites. The founder is the customer.&lt;/p&gt;

&lt;p&gt;The badge is the clever bit. It goes in your footer, which means it links back from every single page of your site. Get enough founders to do this and you end up with 1,000 to 2,000 referring domains and somewhere between 128,000 and a million backlinks. Your Domain Rating shoots up, and you wave that number at the next founder.&lt;/p&gt;

&lt;p&gt;Then someone clones you. Shorebyte Lab's homepage is a word-for-word copy of a directory called SaaSCity, whose own site warns about "misleading clones". The clone emailed me anyway. Points for confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ahrefs says
&lt;/h2&gt;

&lt;p&gt;I looked all five up in &lt;a href="https://ahrefs.com/" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;. Domain Rating (DR) measures backlinks. Organic traffic measures actual humans.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directory&lt;/th&gt;
&lt;th&gt;Domain Rating&lt;/th&gt;
&lt;th&gt;Organic traffic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PeerPush&lt;/td&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LaunchNest&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostYourStartup&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LaunchBuff&lt;/td&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;~183 visits/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shorebyte Lab&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Impressive ratings, practically no visitors. LaunchBuff is the runaway success here, with about six visitors a day. Some of them might be humans. Shorebyte Lab couldn't even manage a fake number.&lt;/p&gt;

&lt;p&gt;These directories are worth nothing. You'd be paying $19 to put your product in front of nobody, which you can also do for free by not launching it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI made building things easy. It didn't give anyone a reason to build them. So people copy each other and sell the copies to other builders, who are hoping someone, somewhere, will finally look at their product.&lt;/p&gt;

&lt;p&gt;PS: If you've built a launch directory, please don't email me.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>seo</category>
      <category>ai</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Anatomy of a scam campaign, from the point of view of a link shortener</title>
      <dc:creator>Caspar von Wrede</dc:creator>
      <pubDate>Fri, 18 Sep 2026 16:34:38 +0000</pubDate>
      <link>https://dev.to/caspii/anatomy-of-a-scam-campaign-from-the-point-of-view-of-a-link-shortener-297j</link>
      <guid>https://dev.to/caspii/anatomy-of-a-scam-campaign-from-the-point-of-view-of-a-link-shortener-297j</guid>
      <description>&lt;p&gt;I run a free link shortener as a side project. A few thousand people use it a day, and about 75,000 links sit in the database. Once a week I go through them looking for the ones that are up to no good.&lt;/p&gt;

&lt;p&gt;Last week’s sweep turned up one destination that had taken &lt;strong&gt;89,826 clicks in 48 hours&lt;/strong&gt;. More than everything else on the site combined.&lt;/p&gt;

&lt;p&gt;I deleted the links from the database. Two minutes later, they were back.&lt;/p&gt;

&lt;p&gt;What followed was three rounds of me deleting and the operator re-registering. Running a link shortener meant I got to watch the whole operation from underneath: how the links hid what they were doing, what was sending me the traffic, and where it was going.&lt;/p&gt;

&lt;p&gt;One vocabulary note before we start: the part of a short link after the slash is the &lt;strong&gt;slug&lt;/strong&gt;, and you get to pick your own. Mine look like &lt;code&gt;zip1.io/jip&lt;/code&gt;. The slug is &lt;code&gt;jip&lt;/code&gt;. Remember the slug 🐌.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the abuse sweep works
&lt;/h2&gt;

&lt;p&gt;Most bad links are caught when you first shorten one. Submitted URLs go through a blocklist, then Google Safe Browsing.&lt;/p&gt;

&lt;p&gt;Some still get through. That’s what the weekly scan is for.&lt;/p&gt;

&lt;p&gt;The scan is read-only. It scores all ~75k links for cheap domains, brand names in odd places, nested shorteners, and paths that look like login or phishing pages. Claude Code runs the sweep, proposes blocks, and I decide what actually gets deleted from production. Each scan usually expands the create-time blocklist.&lt;/p&gt;

&lt;p&gt;I don’t do this only to be a good online citizen. If I didn’t, Google would eventually mark the domain as a bad actor and stop sending search traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bad link arrives
&lt;/h2&gt;

&lt;p&gt;The destination was &lt;code&gt;hai8g.com/4/11395320&lt;/code&gt; — an ordinary &lt;code&gt;.com&lt;/code&gt; with a numeric path. Nothing about the URL looked suspicious.&lt;/p&gt;

&lt;p&gt;What gave it away was &lt;strong&gt;volume&lt;/strong&gt;: three slugs, all pointing at the same destination, drawing thousands of clicks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the link actually did
&lt;/h2&gt;

&lt;p&gt;I fetched the destination from my laptop and got 963 bytes of HTML whose only job was: send this visitor to google.com. Harmless.&lt;/p&gt;

&lt;p&gt;So I fetched it twice more — once from a rented datacenter server (where an automated scanner would come from), and once pretending to be an Android phone opening the link inside the Facebook app (what the click data said real visitors were).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What I fetched it with&lt;/th&gt;
&lt;th&gt;What came back&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ordinary desktop browser&lt;/td&gt;
&lt;td&gt;963 bytes → redirect to google.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server in a datacenter&lt;/td&gt;
&lt;td&gt;Redirect to yahoo.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android phone, from Facebook&lt;/td&gt;
&lt;td&gt;42,748 bytes of machinery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One address. Three answers. Depending on who asked.&lt;/p&gt;

&lt;p&gt;The 42k-byte payload was scrambled on purpose. Untangled, the page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looked for fingerprints that Selenium / Puppeteer leave behind&lt;/li&gt;
&lt;li&gt;checked for an ad blocker&lt;/li&gt;
&lt;li&gt;sampled cursor/touch movement (~80 positions) to confirm a real hand&lt;/li&gt;
&lt;li&gt;fingerprinted GPU, screen, battery, timezone&lt;/li&gt;
&lt;li&gt;and if any check failed: played a &lt;strong&gt;success animation&lt;/strong&gt;, then silently did nothing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last detail is my favourite. It doesn’t show an error. It congratulates you and bins you, so you never learn you were caught.&lt;/p&gt;

&lt;p&gt;The domain itself isn’t disposable either. Ahrefs gives &lt;code&gt;hai8g.com&lt;/code&gt; a Domain Rating of 50 (this blog is 43; &lt;code&gt;zip1.io&lt;/code&gt; is 24). That strength comes from hundreds of thousands of inbound links across pirate streaming and free-music sites — the same ad tag repeated everywhere. Infrastructure, not a throwaway. Malwarebytes flags it as riskware. Nothing flags &lt;code&gt;zip1.io&lt;/code&gt;, which is exactly why it was worth using as a sideline.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the links reached people
&lt;/h2&gt;

&lt;p&gt;Four in five clicks came from a Facebook-owned client. The in-app browser is embedded in the Facebook app, so someone tapped a link without leaving it. &lt;code&gt;FacebookBot&lt;/code&gt; is Facebook’s crawler — it fetches a link every time somebody posts it. Thousands of crawler hits means the link was posted a great many times, across a great many accounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who clicked, and who sent them
&lt;/h2&gt;

&lt;p&gt;The people clicking were overwhelmingly in Latin America. Mexico, Colombia, and Venezuela alone were ~40% of clicks; seven of the top nine countries are Spanish-speaking. Whatever the page said, it said it in Spanish.&lt;/p&gt;

&lt;p&gt;Whoever created the short links was somewhere else entirely: Asia-Pacific, then a Pakistani address. They almost certainly dont speak Spanish.&lt;/p&gt;

&lt;p&gt;That gap isn’t a coincidence. Buried in the page were fields for logo, headline, button label, and terms text — filled in per country by the ad network. Localisation is the network’s job. The buyer only has to deliver people.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three rounds of fix and purge
&lt;/h2&gt;

&lt;p&gt;I assumed the important thing was the destination, so I deleted the slugs and blacklisted the domain.&lt;/p&gt;

&lt;p&gt;Four hours later they were back — same three slugs, pointing at two new domains that only forwarded to &lt;code&gt;hai8g.com&lt;/code&gt;. They’d added a hop in the middle.&lt;/p&gt;

&lt;p&gt;Because the product lets you choose a custom slug, they recreated &lt;code&gt;zip1.io/jip&lt;/code&gt;. Whatever they were spreading on Facebook had that slug baked in. It had to keep working.&lt;/p&gt;

&lt;p&gt;The fix was to &lt;strong&gt;reserve burned slugs&lt;/strong&gt; instead of releasing them. When I remove an abusive link now, its slug stays claimed. Anyone trying to reuse it gets the ordinary alias already exists message  deliberately identical to a normal collision.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;zip1.io/jip&lt;/code&gt; returns not found, and it will keep doing that. The Facebook posts are still out there, but they lead nowhere. Even a day later they were still sending traffic my way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’d tell anyone running open infra
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create-time checks aren’t enough.&lt;/strong&gt; Blocklist + Safe Browsing catch a lot; volume and nested hops still sneak through.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deleting isnt enough if slugs are reusable.&lt;/strong&gt; Reserve them, or the campaign’s printed URLs keep working.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dont trust a validate URL” helper as a create-gate.&lt;/strong&gt; On my stack, validation can still say a URL looks fine while create refuses it for abuse reasons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloaking is the default for serious campaigns.&lt;/strong&gt; Desktop, datacenter, and in-app Facebook can see three different sites.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;The site is &lt;a href="https://zip1.io" rel="noopener noreferrer"&gt;zip1.io&lt;/a&gt;  a free, no-signup URL shortener I forked, rebranded, and shipped (mostly with Claude Code). Claude also does a lot of the security grunt work. I make the judgement calls on takedowns.&lt;/p&gt;

&lt;p&gt;It makes no money. It costs me about $27/month to run.&lt;/p&gt;

&lt;p&gt;If you run something similarly open — no auth, public create, custom slugs — I’d love to hear how you handle the third round of “they’re back.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://casparwre.de/blog/anatomy-of-a-scam-campaign/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;. Lightly adapted for Dev.to.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
