<?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: rcmisk</title>
    <description>The latest articles on DEV Community by rcmisk (@rcmisk).</description>
    <link>https://dev.to/rcmisk</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%2F1350345%2F8c355fe8-185d-4e65-a029-20476bf73a32.jpg</url>
      <title>DEV Community: rcmisk</title>
      <link>https://dev.to/rcmisk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rcmisk"/>
    <language>en</language>
    <item>
      <title>Launching IdeaVerify to Streamline Idea Validation — My #BuildInPublic Journey — episode 1</title>
      <dc:creator>rcmisk</dc:creator>
      <pubDate>Tue, 19 Mar 2024 10:28:44 +0000</pubDate>
      <link>https://dev.to/rcmisk/launching-ideaverify-to-streamline-idea-validation-my-buildinpublic-journey-episode-1-2pea</link>
      <guid>https://dev.to/rcmisk/launching-ideaverify-to-streamline-idea-validation-my-buildinpublic-journey-episode-1-2pea</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm finally going to start my #buildinpublic journey! On the journey you will see how I came across a problem, how I chose to solve it and finally how to launch! Each week I'll post what I've worked on and share what I built, so others can learn along the way. Let's get started!&lt;/p&gt;

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

&lt;p&gt;My coding adventure began as an attempt to bring my brother's vision for a college-centric social network to life. Despite months of development and launching with an initial user base, the lack of market validation led to its stagnation. This pivotal experience highlighted the crucial step we missed—validating the idea before fully committing to its development.&lt;/p&gt;

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

&lt;p&gt;Fast forward to the present, I've recognized a recurring pattern in my approach to projects—a cycle of enthusiasm followed by a realization of misalignment with market needs. This realization sparked the concept of 'IdeaVerify', a meta-solution born from the lessons learned throughout my journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Below is the manual process I did to test out this idea:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Came up with a solution to a problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I built a simple landing page describing the problem and the solution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I described the features, services, and prices with CTA's like Signup Now, or Subscribe now etc. All of the Purchase Now CTA's would not actually allow the user to purchase the SaaS but would show the user to sign up for a waitlist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I then took that static page and deployed it on places for free like Netlify or Render&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The only thing I had to pay for to make it look legit was a Domain address, and to do that I would go to Namecheap to purchase a cheap domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once created I published it to channels like Reddit, Twitter, Quora, Linkedin, Facebook and showed it to users of whom I thought would benefit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I then analyzed what type of interest I got and from there I made a decision if it's worth it to build.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is how I came up with Ideaverify! I actually went through the entire manual process above and got a lot of interest by just posting on one or two subreddits on Reddit. I got signups, and messages saying that it was real interesting and that people were wondering when it would be ready.&lt;/p&gt;

&lt;p&gt;This is how Ideaverify was born. I wanted to automate this entire process of validating or verifying an idea. It would automate all of the above, all at the click of a button but also provide analytics and a "go or no go" decision.&lt;/p&gt;

&lt;p&gt;In this #buildinpublic series I will be using my boilerplate.rcmisk.com SaaS starter kit built in Django and React with all the common SaaS features: transactional emails w/ Postmark, Stripe for payments/subscriptions, Google Analytics, dynamic landing page and copy creation, blog, user login/registration flows, Material UI for styling and deployment to Render.&lt;/p&gt;

&lt;p&gt;I'm going to break up this project into different parts, and milestones and show the code, learnings and development along the way!&lt;/p&gt;

&lt;h2&gt;
  
  
  Milestone 1
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Allow user to input what their SaaS is all about and then generate a landing page based off the copy the user provided and different template styles&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatically create a google analytics app pointing to the url for tracking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User clicks "Create" and behind the scenes deploy the static landing page pointing to a unique URL associated with ideaverify.com subdomain. i.e. my-new-idea.ideaverify.com&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow user to update copy, images, and style once it's deployed&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Milestone 2
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Allow user to pick niche subreddits on Reddit and post to from within the ideaverify dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Show top subreddits/posts on Reddit to post to based off key words that their SaaS is associated with.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Milestone 3
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Allow user to point it to their custom domain
This I believe will be a good MVP and stopping place to launch Ideaverify!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Follow me here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rcmisk.com"&gt;https://rcmisk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/rcmisk"&gt;https://twitter.com/rcmisk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://indiehackers.com/rcmisk"&gt;https://indiehackers.com/rcmisk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/rcmisk"&gt;https://dev.to/rcmisk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sign up for my &lt;a href="https://rcmisk.com/newsletter"&gt;newsletter&lt;/a&gt; to keep track of my progress and to learn along the way!&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>programming</category>
      <category>react</category>
      <category>python</category>
    </item>
    <item>
      <title>How to Set Up a Django and React SaaS Boilerplate: A Step-by-Step Guide</title>
      <dc:creator>rcmisk</dc:creator>
      <pubDate>Wed, 13 Mar 2024 23:32:27 +0000</pubDate>
      <link>https://dev.to/rcmisk/how-to-set-up-a-django-and-react-saas-boilerplate-a-step-by-step-guide-58bd</link>
      <guid>https://dev.to/rcmisk/how-to-set-up-a-django-and-react-saas-boilerplate-a-step-by-step-guide-58bd</guid>
      <description>&lt;p&gt;Starting a Software as a Service (SaaS) project can be daunting, especially with the initial setup of the infrastructure. Luckily, with the right boilerplate, much of the groundwork is laid out for you. This guide will walk you through setting up a SaaS application using a specific Django backend and React frontend code, including integrating Stripe for payments, Postmark for emails, user management and authentication, Cloudinary for media file uploads, dynamically rendered landing page, blog creation through Django Admin, Google Analytics, Material UI, setting up a PostgreSQL database, and deploying to Render.com. Let's dive in!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend Setup&lt;/strong&gt;&lt;br&gt;
Initial Setup&lt;br&gt;
Create a Project Folder: Start by navigating to your Desktop or preferred directory in your terminal and create a folder named saas-boilerplate. Then, create a subdirectory named backend and navigate into it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; cd Desktop
 mkdir saas-boilerplate
 cd saas-boilerplate
 mkdir backend
 cd backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clone the Boilerplate Repository: Clone the backend boilerplate repository into your backend directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/rcmiskin10/dj_react_saas_backend_render_template.git .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set Up a Virtual Environment: Use virtualenv to create an isolated Python environment. Activate it and install the project's dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; pip install virtualenv
 python3.8 -m venv env
 source env/bin/activate
 pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environmental Variables: Create a &lt;code&gt;.env&lt;/code&gt; file in your backend directory. Populate it with the necessary environmental variables provided below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; STRIPE_API_TEST_PK=&amp;lt;STRIPE_API_TEST_PK&amp;gt;
 STRIPE_API_TEST_SK=&amp;lt;STRIPE_API_TEST_SK&amp;gt;
 STRIPE_LIVE_MODE=False
 PROD_BACKEND_URL=&amp;lt;PROD_BACKEND_URL&amp;gt;
 PROD_FRONTEND_URL=&amp;lt;PROD_FRONTEND_URL&amp;gt;
 BACKEND_URL=http://127.0.0.1
 FRONTEND_URL=http://localhost:3000
 DEBUG=True
 DEV_EMAIL_HOST_USER=&amp;lt;DEV_EMAIL_HOST_USER&amp;gt;
 DEV_EMAIL_HOST_PASSWORD=&amp;lt;DEV_EMAIL_HOST_PASSWORD&amp;gt;
 POSTMARK_SERVER_TOKEN=&amp;lt;POSTMARK_SERVER_TOKEN&amp;gt;
 DEFAULT_FROM_EMAIL=&amp;lt;DEFAULT_FROM_EMAIL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you need to set up Stripe.&lt;/p&gt;

&lt;p&gt;If you do not have a stripe account register a free one here: dashboard.stripe.com/register. If you do have a stripe account login here: dashboard.stripe.com/login.&lt;/p&gt;

&lt;p&gt;Once account is set up or you're logged in, turn on &lt;code&gt;Test Mode&lt;/code&gt; (Toggle button in top right corner of dashboard) it should bring you to: dashboard.stripe.com/test/payments&lt;/p&gt;

&lt;p&gt;Go to dashboard.stripe.com/test/apikeys&lt;/p&gt;

&lt;p&gt;Grab your &lt;code&gt;Publishable key&lt;/code&gt; token and set the environmental variable &lt;code&gt;STRIPE_API_TEST_PK&lt;/code&gt; in your &lt;code&gt;.env&lt;/code&gt; file created above.&lt;/p&gt;

&lt;p&gt;Next grab your &lt;code&gt;Secret key&lt;/code&gt; token and set the environmental variable &lt;code&gt;STRIPE_API_TEST_SK&lt;/code&gt; in your &lt;code&gt;.env&lt;/code&gt; file created from above.&lt;/p&gt;

&lt;p&gt;Next go to Stripe Products to add your products, i.e. subscription tiers&lt;/p&gt;

&lt;p&gt;Add as many tiers as you want i.e.&lt;/p&gt;

&lt;p&gt;Free w/ a description and price: $0&lt;/p&gt;

&lt;p&gt;Pro w/ a description and price: say $10&lt;/p&gt;

&lt;p&gt;Make sure both are Recurring and Monthly or however you would like to set up your subscriptions.&lt;/p&gt;

&lt;p&gt;Postgres Database Setup: Download and install PostgreSQL. You can use this download &lt;a href="https://postgresapp.com/" rel="noopener noreferrer"&gt;link&lt;/a&gt;. Once installed, create a database named postgres and ensure your settings.py reflects the correct database settings. For example: &lt;code&gt;default="postgresql://postgres:postgres@localhost/postgres"&lt;/code&gt; , if your database name is &lt;code&gt;postgres&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Apply migrations and create a superuser for Django admin access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; python manage.py migrate
 python manage.py createsuperuser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the Server: Start your Django server and log into the admin panel to verify that everything is set up correctly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Integrating Stripe Products and Prices, Email, and Landing Page data&lt;br&gt;
Add Products and Prices: Navigate to the Django admin payments &lt;a href="http://127.0.0.1:8000/admin/payments/product/" rel="noopener noreferrer"&gt;section&lt;/a&gt; to add Stripe products and their prices. Ensure each product in Django matches its counterpart in Stripe, including the recurring intervals and price IDs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You can find Stripe Product Id in &lt;a href="https://dashboard.stripe.com/test/products?active=true" rel="noopener noreferrer"&gt;stripe products&lt;/a&gt; and click on product and in the URL you will see an ID with prefix &lt;code&gt;prod_xxxxxxxx&lt;/code&gt; and letters and numbers as the unique id.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do the same for all products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now go to &lt;a href="http://127.0.0.1:8000/admin/payments/productprice/" rel="noopener noreferrer"&gt;Django Admin Product Price&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the price for each product from Stripe here: &lt;a href="http://127.0.0.1:8000/admin/payments/productprice/add/" rel="noopener noreferrer"&gt;Django Admin Add Product Link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;code&gt;Product&lt;/code&gt; that you added to Django Admin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the Price from what you entered on Stripe. Add the interval, i.e. Monthly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the stripe price id&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="https://dashboard.stripe.com/test/products?active=true" rel="noopener noreferrer"&gt;https://dashboard.stripe.com/test/products?active=true&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;code&gt;Product&lt;/code&gt; and scroll down to &lt;code&gt;Pricing&lt;/code&gt; and look under API ID and copy id with prefix and numbers/letters like &lt;code&gt;price_xxxxxxxxx&lt;/code&gt; and paste into stripe price id on django admin. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do for all products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you can add descriptions of the tiers here: &lt;a href="http://127.0.0.1:8000/admin/payments/productdescriptionitem/add/" rel="noopener noreferrer"&gt;Django Admin Add Product Description Link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add as many description list items for each product&lt;br&gt;
Email Setup: Configure your development email settings by adding &lt;code&gt;DEV_EMAIL_HOST_USER&lt;/code&gt; and &lt;code&gt;DEV_EMAIL_HOST_PASSWORD&lt;/code&gt; to your &lt;code&gt;.env&lt;/code&gt; file, using an app password generated from your Gmail account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;code&gt;DEV_EMAIL_HOST_USER&lt;/code&gt; to your gmail for DEV testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set your &lt;code&gt;DEV_EMAIL_HOST_PASSWORD&lt;/code&gt; to the password set up in your gmail account from above. You need to create an App Password in: &lt;a href="https://myaccount.google.com/security" rel="noopener noreferrer"&gt;https://myaccount.google.com/security&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure 2-Step Authentication is enabled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then go to &lt;a href="https://myaccount.google.com/apppasswords" rel="noopener noreferrer"&gt;https://myaccount.google.com/apppasswords&lt;/a&gt; and create a new app and a new password will be created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now Emails will be sent through gmail smtp in DEV&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next up is setting up the landing page data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note here you can add whatever copy, images, icons, you would like through the Django admin&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="http://127.0.0.1:8000/admin/landingpage/landingpage/add/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/admin/landingpage/landingpage/add/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the hero section copy and image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the features of your SaaS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the &lt;code&gt;Feature mui icon name&lt;/code&gt;: can be selected from &lt;a href="https://mui.com/material-ui/material-icons/?query" rel="noopener noreferrer"&gt;https://mui.com/material-ui/material-icons/?query&lt;/a&gt; i.e. find Add and get the name of the icon from the end of the import in the modal import &lt;code&gt;AddIcon&lt;/code&gt; from '@mui/icons-material/Add'; i.e. &lt;code&gt;Add&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can add as many features as you like and Order them however you like by applying 1,2,3... to each feature. i.e. 1 will be first in line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do the same for how it works, Secondary hero, and Social Media Links&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We will set up prod environmental variables later.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Frontend Setup&lt;/strong&gt;&lt;br&gt;
Setting Up the Frontend: In a new terminal, navigate to your project root and set up the frontend directory by cloning the frontend boilerplate repository. Install dependencies with npm install.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; mkdir frontend
 cd frontend
 git clone https://github.com/rcmiskin10/dj_react_saas_frontend_render_template.git .
 npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Configure Environment Variables: Create a &lt;code&gt;.env&lt;/code&gt; file in your frontend directory. Add your Stripe Publishable key and Google Analytics ID.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the publishable key from Stripe to the environmental variable &lt;code&gt;REACT_APP_STRIPE_API_TEST_PK&lt;/code&gt; with the value from &lt;code&gt;STRIPE_API_TEST_PK&lt;/code&gt; in &lt;code&gt;backend/.env&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add an environmental variable REACT_APP_GA_ID for Google Analytics&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="https://analytics.google.com/" rel="noopener noreferrer"&gt;https://analytics.google.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add an analytics account&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add an app&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to top search bar and search for &lt;code&gt;MEASUREMENT ID&lt;/code&gt; in &lt;code&gt;Data Streams&lt;/code&gt; and copy the ID that has prefix &lt;code&gt;G-XXXXXXXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Past that &lt;code&gt;G-XXXXXXXX&lt;/code&gt; as value for environmental variable &lt;code&gt;REACT_APP_GA_ID&lt;/code&gt; in &lt;code&gt;frontend/.env&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start the Frontend Server: Run &lt;code&gt;npm start&lt;/code&gt; to launch your React app. Your SaaS landing page should now be visible at &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Deploying to Render.com&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Prepare for Deployment: Ensure your &lt;code&gt;backend&lt;/code&gt; and &lt;code&gt;frontend&lt;/code&gt; folders are pushed to separate GitHub repositories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploying the Backend:&lt;/strong&gt; Follow Render.com's documentation to deploy your Django app, adding the necessary environment variables for production, including Stripe keys, Cloudinary for media files, and email settings via Postmark.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow tutorial here: &lt;a href="https://docs.render.com/deploy-django#use-renderyaml-for-deploys" rel="noopener noreferrer"&gt;https://docs.render.com/deploy-django#use-renderyaml-for-deploys&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;backend/render.yaml&lt;/code&gt; already exists in the saas boilerplate. You can change all the names to fit whatever you like, but our boilerplate named everything &lt;code&gt;backend&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the Render Dashboard, go to the &lt;a href="https://dashboard.render.com/blueprints" rel="noopener noreferrer"&gt;Blueprints&lt;/a&gt; page and click New Blueprint Instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to first create a repository to hold your &lt;code&gt;backend/&lt;/code&gt; folder on github.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you can select the repository that contains your blueprint and click Connect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give your blueprint project a name and click Apply.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add the Production Environmental Variables by clicking the backend app and going to Environment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add you Stripe &lt;code&gt;STRIPE_API_TEST_PK&lt;/code&gt; found in your local &lt;code&gt;.env&lt;/code&gt; file or if you are ready to use live Stripe data use the Production PK found in stripe dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Same with the:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STRIPE_API_TEST_SK
STRIPE_LIVE_MODE=False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;BACKEND_URL&lt;/code&gt; will be the url that your backend render app is pointing to: something similar to this &lt;code&gt;backend-xxxxonrender.com&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For your media files first set up Cloudinary account by going to the &lt;a href="https://cloudinary.com/" rel="noopener noreferrer"&gt;cloudinary&lt;/a&gt; website and create a free cloudinary account. After your account has been created, go to the dashboard page and copy the &lt;code&gt;cloud name&lt;/code&gt;, &lt;code&gt;api key&lt;/code&gt; and &lt;code&gt;api secret&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the cloud name to &lt;code&gt;CLOUDINARY_CLOUD_NAME&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the api key to &lt;code&gt;CLOUDINARY_API_KEY&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the api secret to &lt;code&gt;CLOUDINARY_API_SECRET&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For your emails create a postmark account here &lt;a href="https://postmarkapp.com/" rel="noopener noreferrer"&gt;https://postmarkapp.com/&lt;/a&gt;. Follow instructions here: &lt;a href="https://postmarkapp.com/support/article/1008-what-are-the-account-and-server-api-tokens" rel="noopener noreferrer"&gt;https://postmarkapp.com/support/article/1008-what-are-the-account-and-server-api-tokens&lt;/a&gt; to find your Server API Token and set it to &lt;code&gt;POSTMARK_SERVER_TOKEN&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;code&gt;DEFAULT_FROM_EMAIL&lt;/code&gt; to your email with postmark.&lt;br&gt;
After you deploy the frontend app below, come back to setting &lt;code&gt;FRONTEND_URL&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally run &lt;code&gt;python manage.py createsuperuser&lt;/code&gt; in the Render shell in the settings of the backend app so that you can create an admin account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To see your backend admin page, go to &lt;code&gt;&amp;lt;YOUR_APP_URL&amp;gt;/admin&lt;/code&gt; to login.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploying the Frontend:&lt;/strong&gt; Deploy your React app on &lt;a href="//render.com"&gt;Render.com&lt;/a&gt;, setting environment variables for connecting to the backend API, Stripe, Cloudinary, and Google Analytics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect your github account here: &lt;a href="https://dashboard.render.com/select-repo?type=static" rel="noopener noreferrer"&gt;https://dashboard.render.com/select-repo?type=static&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow the instructions to deploy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployed go to settings for frontend app&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Redirect/Rewrite rules add:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;/*&lt;/code&gt; as Source&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/index.html&lt;/code&gt; as Destination&lt;/p&gt;

&lt;p&gt;And `Rewrite as Action&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now go to Environment and add:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;REACT_APP_STRIPE_API_TEST_PK&lt;/code&gt; to same Stripe API Key that you set in backend&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;REACT_APP_BACKEND_API_URL&lt;/code&gt; and use the backend url from above after backend was deployed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your &lt;code&gt;REACT_APP_MEDIA_URL&lt;/code&gt; to the Cloudinary url. Something like this &lt;a href="https://res.cloudinary.com/xxxxxxx/image/upload/v1/" rel="noopener noreferrer"&gt;https://res.cloudinary.com/xxxxxxx/image/upload/v1/&lt;/a&gt; The xxxxxxx should be found in your cloudinary dashboard that you used in backend set up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add REACT_APP_GA_ID from your .env REACT_APP_GA_ID in local file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally take the Frontend url from the react frontend app and set it in the backend app on render.com's environmental variable FRONTEND_URL that you previously set up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Final Adjustments: After deploying both frontend and backend, ensure all environment variables are correctly set and pointing to the right services. Test your live application to ensure everything works seamlessly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congratulations! You've successfully set up and deployed your SaaS boilerplate application. This setup provides a solid foundation for developing your SaaS product, with scalable options for payment processing, database management, and deployment strategies. Happy coding!&lt;/p&gt;

&lt;p&gt;Coming soon!&lt;/p&gt;

&lt;p&gt;Deploy to GCP Cloud Run w/ React inside Django's static files!&lt;/p&gt;

&lt;p&gt;Automate all steps in this blog post, all at the click of button!&lt;/p&gt;

&lt;p&gt;Tutorials on the code for both backend and frontend repos!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rcmiskin10/dj_react_saas_backend_render_template" rel="noopener noreferrer"&gt;https://github.com/rcmiskin10/dj_react_saas_backend_render_template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rcmiskin10/dj_react_saas_frontend_render_template" rel="noopener noreferrer"&gt;https://github.com/rcmiskin10/dj_react_saas_frontend_render_template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S comment below on any issues!&lt;/p&gt;

&lt;p&gt;Sign up for my &lt;a href="https://rcmisk.com/newsletter" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt; to hear about my #buildinpublic journey! See original post here: &lt;a href="https://rcmisk.com/how-to-set-up-a-django-and-react-saas-boilerplate-a-step-by-step-guide" rel="noopener noreferrer"&gt;https://rcmisk.com/how-to-set-up-a-django-and-react-saas-boilerplate-a-step-by-step-guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>react</category>
      <category>stripe</category>
      <category>jwt</category>
    </item>
  </channel>
</rss>
