<?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: qrstudiovault</title>
    <description>The latest articles on DEV Community by qrstudiovault (@qrstudiovault).</description>
    <link>https://dev.to/qrstudiovault</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%2F3896270%2Ffc2ae77d-4c34-474e-ab93-eb353669f756.png</url>
      <title>DEV Community: qrstudiovault</title>
      <link>https://dev.to/qrstudiovault</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qrstudiovault"/>
    <language>en</language>
    <item>
      <title>I built a freemium SaaS on WordPress in 4 months — stack, mistakes, lessons</title>
      <dc:creator>qrstudiovault</dc:creator>
      <pubDate>Fri, 24 Apr 2026 21:18:37 +0000</pubDate>
      <link>https://dev.to/qrstudiovault/i-built-a-freemium-saas-on-wordpress-in-4-months-stack-mistakes-lessons-cja</link>
      <guid>https://dev.to/qrstudiovault/i-built-a-freemium-saas-on-wordpress-in-4-months-stack-mistakes-lessons-cja</guid>
      <description>&lt;h1&gt;
  
  
  I built a freemium SaaS on WordPress in 4 months
&lt;/h1&gt;

&lt;p&gt;Today I'm launching QR Studio Vault (&lt;a href="https://qrstudiovault.com" rel="noopener noreferrer"&gt;https://qrstudiovault.com&lt;/a&gt;), a freemium QR code generator. It's my first SaaS, built solo, on WordPress. Here's the full story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why WordPress?
&lt;/h2&gt;

&lt;p&gt;When I told other developers I was building SaaS on WordPress, I got laughed at. "Use Next.js." "Use Laravel." "WordPress is for blogs."&lt;/p&gt;

&lt;p&gt;Here's why I chose it anyway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I'm solo. Speed matters more than prestige.&lt;/li&gt;
&lt;li&gt;Paid Memberships Pro handles subscriptions, access control, drip content — $0 upfront.&lt;/li&gt;
&lt;li&gt;WordPress has 50,000+ plugins. Almost anything I needed already existed.&lt;/li&gt;
&lt;li&gt;Hosting is cheap.&lt;/li&gt;
&lt;li&gt;SEO is battle-tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;WordPress 6.x&lt;/li&gt;
&lt;li&gt;Paid Memberships Pro (free core)&lt;/li&gt;
&lt;li&gt;PayPal payment gateway&lt;/li&gt;
&lt;li&gt;Custom QR engine (qrcode.js + SVG rendering)&lt;/li&gt;
&lt;li&gt;SMTP email plugin&lt;/li&gt;
&lt;li&gt;Shared hosting with SSL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 9 QR code types
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;URL&lt;/li&gt;
&lt;li&gt;WiFi (auto-connects)&lt;/li&gt;
&lt;li&gt;vCard (contact info)&lt;/li&gt;
&lt;li&gt;Email (prefilled)&lt;/li&gt;
&lt;li&gt;SMS (prefilled text)&lt;/li&gt;
&lt;li&gt;Phone (auto-dial)&lt;/li&gt;
&lt;li&gt;Plain text&lt;/li&gt;
&lt;li&gt;Location (opens maps)&lt;/li&gt;
&lt;li&gt;Event (adds to calendar)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SVG rendering for vCard was the hardest — encoding contact data creates very dense QR codes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stripe disaster
&lt;/h2&gt;

&lt;p&gt;Set up Stripe, tested it, everything worked. 24 hours before launch, Stripe banned my account with zero explanation. No appeal.&lt;/p&gt;

&lt;p&gt;Scrambled to set up PayPal. Took 2 days of debugging webhook issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PMPro auto-registered a ghost webhook&lt;/li&gt;
&lt;li&gt;I ended up with 3 stale webhooks with wrong URLs&lt;/li&gt;
&lt;li&gt;Users were created but not assigned memberships&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; always have a backup payment gateway ready BEFORE launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PayPal webhook fix
&lt;/h2&gt;

&lt;p&gt;For anyone doing PMPro + PayPal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log into PayPal Developer Dashboard&lt;/li&gt;
&lt;li&gt;Delete ALL existing webhooks&lt;/li&gt;
&lt;li&gt;In WordPress, clear Client ID + Secret → Save&lt;/li&gt;
&lt;li&gt;Paste credentials back → Save&lt;/li&gt;
&lt;li&gt;Verify webhook URL: &lt;code&gt;https://yourdomain.com/wp-json/pmpro-paypal/v1/webhook&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subscribe to ALL events (min: PAYMENT.SALE.COMPLETED, BILLING.SUBSCRIPTION.ACTIVATED)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pricing strategy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free: 5 codes/month&lt;/li&gt;
&lt;li&gt;Starter: $9.99/mo&lt;/li&gt;
&lt;li&gt;Pro: $19.99/mo (SVG)&lt;/li&gt;
&lt;li&gt;Business: $49.99/mo (API)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Competitors charge $30-50/mo for SVG. My Pro plan is deliberately affordable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Scope creep. Cut 4 features to ship.&lt;/li&gt;
&lt;li&gt;No email list before launch.&lt;/li&gt;
&lt;li&gt;No warm audience.&lt;/li&gt;
&lt;li&gt;Underestimated payment setup.&lt;/li&gt;
&lt;li&gt;No marketing prep in advance.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What went right
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;WordPress speed — 4 months vs 8+ in Next.js.&lt;/li&gt;
&lt;li&gt;Real free tier, no dark patterns.&lt;/li&gt;
&lt;li&gt;Fair pricing.&lt;/li&gt;
&lt;li&gt;Battle-tested SEO foundation.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Free tier, no credit card:&lt;br&gt;
👉 &lt;a href="https://qrstudiovault.com" rel="noopener noreferrer"&gt;https://qrstudiovault.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome, especially on the API design.&lt;/p&gt;

&lt;p&gt;Building solo, launching scared. 💪&lt;/p&gt;

&lt;p&gt;— Diego&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>saas</category>
      <category>webdev</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>I built a freemium SaaS on WordPress in 4 months — here's the stack, the mistakes, and lessons learned</title>
      <dc:creator>qrstudiovault</dc:creator>
      <pubDate>Fri, 24 Apr 2026 15:13:19 +0000</pubDate>
      <link>https://dev.to/qrstudiovault/i-built-a-freemium-saas-on-wordpress-in-4-months-heres-the-stack-the-mistakes-and-lessons-fch</link>
      <guid>https://dev.to/qrstudiovault/i-built-a-freemium-saas-on-wordpress-in-4-months-heres-the-stack-the-mistakes-and-lessons-fch</guid>
      <description>&lt;h1&gt;
  
  
  I built a freemium SaaS on WordPress in 4 months — here's what I learned
&lt;/h1&gt;

&lt;p&gt;Today I'm launching QR Studio Vault (&lt;a href="https://qrstudiovault.com" rel="noopener noreferrer"&gt;https://qrstudiovault.com&lt;/a&gt;), a freemium QR code generator. It's my first SaaS, built solo, on WordPress. Here's the full story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why WordPress?
&lt;/h2&gt;

&lt;p&gt;When I told other developers I was building SaaS on WordPress, I got laughed at. "Use Next.js." "Use Laravel." "WordPress is for blogs."&lt;/p&gt;

&lt;p&gt;Here's why I chose it anyway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I'm solo. Speed matters more than prestige.&lt;/li&gt;
&lt;li&gt;Paid Memberships Pro handles subscriptions, access control, drip content — $0 upfront.&lt;/li&gt;
&lt;li&gt;WordPress has 50,000+ plugins. Almost anything I needed already existed.&lt;/li&gt;
&lt;li&gt;Hosting is cheap (~$10/mo vs $50+ for Vercel + database).&lt;/li&gt;
&lt;li&gt;SEO is battle-tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The stack:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CMS/Framework:&lt;/strong&gt; WordPress 6.x&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Membership/subscriptions:&lt;/strong&gt; Paid Memberships Pro (free core)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payment gateway:&lt;/strong&gt; PayPal (more on this below)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR generation:&lt;/strong&gt; Custom engine built on top of qrcode.js with SVG rendering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching:&lt;/strong&gt; [your cache plugin]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email:&lt;/strong&gt; WordPress + SMTP plugin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; [your host] with SSL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 9 QR code types
&lt;/h2&gt;

&lt;p&gt;I built support for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;URL (standard)&lt;/li&gt;
&lt;li&gt;WiFi (auto-connects)&lt;/li&gt;
&lt;li&gt;vCard (contact info)&lt;/li&gt;
&lt;li&gt;Email (prefilled)&lt;/li&gt;
&lt;li&gt;SMS (prefilled text)&lt;/li&gt;
&lt;li&gt;Phone (auto-dial)&lt;/li&gt;
&lt;li&gt;Plain text&lt;/li&gt;
&lt;li&gt;Location (opens maps)&lt;/li&gt;
&lt;li&gt;Event (adds to calendar)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The SVG rendering for vCard was the hardest — encoding contact data creates very dense QR codes that needed optimized rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stripe disaster
&lt;/h2&gt;

&lt;p&gt;I set up Stripe in live mode, tested it, everything worked. 24 hours before launch, Stripe banned my account with zero explanation. No appeal. No specifics. Just "not a fit for our platform."&lt;/p&gt;

&lt;p&gt;Scrambled to set up PayPal. Took 2 days of debugging webhook issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PMPro auto-registered a webhook that didn't actually exist in PayPal&lt;/li&gt;
&lt;li&gt;I ended up with 3 stale webhooks with wrong URLs&lt;/li&gt;
&lt;li&gt;Users were being created but not assigned memberships&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lesson: always have a backup payment gateway ready BEFORE launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PayPal webhook fix
&lt;/h2&gt;

&lt;p&gt;For anyone doing PMPro + PayPal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log into PayPal Developer Dashboard&lt;/li&gt;
&lt;li&gt;Delete ALL existing webhooks&lt;/li&gt;
&lt;li&gt;In WordPress, clear Client ID + Secret → Save&lt;/li&gt;
&lt;li&gt;Paste credentials back → Save (forces fresh registration)&lt;/li&gt;
&lt;li&gt;Verify webhook URL is: &lt;code&gt;https://yourdomain.com/wp-json/pmpro-paypal/v1/webhook&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subscribe to ALL events (or minimum: PAYMENT.SALE.COMPLETED, BILLING.SUBSCRIPTION.ACTIVATED)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pricing strategy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free: 5 codes/month&lt;/li&gt;
&lt;li&gt;Starter: $9.99/mo (50 codes)&lt;/li&gt;
&lt;li&gt;Pro: $19.99/mo (500 codes + SVG)&lt;/li&gt;
&lt;li&gt;Business: $49.99/mo (unlimited + API)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Competitors charge $30-50/mo for basic SVG exports. My Pro plan is deliberately underpriced to win the "I just need a nice QR code with my brand colors" market.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes I made
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scope creep.&lt;/strong&gt; Cut 4 features last minute to ship.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No email list.&lt;/strong&gt; I have no one to tell about my launch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No warm audience.&lt;/strong&gt; Building in public would've helped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Underestimated payments.&lt;/strong&gt; Payment setup took 30% of my build time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No marketing prep.&lt;/strong&gt; Should've written launch posts weeks in advance.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What went right
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;WordPress speed.&lt;/strong&gt; I shipped in 4 months what would've taken 8 in Next.js.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real free tier.&lt;/strong&gt; No dark patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fair pricing.&lt;/strong&gt; Customers tell me it's refreshing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO foundation.&lt;/strong&gt; WordPress + Yoast gave me a head start.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Add Stripe via a different business structure&lt;/li&gt;
&lt;li&gt;[ ] Build Zapier integration&lt;/li&gt;
&lt;li&gt;[ ] Launch API docs site&lt;/li&gt;
&lt;li&gt;[ ] SEO content push (10 articles in 30 days)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you use QR codes, try the free tier — no credit card:&lt;br&gt;
👉 &lt;a href="https://qrstudiovault.com" rel="noopener noreferrer"&gt;https://qrstudiovault.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback from this community especially on the API design.&lt;/p&gt;

&lt;p&gt;Building solo, launching scared, doing it anyway. 💪&lt;/p&gt;

&lt;p&gt;— Diego&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
