<?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: Waqas Ahmed Waseer</title>
    <description>The latest articles on DEV Community by Waqas Ahmed Waseer (@samii).</description>
    <link>https://dev.to/samii</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%2F4158545%2F521d6181-362e-4d67-98ca-7e6872c3b7ff.png</url>
      <title>DEV Community: Waqas Ahmed Waseer</title>
      <link>https://dev.to/samii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samii"/>
    <language>en</language>
    <item>
      <title>Agencies Are Overpaying for SaaS: I Replaced 4 Subscriptions With 1 (Here's the Math)</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sun, 04 Oct 2026 07:52:56 +0000</pubDate>
      <link>https://dev.to/samii/agencies-are-overpaying-for-saas-i-replaced-4-subscriptions-with-1-heres-the-math-44pn</link>
      <guid>https://dev.to/samii/agencies-are-overpaying-for-saas-i-replaced-4-subscriptions-with-1-heres-the-math-44pn</guid>
      <description>&lt;p&gt;If you run an agency or freelance practice, add up your SaaS subscriptions. I'll wait.&lt;/p&gt;

&lt;p&gt;For most agencies I talk to, the stack looks something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lead database&lt;/strong&gt; (Apollo or similar) — ~$99/mo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold email tool&lt;/strong&gt; (Instantly or similar) — ~$97/mo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp/chat automation&lt;/strong&gt; (ManyChat or similar) — ~$45/mo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO toolkit&lt;/strong&gt; (Ahrefs or similar) — ~$129/mo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's &lt;strong&gt;~$370/month&lt;/strong&gt; — over $4,400 a year — before you count the CRM, the scheduler, and the five other tools everyone forgets about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hidden cost nobody talks about
&lt;/h2&gt;

&lt;p&gt;It's not just the money. It's the &lt;strong&gt;tab-switching tax&lt;/strong&gt;: leads in one tool, sequences in another, chat in a third, rankings in a fourth. Every handoff between tools is a place where follow-ups die and data goes stale.&lt;/p&gt;

&lt;p&gt;I learned this the hard way running outreach for clients. We'd pull leads from one platform, enrich them somewhere else, upload CSVs into the email tool, then manually copy conversations into the CRM. It worked, but it was fragile — and every new client meant re-building the same Rube Goldberg machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What consolidation actually looks like
&lt;/h2&gt;

&lt;p&gt;The fix isn't "fewer tools" for the sake of it. It's finding platforms that cover &lt;strong&gt;adjacent jobs&lt;/strong&gt; in your workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lead sourcing → outreach&lt;/strong&gt; should be one motion, not two tools. If your lead database and your email sequencer are separate, you're exporting and importing CSVs forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email + WhatsApp&lt;/strong&gt; belong together. Prospects reply where they want; your follow-up system should meet them there instead of forcing everything into email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO + outreach&lt;/strong&gt; share data. The keywords you track and the prospects you contact are part of the same growth loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When these live in one place, the compounding effect is real: a lead you find in the morning can be in a personalized sequence by lunch, with replies landing in the same CRM where you track the deal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The math
&lt;/h2&gt;

&lt;p&gt;This is why I started building &lt;a href="https://flowmaticx.com" rel="noopener noreferrer"&gt;FlowMaticX&lt;/a&gt; — an all-in-one growth platform that combines a 275M verified lead database, cold email + WhatsApp outreach, SEO audits, automation flows, and a CRM in one subscription.&lt;/p&gt;

&lt;p&gt;Compare the stacks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Fragmented stack&lt;/th&gt;
&lt;th&gt;Consolidated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lead database&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cold email&lt;/td&gt;
&lt;td&gt;$97/mo&lt;/td&gt;
&lt;td&gt;included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp automation&lt;/td&gt;
&lt;td&gt;$45/mo&lt;/td&gt;
&lt;td&gt;included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO toolkit&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;td&gt;included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$370/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;one subscription&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Even if you only replace two of the four, you're saving ~$200/month — $2,400 a year — per seat. For a 4-person agency, that's nearly $10K a year back in your pocket.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do this week
&lt;/h2&gt;

&lt;p&gt;If your stack is sprawling, do a 30-minute audit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every marketing/sales subscription and its monthly cost.&lt;/li&gt;
&lt;li&gt;Mark which ones overlap (lead data in two places? messaging in three?).&lt;/li&gt;
&lt;li&gt;Pick the biggest overlap and trial a consolidated alternative for one client campaign.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You don't have to rip everything out at once. But every redundant subscription you kill is margin you keep.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Waqas, founder of &lt;a href="https://flowmaticx.com" rel="noopener noreferrer"&gt;FlowMaticX&lt;/a&gt; — we help agencies and freelancers replace Apollo, Instantly, ManyChat, and Ahrefs with one platform. Happy to answer questions about outreach stacks in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>saas</category>
      <category>marketing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>WhatsApp Business API Alternative: Self-Host a Free WhatsApp API with WaSphere (No Meta Approval)</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 22:16:48 +0000</pubDate>
      <link>https://dev.to/samii/whatsapp-business-api-alternative-self-host-a-free-whatsapp-api-with-wasphere-no-meta-approval-16n0</link>
      <guid>https://dev.to/samii/whatsapp-business-api-alternative-self-host-a-free-whatsapp-api-with-wasphere-no-meta-approval-16n0</guid>
      <description>&lt;p&gt;The official WhatsApp Business API is powerful, but it comes with real friction: Meta approval, a Business Service Provider in the middle, per-message pricing, and your messaging data flowing through someone else's infrastructure. If you would rather own your WhatsApp stack end to end, the open-source route is worth a serious look.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WaSphere&lt;/strong&gt; (&lt;a href="https://wasphere.com" rel="noopener noreferrer"&gt;wasphere.com&lt;/a&gt;) is a free, MIT-licensed, self-hosted WhatsApp API platform. It gives you a REST API, multi-session support, a web dashboard, and HMAC-signed webhooks — with no Meta approval and no per-message fees. You run it on your own server with Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why self-host your WhatsApp API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Meta approval process&lt;/strong&gt; — connect a regular WhatsApp number by scanning a QR code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-message fees&lt;/strong&gt; — your server, your costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your data stays with you&lt;/strong&gt; — sessions and contacts never leave your infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full API control&lt;/strong&gt; — REST endpoints, webhooks, and scoped API keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get running in minutes
&lt;/h2&gt;

&lt;p&gt;You need Docker Engine 24+ and Docker Compose v2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/wasphere/wasphere.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wasphere
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# generate each secret, e.g.: openssl rand -hex 32&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the dashboard at &lt;code&gt;http://localhost:3004&lt;/code&gt;, register the first admin account, then connect a number under &lt;strong&gt;Sessions&lt;/strong&gt; by scanning the QR code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Send your first message
&lt;/h2&gt;

&lt;p&gt;WaSphere exposes a REST API covering 14 message types — text, image, video, audio, documents, stickers, buttons, lists, polls, reactions, location, contacts, and more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:3000/workspaces/&lt;span class="o"&gt;{&lt;/span&gt;workspaceId&lt;span class="o"&gt;}&lt;/span&gt;/proxy/api/sessions/&lt;span class="o"&gt;{&lt;/span&gt;sessionId&lt;span class="o"&gt;}&lt;/span&gt;/messages/text &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer wsk_your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "to": "12125550100", "text": "Hello from WaSphere!" }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every inbound message and delivery update arrives on your webhook, HMAC-signed so you can verify it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is it for?
&lt;/h2&gt;

&lt;p&gt;Developers building chatbots, order and invoice notifications, CRM integrations, and hosting resellers who want a WhatsApp gateway they fully control. There is a seeded live demo at &lt;a href="https://demo.wasphere.com" rel="noopener noreferrer"&gt;demo.wasphere.com&lt;/a&gt; if you want to click around before self-hosting.&lt;/p&gt;

&lt;p&gt;If the official API's approval process and pricing have been blocking you, a self-hosted WhatsApp API like WaSphere is a practical alternative: free, open source, and entirely yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href="https://wasphere.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt; · &lt;a href="https://github.com/wasphere/wasphere" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://demo.wasphere.com" rel="noopener noreferrer"&gt;Live demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>whatsapp</category>
      <category>api</category>
      <category>opensource</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>I Replaced Apollo, Instantly, ManyChat, and Ahrefs With One Platform — Here's What I Learned</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 22:13:51 +0000</pubDate>
      <link>https://dev.to/samii/i-replaced-apollo-instantly-manychat-and-ahrefs-with-one-platform-heres-what-i-learned-3igc</link>
      <guid>https://dev.to/samii/i-replaced-apollo-instantly-manychat-and-ahrefs-with-one-platform-heres-what-i-learned-3igc</guid>
      <description>&lt;p&gt;I'm Waqas, founder of FlowMaticX. For the last year I've watched agencies burn $300-$500/month on a stack of tools that don't talk to each other: Apollo for lead data, Instantly for cold email, ManyChat for WhatsApp, Ahrefs for SEO — plus a CRM duct-taped on top.&lt;/p&gt;

&lt;p&gt;So I built the alternative I wished existed: one workspace that does all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What FlowMaticX actually does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lead scraping tool&lt;/strong&gt;: 275M+ verified B2B leads from Google Maps, Instagram, TikTok, Facebook, Yellow Pages and more. Every email is verified before it costs a credit — bounced leads are free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold email software&lt;/strong&gt;: AI-personalized sequences in 19 languages, with an email warmup system and an email deliverability tool dashboard that shows why you land in inbox or spam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp automation for agencies&lt;/strong&gt;: AI chatbot auto-replies, multi-step sequences, QR-code connect in under 60 seconds, and a 3-panel inbox. No WhatsApp Business API required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO audits&lt;/strong&gt;: 200+ technical checks with real Google Search Console data and white-label PDF reports for clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales prospecting software + CRM&lt;/strong&gt;: pipeline with auto-advance, a visual automation builder with 135+ node types, and GHL integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I learned building it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deliverability is the real product.&lt;/strong&gt; Anyone can send email; landing in the inbox is the hard part. We built warmup and domain-health monitoring first, campaigns second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp-first markets are underserved.&lt;/strong&gt; In Pakistan, the Gulf, and LatAm, deals close on WhatsApp, not email. Most lead generation software ignores this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification before billing changes behavior.&lt;/strong&gt; When bounced leads cost $0, users trust the data and actually use their credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agencies want white-label everything.&lt;/strong&gt; Custom domain, branded reports, client-facing dashboards — that's what makes an all-in-one agency software sellable as a service.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're running an agency or freelancing and paying for five tools, it's worth a look: &lt;a href="https://flowmaticx.com" rel="noopener noreferrer"&gt;FlowMaticX&lt;/a&gt; — a genuine Apollo alternative for teams that want prospecting to closed deal in one login.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the build — deliverability, WhatsApp automation, or the scraping pipeline.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>marketing</category>
      <category>startup</category>
      <category>ai</category>
    </item>
    <item>
      <title>Build a WhatsApp chatbot with n8n + WaSphere (self-hosted, no Meta approval)</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 22:00:19 +0000</pubDate>
      <link>https://dev.to/samii/build-a-whatsapp-chatbot-with-n8n-wasphere-self-hosted-no-meta-approval-cmi</link>
      <guid>https://dev.to/samii/build-a-whatsapp-chatbot-with-n8n-wasphere-self-hosted-no-meta-approval-cmi</guid>
      <description>&lt;p&gt;Want a WhatsApp chatbot without going through Meta's business verification, template approvals, and per-conversation pricing? Combine &lt;strong&gt;n8n&lt;/strong&gt; (the open-source workflow automation tool) with &lt;strong&gt;WaSphere&lt;/strong&gt; — an open-source (MIT), self-hosted WhatsApp API — and you get a fully self-hosted chatbot stack on your own server.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WaSphere&lt;/strong&gt; connects to WhatsApp (scan a QR code once) and exposes a local REST API plus HMAC-signed webhooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; receives inbound messages via a Webhook trigger, runs your bot logic, and calls WaSphere's API to send replies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Meta approval, no per-message platform fees, and your conversation data never leaves your infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Deploy WaSphere
&lt;/h2&gt;

&lt;p&gt;Any VPS with Docker works. This is the actual quick start from the &lt;a href="https://github.com/wasphere/wasphere" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/wasphere/wasphere.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wasphere
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open the dashboard at &lt;code&gt;http://your-server:3004&lt;/code&gt;, register your first admin account, set the WA Server URL to &lt;code&gt;http://wa-server:3001&lt;/code&gt; (plus your &lt;code&gt;WA_TOKEN&lt;/code&gt;) under Settings, and pair your number under &lt;strong&gt;Sessions&lt;/strong&gt; by scanning the QR code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Create the n8n webhook trigger
&lt;/h2&gt;

&lt;p&gt;In n8n, add a &lt;strong&gt;Webhook&lt;/strong&gt; node — this gives you a URL like &lt;code&gt;https://your-n8n/webhook/whatsapp-in&lt;/code&gt;. In WaSphere, point your webhook settings at that URL. Every inbound message and status event now arrives in n8n as JSON, signed with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;X-WaSphere-Signature: v1,sha256=&amp;lt;hmac&amp;gt;
X-WaSphere-Timestamp: &amp;lt;unix-seconds&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The signature is the HMAC-SHA256 of &lt;code&gt;{timestamp}.{rawBody}&lt;/code&gt; with your webhook secret — verify it in a Function/Code node before trusting the payload.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add your bot logic
&lt;/h2&gt;

&lt;p&gt;Route on the message text with a &lt;strong&gt;Switch&lt;/strong&gt; node, look up answers in a database or an LLM call, then send the reply.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Send replies through WaSphere
&lt;/h2&gt;

&lt;p&gt;Add an &lt;strong&gt;HTTP Request&lt;/strong&gt; node:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method: &lt;code&gt;POST&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;URL: your WaSphere workspace send endpoint (the interactive API reference at &lt;code&gt;/docs/wa-server&lt;/code&gt; on your own instance documents every route)&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer wsk_…&lt;/code&gt; (your WaSphere API key)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WaSphere supports 14 message types — text, image, video, audio, documents, stickers, location, contact, polls, buttons and lists, reactions — so your bot isn't limited to plain text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats the Meta Cloud API route
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Meta approval&lt;/strong&gt; — pair a number and start building&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free WhatsApp API&lt;/strong&gt; — your only cost is the VPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-session&lt;/strong&gt; — several numbers from one WaSphere deployment, one n8n workflow each&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realtime team inbox&lt;/strong&gt; — when the bot can't answer, a human takes over in WaSphere's dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source&lt;/strong&gt; — both n8n and WaSphere are auditable and self-hostable&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live demo: &lt;a href="https://demo.wasphere.com" rel="noopener noreferrer"&gt;demo.wasphere.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://wasphere.com" rel="noopener noreferrer"&gt;wasphere.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/wasphere/wasphere" rel="noopener noreferrer"&gt;github.com/wasphere/wasphere&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've been putting off WhatsApp automation because of the Meta approval maze, this is the shortcut: a self-hosted WhatsApp API plus n8n, deployed before your coffee cools.&lt;/p&gt;

</description>
      <category>whatsapp</category>
      <category>selfhosted</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Self-host your own WhatsApp API with WaSphere and Docker</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 09:21:57 +0000</pubDate>
      <link>https://dev.to/samii/self-host-your-own-whatsapp-api-with-wasphere-and-docker-5flf</link>
      <guid>https://dev.to/samii/self-host-your-own-whatsapp-api-with-wasphere-and-docker-5flf</guid>
      <description>&lt;p&gt;Paying per message for the WhatsApp Business API gets expensive fast, and the approval process is slow. If you want a WhatsApp API you fully own — your server, your data, no per-message fees — self-hosting is the answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wasphere.com" rel="noopener noreferrer"&gt;WaSphere&lt;/a&gt; is an open-source (MIT), self-hosted WhatsApp API and developer platform I built for exactly this. It gives you multi-session WhatsApp, a REST API, HMAC-signed webhooks, 14 message types, and a realtime team inbox — all deployed with one &lt;code&gt;docker compose up -d&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this tutorial I'll take you from zero to sending your first WhatsApp message through your own API in about 10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-session&lt;/strong&gt; — run many WhatsApp numbers from one deployment, each with its own API key scope and webhook endpoint. QR-based pairing in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API&lt;/strong&gt; — send across 14 message types: text, image, video, audio/voice notes, documents, stickers, GIFs, view-once media, buttons, lists, polls, reactions, locations, and contact cards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HMAC-signed webhooks&lt;/strong&gt; — every delivery is signed (&lt;code&gt;X-WaSphere-Signature: v1,sha256=&amp;lt;hmac&amp;gt;&lt;/code&gt; over &lt;code&gt;{timestamp}.{rawBody}&lt;/code&gt;), with per-webhook secrets, retries, and SSRF-guarded delivery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realtime team inbox&lt;/strong&gt; — a two-pane inbox in the dashboard with roles, a contact book CRM, tags/notes, and CSV import/export.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security-first&lt;/strong&gt; — scoped API keys (12 permission scopes), Argon2id-hashed keys, AES-256-GCM encrypted secrets, and a full audit log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-ban controls&lt;/strong&gt; — per-session send delays, typing simulation, and rate limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is two cleanly separated services: a Next.js dashboard with a NestJS API, and a WA Server (NestJS + Baileys) that isolates the WhatsApp engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker Engine 24+ and Docker Compose v2&lt;/li&gt;
&lt;li&gt;A server or your local machine (for a public deployment, bring your own reverse proxy for TLS)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1 — Deploy
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/wasphere/wasphere.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wasphere
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Set the secrets in .env — generate each with: openssl rand -hex 32&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3004&lt;/code&gt;, register the first (admin) account, then go to Settings → WA Server and set the URL to &lt;code&gt;http://wa-server:3001&lt;/code&gt; plus your &lt;code&gt;WA_TOKEN&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 — Connect a number
&lt;/h2&gt;

&lt;p&gt;In the dashboard, create a session and scan the QR code with WhatsApp. The session goes active instantly — no approval process, no waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Send your first message
&lt;/h2&gt;

&lt;p&gt;Create a scoped API key in the dashboard, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://wa.your-domain.com/api/messages/send &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer wsk_your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "session": "my-business",
    "to": "15551234567",
    "text": "Hello from my own WhatsApp API!"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response: &lt;code&gt;200 OK&lt;/code&gt; with a &lt;code&gt;messageId&lt;/code&gt;. That's it — you're sending WhatsApp messages from your own infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 — Receive webhooks
&lt;/h2&gt;

&lt;p&gt;Register a webhook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.your-domain.com/workspaces/&lt;span class="o"&gt;{&lt;/span&gt;workspaceId&lt;span class="o"&gt;}&lt;/span&gt;/webhooks &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer wsk_your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "name": "my-app", "url": "https://my-app.com/webhook/wa", "events": ["message.received"] }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the signature in your receiver (Node.js):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;crypto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-wasphere-signature&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// v1,sha256=&amp;lt;hmac&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-wasphere-timestamp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;v1,sha256=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createHmac&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sha256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timingSafeEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern works great for automation — I use it with n8n workflows for order notifications and support routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why self-host instead of the Business API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; — no per-message fees; you pay for your server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control&lt;/strong&gt; — your sessions and contacts never leave your infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No approval queues&lt;/strong&gt; — connect a number and start building.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hackable&lt;/strong&gt; — it's MIT licensed. Fork it, extend it, ship it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full source is on GitHub: &lt;a href="https://github.com/wasphere/wasphere" rel="noopener noreferrer"&gt;github.com/wasphere/wasphere&lt;/a&gt;. There's a seeded live demo at &lt;a href="https://demo.wasphere.com" rel="noopener noreferrer"&gt;demo.wasphere.com&lt;/a&gt;, and full docs on &lt;a href="https://wasphere.com" rel="noopener noreferrer"&gt;wasphere.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you self-host your messaging stack, give the repo a star — and let me know what you build with it.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>opensource</category>
      <category>whatsapp</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I actually test AI tools before recommending them</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 05:27:45 +0000</pubDate>
      <link>https://dev.to/samii/how-i-actually-test-ai-tools-before-recommending-them-1eih</link>
      <guid>https://dev.to/samii/how-i-actually-test-ai-tools-before-recommending-them-1eih</guid>
      <description>&lt;p&gt;There's a new AI tool launching every day, and most "reviews" online are just reworded press releases. When someone asks me whether a tool is worth trying, I don't answer from the landing page — I test it myself first. Here's the process I follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. I start with a real task, not the demo.&lt;/strong&gt;&lt;br&gt;
Marketing demos always look smooth. So I pick one actual job I'd normally do — drafting a post, summarizing research, debugging a snippet — and run the tool through it. If it can't handle my real workflow, the demo doesn't matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. I check where the data goes.&lt;/strong&gt;&lt;br&gt;
Before signing up with anything more than an email, I look at the privacy policy and settings. Does it train on my inputs? Can I delete my data? A good tool makes this easy to find.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. I compare it against what I already use.&lt;/strong&gt;&lt;br&gt;
New doesn't mean better. I'll run the same task in the new tool and in my current one, side by side, and note where each wins on speed, accuracy, and cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. I give it a week, not an hour.&lt;/strong&gt;&lt;br&gt;
First impressions lie. I use the tool for at least a week in normal work before I form an opinion worth sharing.&lt;/p&gt;

&lt;p&gt;Only tools that survive all four steps make it into what I publish — you can read my full comparisons at &lt;a href="https://techriseups.com" rel="noopener noreferrer"&gt;TechRiseUPS&lt;/a&gt;. If a tool doesn't earn a recommendation, I say that too. Being honest when something isn't worth your time is the whole point.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>Hello DEV — I run TechRiseUps, an independent tech news &amp; AI tool comparison site</title>
      <dc:creator>Waqas Ahmed Waseer</dc:creator>
      <pubDate>Sat, 03 Oct 2026 00:13:24 +0000</pubDate>
      <link>https://dev.to/samii/hello-dev-i-run-techriseups-an-independent-tech-news-ai-tool-comparison-site-cdl</link>
      <guid>https://dev.to/samii/hello-dev-i-run-techriseups-an-independent-tech-news-ai-tool-comparison-site-cdl</guid>
      <description>&lt;p&gt;Hey DEV! I'm Samii, and I run &lt;a href="https://techriseups.com" rel="noopener noreferrer"&gt;TechRiseUps&lt;/a&gt; — an independent tech news site covering AI &amp;amp; ML, startups, cloud, developer tools, SEO, and honest side-by-side tool comparisons, plus a free Monday tech brief.&lt;/p&gt;

&lt;p&gt;A bit about why I started it: I was spending hours every week comparing AI tools for my own work (writing, SEO, research) and kept running into sponsored "top 10" lists that all said the same thing. So I started publishing the comparisons I wished existed — hands-on, opinionated, and free of affiliate fluff.&lt;/p&gt;

&lt;p&gt;What I'm working on right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Honest AI writing-tool comparisons (ChatGPT vs Claude vs Gemini vs DeepSeek, free-tier limits included)&lt;/li&gt;
&lt;li&gt;Startup stories and practical SEO / dev-tool coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I'd love from this community: I'm always looking for tools worth testing and topics worth covering. If there's an AI tool or dev workflow you think deserves an honest review, tell me in the comments.&lt;/p&gt;

&lt;p&gt;Glad to be here — and happy to trade notes on AI tooling, SEO, or tech publishing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>news</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
