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, Stripe billing, 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.
Hosted checkout, subscription lifecycle, metered usage.
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 Stripe secrets.
GOOGLE_OAUTH_CLIENT_ID=your_id
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PRICE_ID=price_...
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.
Nope. Billing hooks are optional, remove them or bring your own.
You own your users. No vendor lock-in, no per-MAU pricing, no third-party dependencies. Full control over the auth experience.