saas tempplate using fast html components with material skin (fh-material)
Project description
🚀 fh-saas
⚡ Quick Start
1. Install
pip install fh-saas
2. Configure Environment
# .env file
DB_TYPE=POSTGRESQL
DB_USER=postgres
DB_PASS=your_password
DB_HOST=localhost
DB_NAME=app_host
# Optional integrations
STRIPE_SECRET_KEY=sk_...
RESEND_API_KEY=re_...
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
3. Initialize Your App
from fh_saas.db_host import HostDatabase, GlobalUser, TenantCatalog, Membership, gen_id, timestamp
from fh_saas.db_tenant import get_or_create_tenant_db
from fh_saas.utils_db import register_tables, create_indexes
from fh_saas.utils_log import configure_logging
# Configure logging (once at startup)
configure_logging()
# Connect to host database
host_db = HostDatabase.from_env()
# Create a new user
user = GlobalUser(
id=gen_id(),
email="founder@startup.com",
oauth_id="google_abc123",
created_at=timestamp()
)
host_db.global_users.insert(user)
# Create a tenant for their organization
tenant = TenantCatalog(
id=gen_id(),
name="Acme Corp",
db_url="postgresql://...",
created_at=timestamp()
)
host_db.tenant_catalogs.insert(tenant)
# Link user to tenant as owner
membership = Membership(
id=gen_id(),
user_id=user.id,
tenant_id=tenant.id,
profile_id=gen_id(),
role="owner",
created_at=timestamp()
)
host_db.memberships.insert(membership)
host_db.commit()
4. Work with Tenant Data
# Get tenant's isolated database
tenant_db = get_or_create_tenant_db(tenant.id, tenant.name)
# Define your app's data models
class Project:
id: str
name: str
status: str = "active"
created_at: str
class Task:
id: str
project_id: str
title: str
completed: bool = False
# Register tables (creates if not exist)
tables = register_tables(tenant_db, [
(Project, "projects", "id"),
(Task, "tasks", "id"),
])
# Add indexes for performance
create_indexes(tenant_db, [
("tasks", ["project_id"], False, None),
("tasks", ["completed"], False, None),
])
# Use the tables
projects = tables["projects"]
projects.insert(Project(id=gen_id(), name="Launch MVP", created_at=timestamp()))
tenant_db.conn.commit()
📚 Documentation Guide
| Section | What You'll Learn |
| 📦 Core | |
| Multi-Tenant Setup | Host database, user management, tenant registry |
| Tenant Databases | Isolated databases per tenant, connection pooling |
| Table Management | Create tables & indexes from dataclasses |
| 🔌 Integrations | |
| HTTP Client | REST APIs with retries, rate limiting, auth |
| GraphQL Client | Streaming pagination for large datasets |
| Webhooks | Receive & verify external webhooks |
| ⚙️ Data Pipeline | |
| Background Tasks | Async job execution |
| Data Transforms | JSON → Polars → Database pipeline |
| API → DB Sync | End-to-end external data sync |
| 🛠️ Utilities | |
| SQL Helpers | Database type detection, query builders |
| Logging | Configurable logging for all modules |
| Authentication | OAuth flows (Google, GitHub) |
| Email Sending | Transactional emails via Resend |
| 📣 Content | |
| Blog Publishing | Markdown blog with frontmatter |
| SEO & Sitemaps | Sitemap generation, meta tags |
| Workflow Engine | Multi-step automation |
🛠️ Developer Guide
This project uses nbdev for literate
programming. The source of truth is in the nbs/ notebooks.
Development Setup
# Clone and install in dev mode
git clone https://github.com/abhisheksreesaila/fh-saas.git
cd fh-saas
pip install -e .
# Make changes in nbs/ directory, then compile
nbdev_prepare
📦 Installation
# From PyPI (recommended)
pip install fh-saas
# From GitHub (latest)
pip install git+https://github.com/abhisheksreesaila/fh-saas.git
GitHub · PyPI · Documentation
🤝 Contributing
Contributions are welcome! Please check the GitHub repository for issues and discussions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fh_saas-0.9.tar.gz
(37.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
fh_saas-0.9-py3-none-any.whl
(41.8 kB
view details)
File details
Details for the file fh_saas-0.9.tar.gz.
File metadata
- Download URL: fh_saas-0.9.tar.gz
- Upload date:
- Size: 37.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0743db444f95ee7273b0f00a554442501b969c7fb76cda2650aa9e26d6f60b2d
|
|
| MD5 |
2daa6c9c3d7a15d502c341139aa12c2f
|
|
| BLAKE2b-256 |
65516f9949913b0be137405c808ff7b09767f7bd51d22c72feafd155e0667230
|
File details
Details for the file fh_saas-0.9-py3-none-any.whl.
File metadata
- Download URL: fh_saas-0.9-py3-none-any.whl
- Upload date:
- Size: 41.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8a127102f98be9aae63a0bcd5d2debb49e28cd7b5fcda7b040da35fdb02b90f
|
|
| MD5 |
85b98110f5350f9ea599a546be71c337
|
|
| BLAKE2b-256 |
965cd7dd7e70bbfa7727b833f0e31cf9bba1b50fcde576194080a25a713df0af
|