Skip to content

PaulleDemon/Django-SAAS-Boilerplate

Repository files navigation

Django SaaS Boilerplate (production ready)

Focus on building your core functionality, skip writing repetitive code. Comes packed with landing page, Payment integration, blog, sitemap and more.

Why use Django SaaS boilerplate?

Using a Django saas boilerplate can save you a lot of time, which is a huge benefit. Most customers don't care if you start from scratch or use a template; they just want their problem solved quickly. Whether you use Django or another framework usually doesn't matter to them as long as the job gets done efficiently.

This boilerplate can help you save hours of work, allowing you to focus on core functionality of your SaaS instead of spending a lot of time on setting up stripe, blog, login functionalities and landing page.

#CodeLessShipMore

who is this boilerplate suitable for?

  • People focused on creating MVP and want to ship faster.
  • Reduce repetitive parts and focus on functionality.
  • Learning Django

What features does Django template include?

  • Production ready, you can immediately deploy this to cloud such as Railway.app, Render.com etc.
  • Comes with a landing page that you can modify.
  • Responsive design, forget about making things responsive yourself.
  • Pricing page
  • Payment integration - Default Stripe integration, just add your stripe keys and get started
  • Recurring charges
  • Custom user model.
  • Login and Signup flow, including, verification email, resend token, password reset.
  • Contact us page.
  • 404 page
  • Has blog with Trix WYSIWYG editor built into the admin panel.
  • Technical SEO optimization.
  • Dynamic Sitemap.xml
  • Robots.txt
  • Google analytics
  • Custom user model.
  • Tailwind css setup for rapid development (note: the tailwind classes are prefixed with tw-, to differentiate them)

Demo

Visit the demo site: Django Demo website

For admin and login use.

Note

You will not receive any email upon signup as its disabled, use the above account to login

For testing stripe check out test cards: https://docs.stripe.com/testing

Looking for basic website template?

If you are a freelancer or agency building a non SAAS website check out other Django boilerplate

Table of contents

Local development

follow the below steps :

  1. Star the repo: https://github.com/PaulleDemon/Django-SAAS-Boilerplate

  2. Clone the repo git clone https://github.com/PaulleDemon/Django-SAAS-Boilerplate

  3. Install python 3.8 or above. https://www.python.org/downloads/

  4. Open the template folder and from the terminal change the directory to the current working directory. cd home/Template

  5. Install dependencies in an environment (creating an enviornment is optional, but recommended)

pip install -r requirements.txt
  1. Add a .env file inside the project folder with the following
DEBUG=1
PYTHON_VERSION=3.10
DOMAIN=""

ALLOWED_HOSTS=".up.railway.app"
ALLOWED_CORS=""

SECRET_KEY=""
PORD_SECRET_KEY=""

DJANGO_SUPERUSER_EMAIL="" # optonal use if you want to create supruser using --noinput
DJANGO_SUPERUSER_PASSWORD="" # optonal use if you want to create supruser using --noinput

EMAIL_HOST="smtpout.server.net"
EMAIL_HOST_USER=""
EMAIL_HOST_PASSWORD=""

POSTGRES_DATABASE=""
POSTGRES_USER=""
POSTGRES_PASSWORD=""
POSTGRES_HOST=""

POSTGRES_URL=""

PROJECT_ID="" # firebase project id
BUCKET_NAME=".appspot.com" # firebase storage name
FIREBASE_CRED_PATH="project/firebase-cred.json"

FIREBASE_ENCODED=""
CLOUD_PLATFORM="RAILWAY"

GOOGLE_ANALYTICS="G-"

STRIPE_TEST_API_KEY=""
STRIPE_WEBHOOK_TEST_API_KEY=""
STRIPE_PUB_TEST_KEY=""

STRIPE_PROD_API_KEY=""
STRIPE_WEBHOOK_PROD_API_KEY=""
STRIPE_PUB_PROD_KEY=""
  1. Now in your terminal Create databases and Tables using
python manage.py migrate

Your database is created and ready to use.

  1. Now run the website from the terminal using.
python manage.py runserver

Your website should be available at: http://localhost:8000/

  1. To run Tailwind CSS open a new terminal and run
python manage.py tailwind start

Note: If you are facing problems starting this program in windows OS, remove logging from project/settings.py

Admin superuser

To create a admin superuser use the following in terminal

python manage.py createsuperuser

changing example.com to localhost/yourdomain

If you are sending reset email you may notice its being sent from example.com, inorder to change that you need to go to admin dashboard and from sites, change to your domain

site name

Customizing

All html, css, js and assets lies inside the templates.

  • To modify the landing page, update home.html.
  • To add link to header and footer or modify head tags, check base.html.
  • extend base.html to have the same footer and header.

Adding title, description to page

To add title and meta tags to a page use the following tags

{% block title %}lorem impsum {% endblock title %}
{% block description %}lorem impsum{% endblock description %} #meta description

{% block socialTitle %}{{blog.title}} | {% endblock socialTitle %} # open graph title, for socials
{% block socialDescription %}{{blog.meta_description}}{% endblock socialDescription %} # open graph description, for socials
{% block pageType %}article{% endblock pageType %}
{% block pageImage %}{% endblock pageImage %} # social image

To add additional head tags

{% block head_tags %}lorem impsum {% endblock head_tags %}

To add scripts at the end of the elements

{% block scripts %}
    <script src="{% static "" %}" />
{% endblock scripts %}

Payment - Stripe

By default it is set up to use Stripe you can however change this to use other payment gateways supported by stripe.

Caution

Don't make payment to your self in production, as this goes against Stripe terms of use. Use only stripe test account for testing purposes.

You can get the stripe test account secret key, public key and webhook key from stripe dashboard.

Deployment:

You can make use of Railway to deploy your own instance.

railway icon

Link to deploy to Railway.app

once you complete make sure to

python manage.py collectstatic

and set

DEBUG=0

Generate secret key To generate secret key use from django.core.management.utils import get_random_secret_key then get_random_secret_key() in your python shell

Note: don't forget to set the sites to your domain instead of example.com in the admin panel

Create a firebase credential file

Note: We'll be using firebase for persistent storage, to upload user files. Firebase is pre-configured as there are other firebase services developers may want to use.

You can also use any of the storage supported by django-storages, if you don't want to use firebase.

To use Firebase

  1. We use Google storage for storing files. Go to firebase -> storage -> create (make it public)

  2. Now Go to firebase -> project settings -> service account -> Generate new private key.

Rename the private as firebase-cred.json

Use this private file as your credential file.

Deploying credential file to production

Sometimes your cloud provider may not provide you with storage for secret files. So convert the credential file to base64 using

base64 firebase-cred.json > encoded.txt

Now copy the contents of encoded.txt and paste it in FIREBASE_ENCODED="wedde" variable

Images credits

Images are taken from free to use sites such as

  1. unsplash - https://unsplash.com/
  2. Pexels - https://www.pexels.com/