Skip to content

navanchauhan/SaaS-in-a-Flask

Repository files navigation

SaaS-in-a-Flask

codecov Flask Tests DeepSource

In the wise words of @alectrocute:

I've noticed SaaS bootstraps/boilerplates being sold upwards of $1,000 per year and I think that's fucking ridiculous.

Features / To-Do

  • Landing Page: Written in Bootstrap 5, compatible with Bootswatch Themes (Just replace bootstrap.min.css)
  • Database Management: Using CLI or Superuser view
    • Migration: Using Flask-Migrate
  • Authentication: Using Flask-Login
    • Sign Up
    • Sign In
    • OAuth2: Using Authlib
    • LDAP
    • Forgot Password
    • Confirm Email
    • Password Hashing: Using Bcrypt (Flask-Bcrypt)
  • Form Handling: With Flask-WTF using WTForms
  • Dashboard
  • GitHub Workflows
  • Admin Pages: Using Flask-Admin
  • Role Support
  • Team Management
  • Error Handling
    • Sentry Support
    • Error Code Handling
  • Async AJAX Calls
  • Tests: Using PyTest
  • Code Coverage: Using CodeCov
  • Delayed Jobs
  • Logging
  • FastAPI Support
  • Billing Handling
    • Stripe
  • GDPR Compliance / Data Export
  • Docker Images
  • Automatic Deployments: Using Heroku Sample Deployment

Screenshots

Landing

Landing-1

Landing Page on Mobile

Landing Page Features on Mobile

Login Page

Sign Up Page

Basic Dashboard

Admin Dashboard

Quick How-Tos

Installing Dependencies

You can either use the provided Pipfile using pipenv or use requirements.txt with pip

python3 -m venv venv
source venv/bin/activate
pip3 install pipenv
pipenv install --dev

python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt

Initialise Database and add super-user

FLASK_APP=app flask database create
FLASK_APP=app flask database admin-create

Generate SSL Certificate to test Sign in With Google

Even while developing on a local server. You still need to run your server as HTTPS to test Sign in With Google

make cert-create
make dev-ssl

Configurations

The following environment variables should be set

Sign in with Google

Variable
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET

E-Mail Confirmation

Variable Example
MAIL_USE_TLS True
MAIL_PORT 587
MAIL_FROM navan@pi4.navan.dev
MAIL_SERVER pi4.navan.dev
MAIL_USERNAME navan
MAIL_PASSWORD fysdoifhsdfsd

Sentry Error Reporting

Variable
SENTRY_DSN

Running Tests

You need to be in the base directory of the repo to run tests.

Using Pipenv

pipenv run tests

Manually

python -m pytest

GitHub Workflow

The GitHub Workflow automatically installs all dependencies in the requirements.txt file and runs pytest on different Python 3 versions (3.7, 3.8 ,3.9). To generate the requirements.txt file from pipenv use pipenv lock --dev -r > requirements.txt

Code Coverage

Codecov is used to automatically generate reports and upload to their website using a GitHub Action. Make sure to set up CODECOV_TOKEN secret in your repo to use the workflow.