<?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: Lyra_TinyStrack</title>
    <description>The latest articles on DEV Community by Lyra_TinyStrack (@dd_aa_abaee26be1a34448721).</description>
    <link>https://dev.to/dd_aa_abaee26be1a34448721</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%2F3847617%2Fbd8861ae-273e-42bf-8322-26f32e6f274b.png</url>
      <title>DEV Community: Lyra_TinyStrack</title>
      <link>https://dev.to/dd_aa_abaee26be1a34448721</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dd_aa_abaee26be1a34448721"/>
    <language>en</language>
    <item>
      <title>My site got indexed by Google in 3 days — and landed on page 1</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Wed, 22 Apr 2026 15:59:01 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/my-site-got-indexed-by-google-in-3-days-and-landed-on-page-1-3l4h</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/my-site-got-indexed-by-google-in-3-days-and-landed-on-page-1-3l4h</guid>
      <description>&lt;p&gt;After my server got hit by cryptomining malware, I spent 2 weeks rebuilding and migrating products instead of thinking about SEO.&lt;br&gt;
Finally submitted the sitemap on April 14. Google indexed it on April 17 — just 3 days. Homepage came in at position 10.2, right at the bottom of page 1.&lt;br&gt;
I'm a self-taught solo developer building a micro-SaaS portfolio at &lt;a href="https://saaslic.com" rel="noopener noreferrer"&gt;saaslic.com&lt;/a&gt;. No CS background, no SEO knowledge — just learning as I go.&lt;br&gt;
Two questions for the community:&lt;/p&gt;

&lt;p&gt;How do you push a new site from the bottom of page 1 into the top 5?&lt;br&gt;
Running multiple products under one domain — does that help or hurt SEO?&lt;/p&gt;

&lt;p&gt;Any advice welcome!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0d6ci4p8ikoja9nug8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0d6ci4p8ikoja9nug8u.png" alt=" " width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>I got confused by my own SaaS — here's what I'm fixing</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Thu, 16 Apr 2026 00:26:36 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/i-got-confused-by-my-own-saas-heres-what-im-fixing-40nl</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/i-got-confused-by-my-own-saas-heres-what-im-fixing-40nl</guid>
      <description>&lt;p&gt;I've been building LicenseKit, a software licensing system, for the past couple of months. Today I tried to use it to protect one of my own tools.&lt;br&gt;
I created a Project. Then I went to the Licenses page to grab a license key. Got "license not found." Tried again. Same result.&lt;br&gt;
Twenty minutes later I figured it out: the Projects page and the Licenses page are two completely separate silos. To actually generate a license, you have to create the project inside the Licenses flow — not in Projects. The Projects sidebar item exists mostly to configure webhooks.&lt;br&gt;
I built this thing and still got lost on first use.&lt;br&gt;
That's the clearest signal a UX is broken.&lt;br&gt;
The fix: rebuilding around a Project-centric model. Click into a project, see all its licenses, devices, verification trends, and webhook config — all in one place. No more jumping between pages.&lt;br&gt;
Shipping the update soon. Will post a follow-up when it's live.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>I Found 30+ Security Vulnerabilities Across My 11 SaaS Products</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Thu, 16 Apr 2026 00:13:01 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/i-found-30-security-vulnerabilities-across-my-11-saas-products-38m8</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/i-found-30-security-vulnerabilities-across-my-11-saas-products-38m8</guid>
      <description>&lt;p&gt;After reading a post about vibe coding risks, I did a full security audit across all 11 of my self-hosted SaaS products.&lt;br&gt;
Here's what I found and fixed:&lt;br&gt;
Authentication &amp;amp; Rate Limiting&lt;/p&gt;

&lt;p&gt;No rate limiting on register/login routes → added IP-based limiting&lt;/p&gt;

&lt;p&gt;Authorization&lt;/p&gt;

&lt;p&gt;Missing auth middleware on several API endpoints → patched&lt;/p&gt;

&lt;p&gt;Demo Mode&lt;/p&gt;

&lt;p&gt;Demo accounts could bypass restrictions → fixed permission checks&lt;/p&gt;

&lt;p&gt;Database&lt;/p&gt;

&lt;p&gt;Over-privileged DB users → tightened to minimum required permissions&lt;/p&gt;

&lt;p&gt;All running in production for 3 days before I caught this.&lt;br&gt;
If you're shipping fast with AI assistance, don't skip the security pass.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>security</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>I shipped 8 new features across 2 SaaS products this week (and finally got payments working)</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Mon, 13 Apr 2026 23:17:52 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/i-shipped-8-new-features-across-2-saas-products-this-week-and-finally-got-payments-working-25m9</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/i-shipped-8-new-features-across-2-saas-products-this-week-and-finally-got-payments-working-25m9</guid>
      <description>&lt;p&gt;Been heads-down building this week. Here's what shipped:&lt;br&gt;
MailTrace — Email Tracking SaaS&lt;/p&gt;

&lt;p&gt;🐛 Fixed a embarrassing bug: the tracking pixel route /t/[trackId] existed as a directory but was completely empty 😅 It's actually tracking now&lt;br&gt;
🌍 Geolocation — see which country opened your email, with flag emoji&lt;br&gt;
🔔 Open notifications — get an email or Webhook fired when someone opens&lt;br&gt;
📥 CSV export for all open records&lt;br&gt;
✏️ Template variables with live preview — write {{name}} and see it replaced in real time&lt;/p&gt;

&lt;p&gt;TestimonialWall — Social Proof SaaS&lt;/p&gt;

&lt;p&gt;📧 Request testimonials via email directly from dashboard&lt;br&gt;
✨ AI polish for testimonials (Pro feature) — one click to clean up awkward phrasing&lt;br&gt;
📝 Approval workflow with internal notes — leave context when approving or rejecting&lt;/p&gt;

&lt;p&gt;The big one 🎉&lt;br&gt;
My payment processor (@creemhq) just got fully verified today after weeks of waiting. First time I can actually charge users properly.&lt;/p&gt;

&lt;p&gt;Both tools have demo mode — no signup needed, just click around.&lt;br&gt;
Would love feedback from this community — what would make these more useful?&lt;br&gt;
👉 mailtrace.saaslic.com&lt;br&gt;
👉 testimonialwall.saaslic.com&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
    </item>
    <item>
      <title>I got cryptomined 5 times in 10 days. Here's my story 🧵</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Fri, 10 Apr 2026 18:43:00 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/i-got-cryptomined-5-times-in-10-days-heres-my-story-48ab</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/i-got-cryptomined-5-times-in-10-days-heres-my-story-48ab</guid>
      <description>&lt;h2&gt;
  
  
  I got cryptomined 5 times in 10 days. Here's my story 🧵
&lt;/h2&gt;

&lt;p&gt;It started with my CPU suddenly hitting 100%.&lt;br&gt;
I had no idea what was happening. I asked Claude "why is my CPU maxing out?"&lt;/p&gt;

&lt;h2&gt;
  
  
  That's literally the first time I heard the word "cryptomining."
&lt;/h2&gt;

&lt;p&gt;Ok, easy fix. Just switch to my backup server, right?&lt;br&gt;
Got mined again.&lt;br&gt;
"Ok FINE. I'll just switch hosting providers."&lt;br&gt;
Migrated ALL my products. Took forever. Had to — I needed to keep everything online.&lt;br&gt;
Got mined again.&lt;br&gt;
This was my life for 10 days:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get mined&lt;/li&gt;
&lt;li&gt;Migrate all products to keep them live&lt;/li&gt;
&lt;li&gt;Rebuild the server from scratch&lt;/li&gt;
&lt;li&gt;Feel relieved&lt;/li&gt;
&lt;li&gt;Go to step 1
I did this 5 times. I am not a fast learner apparently. 😅
Finally I started to think maybe the problem isn't the servers.
I scanned my local machine.
Every single .exe file: infected. 🫠
The culprits? A cracked audio plugin. And one time I couldn't install Windows myself so I let a stranger remote into my PC.
Classic.
Fresh Windows install. Fresh servers. Hardened everything.
Ran clean for 2 whole days. I was so proud of myself.
Then I deployed a new project and installed one package.
You already know what happened.
The lowest point:
I woke up at 3am in a panic, jumped out of bed, sat down at my computer, and started frantically pressing keys.
The screen wouldn't turn on.
Because I was still asleep. It was a dream.
I have been dreaming about getting cryptomined for over a week straight.
"My therapist says this is normal. I don't have a therapist."
Anyway. Here's my "never again" checklist.
25 items. Each one is a scar.
🔒 Server hardening:
✅ Dedicated user, root login disabled
✅ Ed25519 key auth, password login off
✅ SSH on a non-standard port
✅ UFW firewall, only necessary ports open
✅ IP whitelist, only my fixed IP can connect
✅ Fail2ban against brute force
✅ Automatic security updates
📦 Deploy pipeline:
✅ npm install --ignore-scripts
✅ Review package.json for suspicious packages
✅ npm audit, fix all vulnerabilities
✅ Check for xmrig/scanner_linux and other malware
✅ npx tsc --noEmit
✅ npm run build
✅ pm2 restart
🗄️ Database:
✅ MySQL bound to 127.0.0.1 only
✅ Separate DB user per product
✅ Passwords hashed with bcrypt
🛡️ App:
✅ JWT auth (jose)
✅ Full HTTPS + wildcard cert
✅ Cloudflare proxy hiding real IP
✅ Docker container isolation
✅ PM2 process management
And yes, I back up to 2 external drives now.
Immediately after every deploy.
Don't @ me
---
Most security guides are written by people who read about attacks.
Mine was written by someone who lived through 5 of them in 10 days.
---
I'm a self-taught solo developer from Inner Mongolia.
Two months ago I didn't know what cryptomining was.
Now I've survived it 5 times and I'm still shipping.
Some days that's enough. 😅&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>How I run 10 SaaS products on $44/month (Nginx + PM2 + 2 VPS)</title>
      <dc:creator>Lyra_TinyStrack</dc:creator>
      <pubDate>Mon, 06 Apr 2026 11:42:58 +0000</pubDate>
      <link>https://dev.to/dd_aa_abaee26be1a34448721/how-i-run-10-saas-products-on-44month-nginx-pm2-2-vps-288l</link>
      <guid>https://dev.to/dd_aa_abaee26be1a34448721/how-i-run-10-saas-products-on-44month-nginx-pm2-2-vps-288l</guid>
      <description>&lt;p&gt;I'm a self-taught developer who shipped 10 SaaS products in 25 days. Here's the exact infrastructure setup that keeps my costs at $44/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2 VPS servers (Hong Kong, ~$17/month total)&lt;/li&gt;
&lt;li&gt;Nginx reverse proxy&lt;/li&gt;
&lt;li&gt;PM2 process manager&lt;/li&gt;
&lt;li&gt;MySQL (Docker)&lt;/li&gt;
&lt;li&gt;Next.js 15 + TypeScript&lt;/li&gt;
&lt;li&gt;Claude subscription (~$20/month)&lt;/li&gt;
&lt;li&gt;3 domains (~$2.5/month)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One Domain, 8 Products
&lt;/h2&gt;

&lt;p&gt;Instead of buying a domain per product, I use subdomains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;testimonialwall&lt;/span&gt;.&lt;span class="n"&gt;saaslic&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; → &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="m"&gt;3004&lt;/span&gt;
&lt;span class="n"&gt;mailtrace&lt;/span&gt;.&lt;span class="n"&gt;saaslic&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; → &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="m"&gt;3001&lt;/span&gt;
&lt;span class="n"&gt;statuspulse&lt;/span&gt;.&lt;span class="n"&gt;saaslic&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; → &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="m"&gt;3002&lt;/span&gt;
&lt;span class="n"&gt;feedbackbox&lt;/span&gt;.&lt;span class="n"&gt;saaslic&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt; → &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="m"&gt;3003&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nginx routes each subdomain to the right PM2 process. One SSL wildcard cert covers all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  PM2 Config
&lt;/h2&gt;

&lt;p&gt;Each product runs as an independent PM2 process. If one crashes, others keep running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 start npm &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"testimonialwall"&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; start
pm2 start npm &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"mailtrace"&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; start
&lt;span class="c"&gt;# etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  MySQL in Docker
&lt;/h2&gt;

&lt;p&gt;One Docker container runs MySQL. Each product gets its own database and user. Isolated, easy to backup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; mysql mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
CREATE DATABASE testimonialwall_db&lt;span class="p"&gt;;&lt;/span&gt;
CREATE USER &lt;span class="s1"&gt;'tw_user'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt; IDENTIFIED BY &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
GRANT ALL ON testimonialwall_db.&lt;span class="k"&gt;*&lt;/span&gt; TO &lt;span class="s1"&gt;'tw_user'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backup Script
&lt;/h2&gt;

&lt;p&gt;One script backs up all databases + code + SSL certs into a single tar.gz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash ~/scripts/backup.sh
&lt;span class="c"&gt;# Output: backup_2026-04-06.tar.gz (1.5G)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;You don't need Vercel + PlanetScale + Clerk + Resend. A $8/month VPS and some patience gets you further than you think.&lt;/p&gt;

&lt;p&gt;Total cost breakdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2x VPS: $17/month&lt;/li&gt;
&lt;li&gt;Claude: $20/month
&lt;/li&gt;
&lt;li&gt;Domains: $2.5/month&lt;/li&gt;
&lt;li&gt;X Premium: $4/month&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $43.5/month&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;10 products. All live. All on this setup.&lt;/p&gt;

&lt;p&gt;tinystrack.com&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>startup</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
