Skip to content

Django tutorial integrating TailwindCSS, HTMX, Neon Postgres, Stripe API, User auth, deployment, & more.

License

Notifications You must be signed in to change notification settings

codingforentrepreneurs/SaaS-Foundations

Repository files navigation

SaaS Foundations

Build the foundations for a Software as a Service business by leveraging Django, Tailwind, htmx, Neon Postgres, Redis, and more.

The goal of this project is to learn how to create a reusable foundation for building SaaS products. When release, this course will span multiple topics and give you a solid foundation into build your business.

References

Thank you to Neon for helping bring this course to life!

Getting Started

Clone

mkdir -p ~/dev/saas
cd ~/dev/saas
git clone https://github.com/codingforentrepreneurs/SaaS-Foundations .

Create Virtual Environment

macOS/Linux

python3 --version # should be 3.11 or higher
python3 -m venv venv
source venv/bin/activate

Windows

c:\Python312\python.exe -m venv venv
.\venv\Scripts\activate

Install Requirements

# with venv activated
pip install pip --upgrade && pip install -r requirements.txt

Sample dotenv to dotnev

cp .env.sample .env
cat .env

Values include:

  • DJANGO_DEBUG=1
  • DJANGO_SECRET_KEY=""
  • DATABASE_URL=""
  • EMAIL_HOST="smtp.gmail.com"
  • EMAIL_PORT="587"
  • EMAIL_USE_TLS=True
  • EMAIL_USE_SSL=False
  • EMAIL_HOST_USER=""
  • EMAIL_HOST_PASSWORD=""
  • ADMIN_USER_EMAIL=""
  • STRIPE_SECRET_KEY=""

Create the DJANGO_SECRET_KEY

python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

or

openssl rand -base64 64

or

python -c 'import secrets; print(secrets.token_urlsafe(64))'

Once you have this value, add update DJANGO_SECRET_KEY in .env.

Create Neon Postgres Database

Install Neon CLI

Using the Neon cli via homebrew:

brew install neonctl

Login to Neon CLI

neonctl auth

This will open a browser window to login.

Create a new Neon project (optional)

neonctl projects create --name saas

Get the Project ID

Once created, get the project id:

neonctl projects list

Projects

┌──────────────────────────┬────────────────────────────┬───────────────┬──────────────────────┐
│ Id                       │ Name                       │ Region Id     │ Created At           │
├──────────────────────────┼────────────────────────────┼───────────────┼──────────────────────┤
│ steep-base-11409687      │ saas                       │ aws-us-east-2 │ 2024-06-02T04:03:07Z │
└──────────────────────────┴────────────────────────────┴───────────────┴──────────────────────┘
PROJECT_ID=steep-base-11409687

Replace steep-base-11409687 with your project id.

Or using the shortcut:

PROJECT_ID=$(neonctl projects list | grep "saas" | awk -F '' '{print $2}' | xargs)

Get the Database Connection String

neonctl connection-string --project-id "$PROJECT_ID"

Set this value to DATABASE_URL in .env.

Run Migrations

source venv/bin/activate 
# or .\venv\Scripts\activate if windows
cd src
python manage.py migrate

Create a Superuser

python manage.py createsuperuser

Pull Vendor Static Files

python manage.py vendor_pull

Create a Stripe Account

  1. Sign up on Stripe.com for an account
  2. Get or create a Stripe Secret API Key (Dashboard > Developers > API keys > Secret key )
  3. Update dotenv (.env) with the value STRIPE_SECRET_KEY with your key.

Run the Server

python manage.py runserver

Ready to roll! 🚀

Much more coming soon!