Provisioning a new tenant portal: an organization, its slug (the tenant's front door), an owner to invite as the first Portal Admin, and how it bills. Submitting kicks off provisioning — the portal starts in a pending-invite state until the owner accepts.
Shown in the shell header and the portals list. Editable later.
Lowercase, unique, immutable. Becomes the tenant's default subdomain (contoso.fuzefront.com) until a custom domain is verified.
Invited as the first Portal Admin. They set their own password on accept — you never see it.
Contract (anticipated — @fuzefront/portal-client).
POST /api/v1/admin/portals (PortalCreate → 201 Portal).
Body: name, slug, ownerEmail, billingMode
(free | platform | reseller). Slug uniqueness is validated
server-side; a taken slug returns 409 SLUG_TAKEN shown inline on the field (see states
frame, c). The new portal is created status: provisioned-pending-invite; the owner's
invitation is dispatched as part of provisioning. reseller mode is what surfaces the
Connect billing console — the plan choice here is the switch.