Platform overview
Summarized from PRODUCT-ARCHITECTURE-PLAN.md §1–3. See the canonical doc for full detail.
Executive summary
TenancyEngine is a multi-tenant SaaS platform engine (not a boilerplate template) that powers multiple independent SaaS products. Three public brands operate the stack:
| Brand | Domain | Role |
|---|---|---|
| TenancyEngine | tenancyengine.com | Control plane — signup, purchase, app registration, tenant management |
| SaaSRuntime | saasruntime.com | Runtime plane — customer app auth, APIs, webhooks, OAuth |
| TenaBill | tenabill.com | Billing plane — subscriptions, invoices, payment methods, usage (including AI credits) |
First-party reference applications validate the platform under real requirements:
- VectraLabel — Food label design & printing (USA/Canada compliance)
- Cyntrix Traders — AI-assisted stock analysis (first consumer of platform AI credits)
- StudioDash — Studio management (scheduling, booking)
External vendors will later register their own apps on TenancyEngine using the same runtime and billing stack.
Vision & principles
What we are building
- A multi-tenant engine: tenant resolution, isolation, auth, billing hooks, metering, AI gateway, operational tooling
- Not a SaaSForge-style starter kit — apps bring their own UX; the platform provides shared infrastructure
Why first-party apps exist
VectraLabel, Cyntrix Traders, and StudioDash are reference implementations and production products that dogfood auth, billing, tenancy, and AI before external vendors depend on the platform.
Design principles
| Principle | Meaning |
|---|---|
| Single identity issuer | auth.saasruntime.com issues tokens for all apps and consoles (per environment) |
| Apps never embed TenancyEngine URLs | Production SDK config uses SaaSRuntime only |
| Separate billing UX | Money flows and Stripe UI live on TenaBill |
| Environment parity | dev / staging / prod share the same hostname pattern |
| Data isolation by default | Tenant ID on every request; isolation strategy explicit per app tier |
Ecosystem diagram
┌─────────────────────────────────────────┐
│ TENANCYENGINE │
│ tenancyengine.com (control plane) │
│ • Marketing / pricing │
│ • console.* — register apps, tenants │
│ • Team access, API keys (display) │
│ • AI credit packs (purchase UI) │
└───────────────┬─────────────────────────┘
│ admin API / SSO
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ SAASRUNTIME │ │ TENABILL │ │ FIRST-PARTY │
│ saasruntime.com │ │ tenabill.com │ │ SAAS APPS │
│ • auth.* │◄────│ • app.* billing UI │ │ • VectraLabel │
│ • api.* │ │ • Stripe customer │ │ • Cyntrix │
│ • OAuth/OIDC │ │ • Invoices / usage │ │ • StudioDash │
│ • Tenant API │ └─────────────────────┘ └────────┬────────┘
│ • AI meter API │◄─────────────────────────────────────────┘
└─────────────────┘ OAuth + API onlyNext steps
- Local development — start Docker, APIs, and the console on
*-dev.*hostnames - Hostnames & domains — production and non-production hostname map
- MFA & notifications — identity, SendGrid, and Twilio decisions