Building SaaS with Python and Django

On Wednesdays at 9pm Eastern Time, I develop a Software as a Service (SaaS) on Twitch.

My primary goal is to teach people about the Django web framework and Python.

Django is a big web framework so I share my experience from using the project for 6+ years.

This page contains show notes and links to each stream. Join me live if you’re interested!

  • #Python
  • #Django
  • #onboarding
  • #CSS

Starting the Onboarding Flow - Building SaaS #49

In this episode, we worked on the progress element that will display in every step of the onboarding flow. I added some labels and styled the banner using Tailwind CSS. At the end of the stream, we boxed in the shape of the welcome page with some placeholder elements.

  • #Python
  • #Django
  • #onboarding

Onboarding - Building SaaS #48

In this episode, we did some design work to plan out the onboarding flow for new users. I spoke through my design process, outlined what a new user will need to do to succeed, wrote down the plan in GitHub issues, then started to implement that flow.

  • #Python
  • #Django
  • #CSS
  • #template

How To Style Sign Up - Building SaaS #47

In this episode, I added styling to the Sign Up page of the site. We chatted about CSS tools and frameworks, the benefit of feature flags to control what UI is displayed to users, and how to use Tailwind CSS to modify a design quickly.

  • #Python
  • #Django
  • #views

A Week At A Time - Building SaaS #46

In this episode, we worked on a weekly view for the Django app. We made navigation that would let users click from one week to the next, then fixed up the view to pull time from that particular week.

  • #Python
  • #Django
  • #templates

Templates and Logic - Building SaaS #45

In this episode, we added content to a template and talked about the N+1 query bug. I also worked tricky logic involving date handling.

  • #Python
  • #Django
  • #forms

Fast Forms With UpdateView - Building SaaS #44

In this episode, we worked on an edit view. We used Django’s generic UpdateView to aid the process and test drove the creation of the view to verify things every step of the way.

  • #Django
  • #Tailwind
  • #templates

Use Tailwind On A Template - Building SaaS #43

In this episode, we worked on the template styles of a tabular view. We also made some context data adjustments to include header rows and column highlighting.

  • #Django
  • #Tailwind
  • #templates

Add Styles To Templates - Building SaaS #42

In this episode, I added a CSS framework, Tailwind CSS. After working through some issues with the log out feature, we started to style the base template of the site.

  • #Django
  • #django-allauth
  • #users

User Accounts With django-allauth - Building SaaS #41

In this episode, we added django-allauth to create accounts that default to email instead of using usernames. We added the package, configured some templates, and created tests.

  • #Django
  • #auth

Make A Custom User Model - Building SaaS #40

In this episode, we started a users app and hooked up the custom user model feature of Django to unlock the full extensibility of that model in the future.

  • #Django
  • #django-environ
  • #django-debug-toolbar

django-environ and django-debug-toolbar - Building SaaS #39

In this episode, we set up a couple of tools that will be at the base of development. The first tool was django-environ to control Django settings from environment variables. The second tool was the django-debug-toolbar to help with debugging pages in future work.

  • #Django
  • #Heroku

New Project, Who Dis? - Building SaaS #38

In this episode, we started a brand new project! I had some internet troubles so this “stream” is actually a local recording from my computer. We created a new Django project from scratch and set up Heroku to handle deployments.

  • #SaaS
  • #failure
  • #retrospective

Lessons From A Failed SaaS - Building SaaS #37

In this episode, we talked about the things I learned from my SaaS project and some of the reasons why it failed to succeed financially. We dug into the technical and marketing challenges that I faced and what went wrong.

  • #Python
  • #Django
  • #Configuration
  • #Goodconf

Configurama - Building SaaS #36

In this episode, we turned our attention to handling settings and configuration. We discussed different techniques for handling settings, looked at available tools, and started integrating one of the tools into the project.

  • #Python
  • #Django
  • #WhiteNoise

Deploying WhiteNoise - Building SaaS #35

In this episode, we updated Continuous Integration, Nginx, and the Ansible deployment tasks to use WhiteNoise. With all the changes in place, we tested things out to verify that WhiteNoise served up the CSS, JS, and image files.

  • #Python
  • #Django
  • #WhiteNoise

Bring in the WhiteNoise, Bring in Da Funk - Building SaaS #34

In this episode, we added WhiteNoise to the app as a tool for handling static assets. This lets us move away from depending on Nginx for the task and gives shiny new features like Brotli support.

  • #Python
  • #Ansible
  • #Git

Get Out, Git! - Building SaaS #33

In this episode, I removed the Git clone from the server. This is some of the final cleanup to streamline the deployment process.

  • #Python
  • #Postgres
  • #wal-e

wal-e Postgres Backups - Building SaaS #32

In this episode, we worked on Postgres database backups and modified the backup tool, wal-e, to use the Shiv app format.