Console sign-in and workspace access
Paybond's /console/login page is for existing workspaces. If a tenant realm has already been created and activated, its operators sign in there with tenant credentials.
Use /console/login when the user already belongs to a Paybond workspace on any of these plans:
| Plan | Should use /console/login? | What to expect after login |
|---|---|---|
| Free | Yes | Existing workspace owners and invited operators can sign in, but private dashboards and paid plan controls stay gated. |
| Starter | Yes | Sign in for private operator dashboards and tenant operations. |
| Team | Yes | Sign in for private dashboards, disputes, audit exports, and ongoing operator workflows. |
| Business | Yes | Sign in for production console access, billing, SSO/RBAC setup where configured, and managed policy workflows. |
| Enterprise | Yes | Sign in for the contracted tenant rollout after the workspace is provisioned through sales-led onboarding. |
Use signup instead when
- the buyer does not have a workspace yet
- the buyer is choosing a self-serve plan for the first time
- the buyer needs a new tenant realm to be provisioned
That means the split is straightforward:
/signupis for creating a workspace/console/loginis for entering an existing workspace
UI handling
- Public header
Sign ingoes to/console/login. - Landing-page "operator console" CTA should go to sign-in, not straight to a protected console route.
- If a user is bounced out of a protected
/console/*route, the app should preserve the requested destination and return them there after successful login. - Login page copy should explain that sign-in is for existing workspaces across Free, Starter, Team, Business, and Enterprise.
Backend wiring
The sign-in path is already connected end to end:
- The login form posts credentials to the Next.js server action in
apps/admin/app/console/login/actions.ts. - That server action calls the Go gateway
POST /v1/auth/login. - The gateway validates the user, resolves the tenant grant, and returns an access token plus refresh token.
- The admin app stores those tokens in httpOnly cookies.
- Protected
/console/*routes use refresh-on-demand middleware and server-sidegatewayFetch(...)calls to keep requests authenticated. - The Go gateway remains the authority for principal resolution and billing state.
- Harbor (Rust) receives tenant-scoped Bearer credentials minted by the gateway for runtime enforcement.
Plan and role boundaries
Signing in does not guarantee every console section is visible. After authentication:
- RBAC determines which routes the principal may open.
- plan features determine which private surfaces are enabled
- gateway and Harbor still enforce tenant scope and commercial limits on every protected call
So the rule is:
- all existing plans can sign in
- only entitled roles and enabled plan features can use specific console surfaces