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.