<?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: WaseemAnjum</title>
    <description>The latest articles on DEV Community by WaseemAnjum (@fabwaseem).</description>
    <link>https://dev.to/fabwaseem</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%2F1255115%2F070a92c7-5d04-43a4-8130-427098560190.png</url>
      <title>DEV Community: WaseemAnjum</title>
      <link>https://dev.to/fabwaseem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fabwaseem"/>
    <language>en</language>
    <item>
      <title>Why I Stopped Building a Generic Link-in-Bio Tool (And Started Over)</title>
      <dc:creator>WaseemAnjum</dc:creator>
      <pubDate>Sun, 09 Aug 2026 04:37:07 +0000</pubDate>
      <link>https://dev.to/fabwaseem/why-i-stopped-building-a-generic-link-in-bio-tool-and-started-over-3o5n</link>
      <guid>https://dev.to/fabwaseem/why-i-stopped-building-a-generic-link-in-bio-tool-and-started-over-3o5n</guid>
      <description>&lt;p&gt;A few months ago I went down the classic indie-hacker rabbit hole: "link-in-bio" tools. You've seen them — Linktree, Beacons, a dozen clones. A vertical stack of pill-shaped buttons on a phone screen. I figured it'd be a quick weekend build: auth, a drag-to-reorder list, a public page, done.&lt;/p&gt;

&lt;p&gt;Then I actually looked at who uses these pages.&lt;/p&gt;

&lt;p&gt;A wedding photographer's bio link and a Solidity developer's bio link were, structurally, the exact same page. Same layout. Same type scale. Same "add a block" mental model. The only thing that changed between a musician, a doctor, and a SaaS founder was the hex code on the buttons.&lt;/p&gt;

&lt;p&gt;That felt wrong. A photographer's first impression should probably be a portfolio grid, not a list of hyperlinks. A developer's page should probably look like it was made by someone who ships code, not someone who picked a template. A doctor's booking page needs to read as trustworthy in about half a second, not "creative."&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea: ask the profession first
&lt;/h2&gt;

&lt;p&gt;So I rebuilt the whole thing around one decision at signup: what do you do?&lt;/p&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fua4nor52a79ceb0exr4j.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fua4nor52a79ceb0exr4j.jpg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cladly.bio/" rel="noopener noreferrer"&gt;Cladly &lt;/a&gt;asks that up front, then hands you a "skin" — not a color theme, an actual different layout, typography system, motion, and set of starter link types built for that craft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminal (developers): dark, monospace, repo-and-changelog friendly&lt;/li&gt;
&lt;li&gt;Atelier (designers): portfolio-first, editorial grid, big imagery&lt;/li&gt;
&lt;li&gt;Encore (musicians): cover art hierarchy, listen/stream buttons, tour dates&lt;/li&gt;
&lt;li&gt;Rounds (doctors/clinicians): sober palette, trust signals, booking front and center&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are 14 of these right now, and the goal isn't "more themes," it's fewer wrong defaults. If you're a developer, you shouldn't have to fight a template built for a lifestyle influencer to make your page look credible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was actually hard to build
&lt;/h2&gt;

&lt;p&gt;The interesting engineering problem wasn't the link list — it was making "skin" a first-class concept instead of a CSS variable swap. Each skin owns its own layout primitives, spacing scale, and animation choices, but they all still read from the same underlying content model, so switching skins doesn't lose your data. That separation (content vs. presentation vs. profession-specific layout logic) ended up being most of the actual architecture work.&lt;/p&gt;

&lt;p&gt;The second thing was analytics without the usual tracking-pixel tax. Every bio-link click is a "first touch" moment, often from someone who's never seen your domain before — I didn't want to make that experience worse by dropping third-party trackers on it. So views, clicks, CTR, top links, and peak hours are all computed server-side from the request itself, no pixel, no cookie banner required for basic stats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's at
&lt;/h2&gt;

&lt;p&gt;It's free to start — one page, unlimited links, five skins, 7-day analytics — because the whole premise (profession-aware defaults) only proves itself if enough different kinds of people actually try it. Pro adds the rest of the skins, AI-assisted setup, and longer analytics history.&lt;/p&gt;

&lt;p&gt;If you manage a personal brand, a portfolio, or a team's bio page and you've been mildly annoyed that every one of these tools makes you look like everyone else, I'd genuinely like your feedback: &lt;a href="https://www.cladly.bio/" rel="noopener noreferrer"&gt;cladly.bio&lt;/a&gt; — takes about three minutes to get a page live.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the skin architecture, the analytics pipeline, or the roadmap in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>startup</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🎥 Building a Scalable Social Media Video Downloader: Open Source NestJS + Next.js Project</title>
      <dc:creator>WaseemAnjum</dc:creator>
      <pubDate>Sun, 02 Mar 2025 09:56:39 +0000</pubDate>
      <link>https://dev.to/fabwaseem/building-a-scalable-social-media-video-downloader-open-source-nestjs-nextjs-project-egm</link>
      <guid>https://dev.to/fabwaseem/building-a-scalable-social-media-video-downloader-open-source-nestjs-nextjs-project-egm</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Introducing Social Media Video Downloader
&lt;/h1&gt;

&lt;p&gt;Hey DEV community! 👋 I'm excited to share my latest open-source project: a full-stack video downloader solution that lets you download videos from major social media platforms with enterprise-grade features.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 What's Special About This Project?
&lt;/h2&gt;

&lt;p&gt;Unlike typical video downloaders, this project offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Grade Security&lt;/strong&gt;: API key authentication, rate limiting, IP whitelisting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Platform Support&lt;/strong&gt;: YouTube, Facebook, Instagram, TikTok, Twitter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Stack&lt;/strong&gt;: NestJS backend + Next.js 14 frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Progress&lt;/strong&gt;: Live download progress tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Safety&lt;/strong&gt;: Full TypeScript support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Dependencies&lt;/strong&gt;: Self-managing binary dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Tech Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backend (NestJS)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;PostgreSQL with Prisma&lt;/li&gt;
&lt;li&gt;yt-dlp integration&lt;/li&gt;
&lt;li&gt;Swagger API docs&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;CORS protection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend (Next.js 14)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modern UI with dark/light theme&lt;/li&gt;
&lt;li&gt;Server-side rendering&lt;/li&gt;
&lt;li&gt;Real-time progress updates&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ Features Breakdown
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Video Platforms Support
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YouTube&lt;/strong&gt;: Videos, playlists, shorts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facebook&lt;/strong&gt;: Public/private videos, stories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram&lt;/strong&gt;: Posts, reels, IGTV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TikTok&lt;/strong&gt;: Videos without watermark&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: Tweets, spaces recordings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Download Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quality selection (up to 4K)&lt;/li&gt;
&lt;li&gt;Format conversion&lt;/li&gt;
&lt;li&gt;Audio extraction&lt;/li&gt;
&lt;li&gt;Custom output paths&lt;/li&gt;
&lt;li&gt;Progress tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API key authentication&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;IP whitelisting&lt;/li&gt;
&lt;li&gt;Download duration limits&lt;/li&gt;
&lt;li&gt;Usage analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backend Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the backend&lt;/span&gt;
git clone https://github.com/your-username/social-media-video-downloader-api
&lt;span class="nb"&gt;cd &lt;/span&gt;social-media-video-downloader-api

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Setup environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env

&lt;span class="c"&gt;# Start development server&lt;/span&gt;
pnpm run start:dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Frontend Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the frontend&lt;/span&gt;
git clone https://github.com/fabwaseem/Social-Media-Video-Downloader
&lt;span class="nb"&gt;cd &lt;/span&gt;Social-Media-Video-Downloader

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Setup environment&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"NEXT_PUBLIC_API_URL=http://localhost:3001"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env.local

&lt;span class="c"&gt;# Start development server&lt;/span&gt;
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎨 Screenshots
&lt;/h2&gt;

&lt;p&gt;[Add your application screenshots here]&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Architecture Overview
&lt;/h2&gt;

&lt;p&gt;The project follows a clean, modular architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend                          Frontend
┌─────────────┐                ┌─────────────┐
│   API Layer │◄───REST API────│    Next.js  │
├─────────────┤                ├─────────────┤
│  Services   │                │    React    │
├─────────────┤                ├─────────────┤
│   Prisma    │                │    State    │
└─────────────┘                └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🤝 Contributing
&lt;/h2&gt;

&lt;p&gt;This project is open source and welcomes contributions! Here's how you can help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🍴 Fork the repositories&lt;/li&gt;
&lt;li&gt;🔧 Create your feature branch&lt;/li&gt;
&lt;li&gt;💻 Add your features&lt;/li&gt;
&lt;li&gt;🔍 Test your changes&lt;/li&gt;
&lt;li&gt;📤 Create a Pull Request&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🎯 Future Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Add more platform support&lt;/li&gt;
&lt;li&gt;[ ] Implement batch downloading&lt;/li&gt;
&lt;li&gt;[ ] Add download scheduling&lt;/li&gt;
&lt;li&gt;[ ] Create browser extension&lt;/li&gt;
&lt;li&gt;[ ] Add more output formats&lt;/li&gt;
&lt;li&gt;[ ] Implement user dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/your-username/social-media-video-downloader-api" rel="noopener noreferrer"&gt;Backend Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fabwaseem/Social-Media-Video-Downloader" rel="noopener noreferrer"&gt;Frontend Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Why I Built This
&lt;/h2&gt;

&lt;p&gt;I created this project to provide a robust, enterprise-grade solution for video downloading that's both secure and scalable. The existing solutions either lacked security features or weren't suitable for production use.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 Show Your Support
&lt;/h2&gt;

&lt;p&gt;If you find this project useful, please consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Starring the repositories&lt;/li&gt;
&lt;li&gt;🔄 Sharing with your network&lt;/li&gt;
&lt;li&gt;🐛 Reporting issues&lt;/li&gt;
&lt;li&gt;💡 Suggesting features&lt;/li&gt;
&lt;li&gt;🤝 Contributing code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📬 Get in Touch
&lt;/h2&gt;

&lt;p&gt;Have questions or suggestions? Feel free to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an issue&lt;/li&gt;
&lt;li&gt;Create a pull request&lt;/li&gt;
&lt;li&gt;Find me on &lt;a href="https://github.com/fabwaseem" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow me here on DEV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's make video downloading better, together! 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  opensource #typescript #nodejs #webdev
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
