The states the portal-admin console must render — the ones that decide whether the
UI is safe. Loading and empty for users and catalog; the two fail-closed authz cases that keep a
tenant inside its own walls (a suspended portal and an invite into a portal you don't
own); and the Stripe Connect onboarding state machine, including the case where a false
"active" would be a money bug.
(i1) Users · loading
Users
Loading…
(i2) Users · just you — newly provisioned portal
Users
1 in this portal
It's just you so far
You're the admin of this portal. Invite your team to give them access to the apps in your
catalog.
(i3) Catalog · nothing enabled yet
Your catalog
0 apps enabled
No apps in your portal yet
Your launcher is empty. Add apps from the FuzeFront catalog to make them available to your
users — you choose which appear and in what order.
(i4) Couldn't load
Users
We couldn't load this
Something went wrong on our end. Your access hasn't
changed — try again.
(i5) Portal suspended — 403, fail-closed for the whole console
Northwind · Console
Suspended
This portal is suspended
A FuzeFront administrator has suspended this portal, so its console is read-blocked.
Your data is retained. Contact FuzeFront support to resolve it — you're signed in, this
is not a login problem.
(i6) Invite into a portal you don't own — 403, no cross-tenant leak
Can't invite here
You don't administer this portal
You're a Portal Admin, but not of the portal in this request. The console never accepts
a portal id from the URL — it's resolved from your session. Nothing about another
portal's users is shown here.
(i7) Billing · Connect not started — the entry CTA
Reseller payouts · Connect
Charge your own customers
Not started
Start billing your customers
Onboard a Stripe Connect account to charge your own customers and receive payouts. It takes
a few minutes on Stripe's secure onboarding — you'll come right back here.
(i8) Billing · onboarding in progress — never a false "active"
Reseller payouts · Connect
In progress
✓
Account created
2
Business details needed
Stripe still needs identity or bank information before you can accept charges.
3
Charges & payouts
charges_enabled is still false — not active yet.
(i9) Billing · restricted or return failed — actionable, never blank
Reseller payouts · Connect
Restricted
Stripe needs more from you
Your Connect account is restricted — payouts are paused until Stripe's outstanding
requirements are met. This also covers a failed return from onboarding (the account
link expired). Re-open onboarding to fix it.
(i10) Billing · add-price blocked until charges enabled — fail-closed
Add a price
Finish onboarding first
You can't publish a price until Stripe has enabled charges on your account
(charges_enabled = true). Complete Connect onboarding, then
add prices.
Contract. (i1–i4) cover in-flight / empty / non-2xx for the real
@fuzefront/security-client member surface and the anticipated
portal_apps catalog. (i5) a suspended portal returns
403 PORTAL_SUSPENDED for the whole console — shown in place, not a redirect.
(i6) the portal is always resolved from the session; a request against a portal you don't
administer is 403 FORBIDDEN_PORTAL with zero cross-tenant data. (i7–i10) the
Connect state machine (anticipated, FF-EPIC-15): status derives from charges_enabled
/payouts_enabled /onboarding_status — an account is "active" only when
both flags are true, so an in-progress or restricted account is never rendered as active, and a
price cannot be published while charges are disabled.
Review · portal-admin-consoles approve or reject each flow ↓