Solo Flow
Login and get an instant workspace. No setup, no friction - straight to building.
Superfast SaaS starter
The only Python SaaS starter with multi-tenant workspaces, subscription billing (Stripe or Chargebee), and enterprise auth (OAuth + MFA + Passkeys) — all self-hosted, fully yours.
Nike Studio
Monthly plan · 11 members
Lace Collective
Pro plan · 4 members
Solo Maker
Starter · 1 member
Invisible multi-tenancy
Solo founders get instant sandboxes, teams get collaboration superpowers, and you get a sleeping backend.
Login and get an instant workspace. No setup, no friction - straight to building.
Add teammates and controls appear. Workspace switcher, roles, invites, and audit logs built in.
One helper call, zero context leaks. All queries auto-scope to the current workspace.
All killer, no filler
All the hard parts bundled into gorgeous cards.
Complete isolation that scales from solo builders to enterprise-grade customers.
Stripe or Chargebee. Hosted checkout, subscription lifecycle, webhooks.
OAuth, TOTP MFA, and Passkeys/WebAuthn — self-hosted, no third-party lock-in.
Prebuilt dashboard screens, modals, and marketing blocks.
Docker-ready with CI/CD configs for Fly.io, Railway, and more.
Track every action with user, timestamp, and workspace context.
Three-command setup
No config hell, no yak shaving.
One script configures everything.
git clone [email protected]:level09/readykit.git
cd readykit
./setup.sh
Add OAuth and billing secrets.
GOOGLE_OAUTH_CLIENT_ID=your_id
BILLING_PROVIDER=stripe # or chargebee
STRIPE_SECRET_KEY=sk_test_...
Local dev or Docker production.
uv run flask create-db
uv run flask run
docker compose up --build
Developer-first
Workspace scoping disappears behind elegant helpers.
from enferno.services.workspace import WorkspaceScoped
class Invoice(db.Model, WorkspaceScoped):
workspace_id = db.Column(db.Integer, db.ForeignKey('workspace.id'))
number = db.Column(db.String(50))
amount = db.Column(db.Numeric(10, 2))
# add your fields
from enferno.services.workspace import require_workspace_access
@app.get("/workspace//invoices/")
@require_workspace_access("member")
def invoices(workspace_id):
invoices = Invoice.for_current_workspace()
return render_template("invoices.html", invoices=invoices)
All queries auto-filter. Focus on value, not plumbing.
Boring tech that scales
No bleeding-edge surprises. Just tools that work at any scale.
Open source MIT
Build and sell without limits.
Need clarity?
No. Workspace scoping is automatic with ReadyKit helpers.
Yes. MIT license gives you total freedom to launch and sell.
Smooth. They never see workspaces, but they still get isolated data.
Stripe and Chargebee out of the box. Set BILLING_PROVIDER in your .env and you're done.
You own your users. No vendor lock-in, no per-MAU pricing, no third-party dependencies. Full control over the auth experience.