This demo shows the complete self-service cloud provisioning flow: a customer orders a Cozystack tenant, gets dashboard credentials, deploys resources, and sees costs — all through WHMCS.
Narration: "A customer visits our store and orders a Cozystack tenant."
- Open https://whmcs.dev.infra.aenix.org
- Log in (or show already logged in)
- Go to Store → Cozystack → Order Now
- Enter a tenant name (e.g.
acmecorp) - Click Continue → Checkout → Complete Order
- Wait ~20 seconds for provisioning
Key points:
- Tenant is automatically created in Kubernetes
- Keycloak user is provisioned for dashboard access
- Credentials appear on the service page immediately
Narration: "The customer immediately sees their dashboard credentials."
- Navigate to the new service in My Products & Services
- Show the Dashboard Access panel:
- Dashboard URL
- Username
- Temporary password
- Point out "Getting Started" prompt for new tenants
Key points:
- No manual setup needed — everything is automated
- Password must be changed on first login
- Page auto-refreshes every 60 seconds
Narration: "The customer clicks through to their cloud dashboard."
- Click Visit Website or the dashboard URL
- Keycloak login page appears
- Enter the username and password from WHMCS
- Cozystack Dashboard loads
Key points:
- SSO via Keycloak — one click from WHMCS to cloud management
- User sees only their own tenant's resources
- Full self-service: deploy VMs, databases, storage
Narration: "Let's deploy a managed database."
- In the Cozystack Dashboard, create a MariaDB instance
- Wait for it to come up (~1 min)
- Go back to WHMCS → service page
- Click Resources in the sidebar
- Show the resource table with workloads and quantities
Key points:
- Resources appear automatically — no manual tracking
- Workload names, resource types, and quantities all visible
- Data comes directly from the Kubernetes billing API
Narration: "The customer can see exactly what their infrastructure costs."
- Click Hourly Costs in the sidebar
- Shows per-resource costs with unit prices
- Total hourly cost calculated automatically
- Cost breakdown chart
- Click Monthly Costs
- Accumulated costs for the current month
- Based on hourly billing data
Key points:
- Transparent pricing — no surprises
- Costs calculated from real usage data
- Hourly granularity, monthly aggregation
Narration: "If a customer wants to leave, they can self-service cancel."
- On the service page, click Cancel Service
- Warning appears with inline confirmation
- Type the tenant name to confirm
- Service is cancelled, all resources deleted
Key points:
- Destructive action requires explicit confirmation
- Tenant and Keycloak user cleaned up automatically
- No orphaned resources in Kubernetes
| Feature | Implementation |
|---|---|
| Tenant provisioning | K8s Tenant CR via API |
| User management | Keycloak CRD (EDP operator) |
| Billing | Hourly cron → WHMCS Billable Items |
| Monthly invoicing | Automated on 1st of month |
| Suspend/unsuspend | Keycloak user enable/disable |
| Static analysis | PHPStan level 5, 56 unit tests |
| Deployment | One-command deploy via virtctl |
Customer → WHMCS → Module → K8s API → Cozystack
→ Keycloak (user provisioning)
→ Billing API (usage tracking)
All infrastructure managed as code. No manual intervention required for the complete lifecycle: order → provision → use → bill → cancel.