<?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: wishdo.io</title>
    <description>The latest articles on DEV Community by wishdo.io (@wishdoio).</description>
    <link>https://dev.to/wishdoio</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3859890%2Fdd52affc-932a-4748-b70e-01a90ca5e61f.png</url>
      <title>DEV Community: wishdo.io</title>
      <link>https://dev.to/wishdoio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wishdoio"/>
    <language>en</language>
    <item>
      <title>How we handled a coordinated scraper botnet and moved to wishdo.io</title>
      <dc:creator>wishdo.io</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:56:45 +0000</pubDate>
      <link>https://dev.to/wishdoio/how-we-handled-a-coordinated-scraper-botnet-and-moved-to-wishdoio-3pif</link>
      <guid>https://dev.to/wishdoio/how-we-handled-a-coordinated-scraper-botnet-and-moved-to-wishdoio-3pif</guid>
      <description>&lt;p&gt;Building and scaling a platform transparently is a great way to engage the community, but it also exposes your infrastructure to targeted attacks. Recently, our team at &lt;strong&gt;wishdo.io&lt;/strong&gt; (formerly cadou.me) went through a 5-stage negative SEO and scraping campaign that forced us to overhaul our security and migrate our entire domain.&lt;/p&gt;

&lt;p&gt;Here is the technical breakdown of the attack and our mitigation strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The attack vectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Malicious 301 redirect injection&lt;/strong&gt;&lt;br&gt;
The campaign started with a domain-level attack. An external site, &lt;code&gt;admngrsgames.com&lt;/code&gt;, pointed a permanent 301 redirect to our root. The referring domain was saturated with thousands of low-quality, toxic backlinks. The intent was to poison our link profile and trigger a manual action from Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Distributed scraping via Tencent AS139341&lt;/strong&gt;&lt;br&gt;
Our monitoring picked up a massive scraping operation. We identified over &lt;strong&gt;1,400 unique IPs&lt;/strong&gt; originating from Tencent/Aceville infrastructure. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Behavior:&lt;/strong&gt; Systematic traversal of 247 categories across 27 languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fingerprinting:&lt;/strong&gt; Spoofed Chrome headers (20+ versions) and complete disregard for &lt;code&gt;robots.txt&lt;/code&gt; (specifically paths like &lt;code&gt;/livewire-&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate:&lt;/strong&gt; Approximately 1 request per IP every 3 hours to avoid simple threshold-based rate limiting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Traffic fraud and referrer pollution&lt;/strong&gt;&lt;br&gt;
Attackers used fake &lt;code&gt;Referer: https://admngrsgames.com/&lt;/code&gt; headers to flood our analytics. Technical analysis revealed affiliate parameters (&lt;code&gt;psystem=pw&lt;/code&gt;, &lt;code&gt;traffictarget=reseller&lt;/code&gt;) used to monetize the scraped traffic through a secondary network of "doorway" sites under the ".games" brand.&lt;/p&gt;
&lt;h3&gt;
  
  
  The technical response
&lt;/h3&gt;

&lt;p&gt;We implemented a multi-layered defense to regain control of our infrastructure.&lt;/p&gt;
&lt;h4&gt;
  
  
  Cloudflare custom rules
&lt;/h4&gt;

&lt;p&gt;Instead of blocking individual IPs, we used Cloudflare’s expression engine to block entire ASNs and specific bot patterns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(ip.src in {43.128.0.0/11 43.160.0.0/11 101.32.0.0/14 ...} or http.request.uri.path contains "lazy-") and not cf.client.bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allowed us to drop malicious traffic at the edge before it ever reached our origin, significantly reducing server load.&lt;/p&gt;

&lt;h4&gt;
  
  
  Infrastructure reports
&lt;/h4&gt;

&lt;p&gt;We filed forensic evidence with abuse departments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GoDaddy:&lt;/strong&gt; Reported the redirecting domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tencent/Aceville:&lt;/strong&gt; Provided logs of coordinated scraping from AS139341.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare:&lt;/strong&gt; Reported the downstream ".games" network using their CDN for content redistribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The decision to migrate
&lt;/h3&gt;

&lt;p&gt;While the technical defense was successful, the SEO impact on the original domain was significant. We decided to migrate to &lt;strong&gt;wishdo.io&lt;/strong&gt; for three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Clean link profile:&lt;/strong&gt; Moving to a new domain allowed us to shed the toxic backlinks inherited from the 301 redirect.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Global TLD:&lt;/strong&gt; The &lt;code&gt;.io&lt;/code&gt; extension better fits our roadmap for AI-driven features on a global scale.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Zero-trust architecture:&lt;/strong&gt; We used the migration as an opportunity to implement stricter rate limiting and signature-based request validation from day one.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Takeaways for developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitor raw logs:&lt;/strong&gt; Tools like GA4 won't show you the technical nature of a scraper botnet. You need raw access logs and ASN-level data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage edge computing:&lt;/strong&gt; Blocking at the application level (Nginx/PHP) is too late during a high-volume attack. Move your firewall rules to the edge (Cloudflare/Fastly).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't fear the migration:&lt;/strong&gt; If your domain is strategically compromised by negative SEO, a clean move can be faster than waiting for search engines to recalibrate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are now fully operational at &lt;strong&gt;wishdo.io&lt;/strong&gt;. The attack was a massive stress test, but it ultimately led us to build a more resilient, scalable infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you faced similar coordinated attacks? Let's discuss mitigation strategies in the comments.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>startup</category>
      <category>webdev</category>
      <category>security</category>
    </item>
    <item>
      <title>Why wishdo.io doesn’t have a mobile app (and why users prefer it that way)</title>
      <dc:creator>wishdo.io</dc:creator>
      <pubDate>Fri, 03 Apr 2026 18:42:33 +0000</pubDate>
      <link>https://dev.to/wishdoio/why-cadoume-doesnt-have-a-mobile-app-and-why-users-prefer-it-that-way-4e41</link>
      <guid>https://dev.to/wishdoio/why-cadoume-doesnt-have-a-mobile-app-and-why-users-prefer-it-that-way-4e41</guid>
      <description>&lt;p&gt;Most wishlist tools follow the same playbook:&lt;br&gt;&lt;br&gt;
download an app, create an account, allow notifications, and then – maybe – you can share a list.&lt;/p&gt;

&lt;p&gt;But when we looked at what users actually struggle with, a few patterns stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They don’t want another app on their phone.&lt;/li&gt;
&lt;li&gt;They want to add items from &lt;strong&gt;any&lt;/strong&gt; store, not just Amazon.&lt;/li&gt;
&lt;li&gt;And they lose the element of surprise when someone buys a gift from a shared list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we built &lt;code&gt;wishdo.io&lt;/code&gt; differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with “app‑first” wishlists
&lt;/h2&gt;

&lt;p&gt;Existing solutions often feel heavy.&lt;br&gt;&lt;br&gt;
You’re forced to install something, sign up with an email, and then convince your friends to do the same. By the time everyone is onboard, the friction kills the use case.&lt;/p&gt;

&lt;p&gt;Also, most wishlists are &lt;strong&gt;closed ecosystems&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Amazon’s wishlist works – but only if everyone shops on Amazon. They don’t.&lt;br&gt;&lt;br&gt;
Other apps limit you to their own catalogs or require manual entry for every item.&lt;/p&gt;

&lt;p&gt;And one more thing: &lt;strong&gt;no surprise&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
When you share a traditional wishlist, everyone sees who reserved what. The gift is spoiled before it’s even wrapped.&lt;/p&gt;

&lt;h2&gt;
  
  
  How wishdo.io solves these three problems
&lt;/h2&gt;

&lt;p&gt;We designed &lt;code&gt;wishdo.io&lt;/code&gt; as a &lt;strong&gt;browser‑first online wishlist&lt;/strong&gt;. No installation. No app store. Just a link you can share anywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Works without an app
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;wishdo.io&lt;/code&gt; in any browser – desktop, mobile, tablet. Create a wishlist in under ten seconds. Share the link. That’s it.&lt;/p&gt;

&lt;p&gt;Most users we talked to preferred not installing an app for something they use occasionally. This turned out to be useful in practice – non‑tech users (grandparents, friends who hate new apps) can open it without any hurdles.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Add from any online store
&lt;/h3&gt;

&lt;p&gt;Paste a product URL from Etsy, eBay, Shopify, or a local boutique. &lt;code&gt;wishdo.io&lt;/code&gt; automatically pulls the title, image, and price. No manual copying.&lt;/p&gt;

&lt;p&gt;No lock‑in to a single marketplace. If it’s sold online, it belongs on your wishlist.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Surprise mode (arguably the most interesting part)
&lt;/h3&gt;

&lt;p&gt;When someone wants to buy you a gift from your list, they click “reserve”. The item becomes locked so nobody else buys the same thing. But the buyer stays &lt;strong&gt;anonymous&lt;/strong&gt; until the gift is delivered.&lt;/p&gt;

&lt;p&gt;The surprise is preserved. No more “oh, I see you bought me the blue sweater”.&lt;br&gt;&lt;br&gt;
It feels closer to a real gift exchange than a transaction log.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about discovery? Users don’t always know what they want
&lt;/h2&gt;

&lt;p&gt;Another observation: people often create a wishlist and then… stare at an empty page. They don’t know what to add.&lt;/p&gt;

&lt;p&gt;So we added &lt;strong&gt;curated collections&lt;/strong&gt;, articles, and themed storefronts.&lt;br&gt;&lt;br&gt;
You can browse gift ideas by category or see popular items – it helps when users don’t know what to add yet. Nothing fancy, just practical navigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood (for the dev.to audience)
&lt;/h2&gt;

&lt;p&gt;We kept the tech simple on purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL parsing&lt;/strong&gt; – fetches Open Graph and schema data from product pages. Fallback to page title + main image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reservation system&lt;/strong&gt; – database locking per user per item. Anonymous until marked “purchased &amp;amp; delivered”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No WebSockets&lt;/strong&gt; – polling for reservations. Lower complexity, and for a wishlist it’s fast enough. Polling instead of WebSockets keeps things simple, but it does mean short delays in edge cases (e.g., two people reserving the same item within a second). We accept that trade‑off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack: Node.js + Postgres on a basic VPS. Handles hundreds of active lists without issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why no mobile app yet?
&lt;/h2&gt;

&lt;p&gt;We get this question sometimes. “When will you launch on iOS and Android?”&lt;/p&gt;

&lt;p&gt;The honest answer: &lt;strong&gt;not until it solves a real problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Adding an app creates friction – installation, permissions, updates. A browser‑based &lt;code&gt;create wishlist&lt;/code&gt; tool is instantly accessible. No “download our app” popup. No broken links.&lt;/p&gt;

&lt;p&gt;If the web version reaches 10k daily active users, we’ll consider a PWA. For now, the web‑first approach seems to match what users actually prefer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monetization without ruining the experience
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;wishdo.io&lt;/code&gt; is free for all core features.&lt;br&gt;&lt;br&gt;
We run small affiliate links on curated collections – if someone buys through a recommendation, we earn a tiny commission. No ads, no paywalls.&lt;/p&gt;

&lt;p&gt;Premium features (custom domains, analytics for power users) may come later, but creating and sharing a wishlist will stay free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it if you’re curious
&lt;/h2&gt;

&lt;p&gt;You can check it out at &lt;strong&gt;&lt;a href="https://wishdo.io" rel="noopener noreferrer"&gt;wishdo.io&lt;/a&gt;&lt;/strong&gt; if you want to see how it works.&lt;/p&gt;

&lt;p&gt;Feedback or feature requests? Comments are open – we’re actively improving it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. “wishdo.io” means “Wish &amp;amp; Do”. That’s the whole idea.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>product</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>ux</category>
    </item>
    <item>
      <title>Which wishlist services do you use? I tested a bunch and ended up with cadou.me</title>
      <dc:creator>wishdo.io</dc:creator>
      <pubDate>Fri, 03 Apr 2026 17:55:22 +0000</pubDate>
      <link>https://dev.to/wishdoio/which-wishlist-services-do-you-use-i-tested-a-bunch-and-ended-up-with-cadoume-228h</link>
      <guid>https://dev.to/wishdoio/which-wishlist-services-do-you-use-i-tested-a-bunch-and-ended-up-with-cadoume-228h</guid>
      <description>&lt;h1&gt;
  
  
  Which wishlist services do you use? I tested a bunch and ended up with cadou.me
&lt;/h1&gt;

&lt;p&gt;I've always had a love–hate relationship with wishlists.&lt;/p&gt;

&lt;p&gt;On one hand, it's great to have a place to dump things I want to buy later. On the other hand, most wishlist tools feel… lifeless. Just a boring grid of links and prices.&lt;/p&gt;

&lt;p&gt;So a few months ago, I went on a small quest. I tested &lt;strong&gt;Listful&lt;/strong&gt;, &lt;strong&gt;Amazon Wishlist&lt;/strong&gt;, &lt;strong&gt;Giftster&lt;/strong&gt;, and a couple of others. And yeah, I ended up sticking with &lt;code&gt;cadou.me&lt;/code&gt;. Not because it's perfect (nothing is), but because it solves a few things that others ignore.&lt;/p&gt;

&lt;p&gt;Here's my honest breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tried first
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Listful&lt;/strong&gt; – clean, minimal, works like "Notion for wishlists". You add items, share the list, done. Mobile-first. Great for quick onboarding. But after a while, it felt… shallow. No discovery, no inspiration. Just a database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Wishlist&lt;/strong&gt; – classic, but locked inside Amazon's ecosystem. And let's be real – half the stuff I want isn't even on Amazon anymore.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Giftster&lt;/strong&gt; – good for families and group gifting. But it's rigid. You can't really browse or explore. You just assign items to people.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them missed one thing: &lt;strong&gt;discovery&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I found cadou.me
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cadou.me&lt;/code&gt; isn't just a wishlist. It's more like a hybrid:&lt;br&gt;&lt;br&gt;
wishlist + gift ideas + curated collections + articles + a small storefront.&lt;/p&gt;

&lt;p&gt;Sounds like a lot? Yeah, but it actually works.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Discovery is built in – not an afterthought
&lt;/h3&gt;

&lt;p&gt;On Listful, you add an item and share a link. That's it.&lt;br&gt;&lt;br&gt;
On &lt;code&gt;cadou.me&lt;/code&gt;, I can browse themed collections, see what others are saving, and even stumble on gift ideas I hadn't thought of.&lt;/p&gt;

&lt;p&gt;It's closer to Pinterest than to a spreadsheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It helps with the "what to gift?" problem
&lt;/h3&gt;

&lt;p&gt;Big one for me. I suck at choosing gifts for friends.&lt;br&gt;&lt;br&gt;
With &lt;code&gt;cadou.me&lt;/code&gt;, I don't have to jump between five sites. I can look at curated lists, read short articles, and get actual inspiration.&lt;/p&gt;

&lt;p&gt;That alone made me switch.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. SEO and external reach – surprisingly useful
&lt;/h3&gt;

&lt;p&gt;I didn't expect this, but &lt;code&gt;cadou.me&lt;/code&gt; gets organic traffic from Google and Telegram. My wishlist isn't just a private note – it can actually help someone else find a gift idea.&lt;/p&gt;

&lt;p&gt;And if you're into affiliate links, there's potential to earn something on the side. Not the main reason I use it, but nice to have.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Flexibility: lists, articles, storefronts
&lt;/h3&gt;

&lt;p&gt;You can create a simple wishlist. Or you can build a themed storefront. Or write a short article about why you love certain products.&lt;/p&gt;

&lt;p&gt;It doesn't force you into one mode. That's rare.&lt;/p&gt;

&lt;h2&gt;
  
  
  So where does cadou.me shine?
&lt;/h2&gt;

&lt;p&gt;If you just want a &lt;strong&gt;fast, simple wishlist&lt;/strong&gt; – Listful is fine. No hate.&lt;/p&gt;

&lt;p&gt;But if you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;to &lt;strong&gt;discover&lt;/strong&gt; new gift ideas
&lt;/li&gt;
&lt;li&gt;to &lt;strong&gt;create a wishlist online&lt;/strong&gt; that's actually fun to browse
&lt;/li&gt;
&lt;li&gt;to &lt;strong&gt;share curated collections&lt;/strong&gt; with friends or followers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then &lt;code&gt;cadou.me&lt;/code&gt; wins.&lt;/p&gt;

&lt;p&gt;And yeah, it's great for those searching "&lt;strong&gt;create wishlist&lt;/strong&gt;" tools – because it gives you way more than just a list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Don't use &lt;code&gt;cadou.me&lt;/code&gt; if you only need a barebones checklist.&lt;br&gt;&lt;br&gt;
Use it if you want inspiration, flexibility, and a wishlist that doesn't feel dead.&lt;/p&gt;

&lt;p&gt;I'm sticking with it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt; &lt;a href="https://cadou.me" rel="noopener noreferrer"&gt;cadou.me&lt;/a&gt; – especially if you're tired of boring wishlists.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. If you know another underrated wishlist tool, drop it in the comments. I'm still curious.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wishlist</category>
      <category>cadoume</category>
      <category>giftlist</category>
    </item>
  </channel>
</rss>
