Home

This is the public home page where the anonymous visitors land.

Create an account to see the authentication and payment process through the login and application templates.


Features of Cansin's Base SaaS (Flask)

💻 Developer Experience

  • Dev containers:

    • Flask container with pre-configured with:

      • VSCode launch.json for debugging the Flask app,

      • Prettier for HTML, CSS, and JS formatting,

      • Pre-commit hooks for code quality checks,

      • Markdownlint for Markdown formatting,

      • Black for Python code formatting,

      • Commitlint for commit message linting.

    • Postgres as a development database,

    • pgAdmin pre-connected to the development,

    • docs serving the built html files of the Sphinx documentation.

  • CI/CD pipelines with GitHub Actions to:

    • Run pre-commit hooks,

    • Run tests,

    • Automate semantic release for versioning and changelog generation,

    • Build and deploy the documentation,

    • Build and deploy the app to production.

☁️ Deployment

  • 🐳 Dockerized Flask for stateless continuous deployment for scalability,

  • 🗄️ Database model abstracted with ORM,

  • 📦 S3 object storage with pre-signed URLs.

💳 Stripe Integrations

  • Subscriptions,

    • Different subscription tiers,

    • Billing page with Invoices,

    • Integration mechanism:

      • To begin a subscription, we send the user to Stripe with a checkout session,

      • Then listen to Stripe webhook events to process the results,

      • We set the Products in Stripe, then insert their prices into the Tiers table.

  • One-off credit purchases for pre-paid metered usage.

🔒 Authentication

  • Sign up flow,

    • Sign up with Google option,

    • Email validation requirement,

  • Two factor authentication (TOTP only),

  • Forgot password flow,

  • reCAPTCHA v2 for sign up and login forms,

  • Account details page where the user can:

    • Upload a profile picture (stored in S3),

    • Change profile details like first & last name.

📧 Transactional Emails with SMTP

  • About Stripe subscription changes:

    • Confirmation,

    • Cancellation,

    • Expiration.

  • Email verification on registration,

  • Forgot password.

🚨 Security

  • Cross-Site Request Forgery (CSRF) protection in all forms,

  • Rate limiting: App-wide and form specific limits,

  • Cross-Site Scripting (XSS) protection,

  • Cross-Origin Resource Sharing (CORS) protection.

🎨 UI

🔔 Notifications

  • Toast notifications

    showToast(
        "This is a test toast notification!",
        "Toast Title",
        "success",
        { autohide: false }
    );
  • Modals

    showAlert(
        "Title",
        "This is a test modal dialog!",
        "Back",
        "info"
    );
  • flash() messages from Flask styled as Bootstrap 5 alerts,

🌐 Bootstrap HTML templates

  • Email templates for the email validation, password reset,

  • 2 sets of page templates and Flask Blueprints:

    • Public pages (templates/public/),

    • Auth pages for login, sign up, and password reset, 2FA (templates/auth/),

    • Backend (auth required) pages (templates/private/).

  • Utilizes the new ootb Bootstrap 5 components like floating form labels,

  • Last, but not least: User configurable dark mode. 😎

🧩 Components

Snippets and components from the Bootstrap docs

🖼️ Icons

Bootstrap icons is included.

See the list of available icons here.

🌙 Dark mode

Color mode toggler from the Bootstrap docs is included. A dropdown for mode selector is included in the templates/shared-components directory. This is meant to be inserted in the navigation items list.