refactor(licensing): replace Pro branding with Community/Skipper/Admiral tiers (#375)

Eliminate all references to "Pro" across backend, frontend, and docs.
Internal tier value renamed from 'pro' to 'paid'; user-facing text now
uses the thematic tier names (Community, Skipper, Admiral).

- Rename LicenseTier 'pro' to 'paid' in backend and frontend types
- Rename requirePro guard to requirePaid, error code PRO_REQUIRED to PAID_REQUIRED
- Rename ProGate.tsx to PaidGate.tsx with updated copy
- Fix: trial users can now see upgrade/purchase cards in Settings
- Update all docs and openapi.yaml to use correct tier names
This commit is contained in:
Anso
2026-04-05 05:59:36 -04:00
committed by GitHub
parent a1804c8fbe
commit f516275834
33 changed files with 304 additions and 281 deletions
+2 -2
View File
@@ -69,7 +69,7 @@ The `code` field is present for specific error types:
| Code | Meaning |
|------|---------|
| `PRO_REQUIRED` | Endpoint requires a Pro (Skipper or Admiral) license |
| `PAID_REQUIRED` | Endpoint requires a Skipper or Admiral license |
| `ADMIRAL_REQUIRED` | Endpoint requires an Admiral license |
| `SCOPE_DENIED` | API token scope does not allow this operation |
@@ -104,7 +104,7 @@ Some endpoints are gated by license tier:
| Tier | Gated features |
|------|---------------|
| **Pro (Skipper+)** | Webhooks, Fleet snapshots, Stack rollback |
| **Skipper+** | Webhooks, Fleet snapshots, Stack rollback |
| **Admiral** | API Tokens, Scheduled Tasks |
Requests to gated endpoints on a lower tier return `403` with the appropriate error code.
+2 -2
View File
@@ -1,13 +1,13 @@
---
title: Atomic Deployments
description: Zero-downtime deployments with automatic rollback for Sencho Pro users.
description: Zero-downtime deployments with automatic rollback for Skipper and Admiral users.
---
<Note>
Atomic Deployments require a **Sencho Skipper** or **Admiral** license. Community Edition uses standard deployments without backup or rollback.
</Note>
Sencho Pro wraps every deployment in a safety net. Before applying changes, it backs up your current configuration. If the deployment fails, it automatically rolls back to the previous working state.
Sencho wraps every deployment in a safety net on Skipper and Admiral tiers. Before applying changes, it backs up your current configuration. If the deployment fails, it automatically rolls back to the previous working state.
## How it works
+1 -1
View File
@@ -4,7 +4,7 @@ description: Snapshot compose files across all nodes for disaster recovery and a
---
<Note>
Fleet-Wide Backups require a Sencho Pro license. The feature is available to Pro admins in the Fleet View.
Fleet-Wide Backups require a Skipper or Admiral license. The feature is available to admins in the Fleet View.
</Note>
Create point-in-time snapshots of every `compose.yaml` and `.env` file across your entire fleet, local and remote nodes alike. Snapshots are stored centrally in Sencho's database and can be browsed, previewed, and restored at any time.
+4 -4
View File
@@ -3,7 +3,7 @@ title: Fleet View
description: Monitor all your nodes from a single dashboard with real-time health metrics, search, filtering, and container drill-down.
---
The **Fleet** tab gives you a bird's-eye view of every node in your Sencho deployment, local and remote, on one screen. It is available to all tiers, with advanced features unlocked by Sencho Pro.
The **Fleet** tab gives you a bird's-eye view of every node in your Sencho deployment, local and remote, on one screen. It is available to all tiers, with advanced features unlocked by Skipper and Admiral.
<Frame>
<img src="/images/fleet-view/fleet-overview.png" alt="Fleet Overview showing health summary cards, toolbar, node cards, and tabs" />
@@ -20,7 +20,7 @@ The header shows **Fleet Overview** with a subtitle summarising the current stat
| Button | What it does |
|--------|--------------|
| **Check Updates** | Opens the Node Updates modal to view and apply Sencho version updates across your fleet (Pro) |
| **Check Updates** | Opens the Node Updates modal to view and apply Sencho version updates across your fleet (Skipper+) |
| **Refresh** | Re-fetches data from all nodes. Shows a spinner while loading |
## Community features
@@ -55,10 +55,10 @@ Click the **Refresh** button in the top-right to re-fetch data from all nodes. T
---
## Pro features
## Paid features
<Note>
The features below require a Sencho Pro license. Community users see an upgrade prompt in place of these controls.
The features below require a Skipper or Admiral license. Community users see an upgrade prompt in place of these controls.
</Note>
### Fleet health summary cards
+4 -4
View File
@@ -53,7 +53,7 @@ When you manage multiple nodes running different Sencho versions, the dashboard
## Fleet View
Monitor your entire infrastructure from a single screen. The fleet dashboard shows all nodes with health metrics, container counts, and resource usage. Pro users unlock fleet health summary cards, container drill-down, search, sorting, filtering, and critical node detection. [Learn more →](/features/fleet-view)
Monitor your entire infrastructure from a single screen. The fleet dashboard shows all nodes with health metrics, container counts, and resource usage. Skipper and Admiral users unlock fleet health summary cards, container drill-down, search, sorting, filtering, and critical node detection. [Learn more →](/features/fleet-view)
## Remote updates
@@ -85,7 +85,7 @@ Automate recurring maintenance tasks like stack restarts, fleet snapshots, and s
## RBAC & user management
Create viewer accounts with read-only access to dashboards, logs, and file contents, while keeping deploy and edit permissions locked to admins. Sencho Pro supports two roles: Admin (full access) and Viewer (read-only). [Learn more →](/features/rbac)
Create viewer accounts with read-only access to dashboards, logs, and file contents, while keeping deploy and edit permissions locked to admins. Sencho supports two roles on Skipper: Admin (full access) and Viewer (read-only), with three additional roles on Admiral. [Learn more →](/features/rbac)
## SSO & LDAP authentication
@@ -93,7 +93,7 @@ Authenticate with your existing identity provider. Sencho supports LDAP/Active D
## Atomic deployments
Pro users get automatic backup and rollback on every deployment. Before applying changes, Sencho snapshots your compose and environment files. If containers crash after deploy, the previous configuration is restored automatically. [Learn more →](/features/atomic-deployments)
Skipper and Admiral users get automatic backup and rollback on every deployment. Before applying changes, Sencho snapshots your compose and environment files. If containers crash after deploy, the previous configuration is restored automatically. [Learn more →](/features/atomic-deployments)
## Fleet-wide backups
@@ -109,4 +109,4 @@ Track every mutating action across your Sencho instance with a searchable audit
## Licensing & billing
Sencho is free for personal use with the Community tier. Pro unlocks RBAC, webhooks, fleet backups, atomic deployments, and advanced fleet features. Manage your license, view subscription details, and access the billing portal from Settings. [Learn more →](/features/licensing)
Sencho is free for personal use with the Community tier. Skipper and Admiral unlock RBAC, webhooks, fleet backups, atomic deployments, and advanced fleet features. Manage your license, view subscription details, and access the billing portal from Settings. [Learn more →](/features/licensing)
+1 -1
View File
@@ -7,7 +7,7 @@ description: Role-based access control for Sencho - manage admin, viewer, deploy
Multi-user support requires a **Sencho Skipper** or **Admiral** license. Community Edition supports a single admin account only. Intermediate roles (Deployer, Node Admin, Auditor) and scoped permissions require **Admiral**.
</Note>
Sencho supports role-based access control with five distinct roles. **Admin** and **Viewer** are available on all Pro tiers, while **Deployer**, **Node Admin**, and **Auditor** are exclusive to Admiral.
Sencho supports role-based access control with five distinct roles. **Admin** and **Viewer** are available on all paid tiers, while **Deployer**, **Node Admin**, and **Auditor** are exclusive to Admiral.
## Roles
+1 -1
View File
@@ -6,7 +6,7 @@ description: Check for outdated nodes and trigger over-the-air Sencho updates fr
Sencho can update remote nodes directly from the dashboard. When your primary instance is running a newer version than a remote node, a one-click update pulls the latest image and recreates the container automatically.
<Note>
Remote updates require a **Sencho Pro** license (Skipper or Admiral tier).
Remote updates require a **Skipper** or **Admiral** license.
</Note>
## Prerequisites
+2 -2
View File
@@ -103,7 +103,7 @@ Click the eye icon on any network row to open a detail panel showing:
<img src="/images/networks/network-inspect.png" alt="Network inspect panel showing IPAM config and connected containers" />
</Frame>
#### Network topology <span style={{fontSize: '0.75em', color: 'var(--brand)'}}>Pro</span>
#### Network topology <span style={{fontSize: '0.75em', color: 'var(--brand)'}}>Skipper</span>
Switch to the **Topology** view to see an interactive graph of your Docker networks and the containers connected to them. System networks (`bridge`, `host`, `none`) are excluded for clarity.
@@ -118,7 +118,7 @@ Switch to the **Topology** view to see an interactive graph of your Docker netwo
- A mini map in the bottom-right provides an overview
<Note>
Network Topology requires a Sencho Pro license (Skipper or Admiral). Community users see an upgrade prompt.
Network Topology requires a Skipper or Admiral license. Community users see an upgrade prompt.
</Note>
### Unmanaged
+2 -2
View File
@@ -51,7 +51,7 @@ The stack header shows different actions depending on whether the stack is runni
| **Stop** | `docker compose stop` | Stops containers without removing them. State is preserved. |
| **Restart** | `docker compose restart` | Restarts all containers in the stack. |
| **Update** | `docker compose pull` + `up -d` | Pulls the latest image tags and recreates containers. |
| **Rollback** | Restores backup | Reverts compose and env files to the pre-deploy snapshot and redeploys. Only shown when a backup exists (Pro). |
| **Rollback** | Restores backup | Reverts compose and env files to the pre-deploy snapshot and redeploys. Only shown when a backup exists (Skipper+). |
| **Delete** | `down --volumes` + removes files | Stops and removes containers and volumes, then deletes the stack directory. |
**When stopped:**
@@ -89,7 +89,7 @@ Right-click any stack in the sidebar to open the context menu. The menu adapts t
### Available actions
- **Alerts** - configure metric-based alerting rules for this stack
- **Labels** - assign organizational labels (Pro)
- **Labels** - assign organizational labels (Skipper+)
- **Check for updates** - manually trigger an image update check
- **Open App** - open the stack's web interface in a new tab (only shown when the stack is running and exposes a web port)
- **Deploy** - start the stack (shown when stopped)
+27 -27
View File
@@ -25,8 +25,8 @@ info:
## License Tiers
Some endpoints require a Pro or Admiral license. Requests to gated endpoints
on Community Edition return `403` with `code: "PRO_REQUIRED"` or `code: "ADMIRAL_REQUIRED"`.
Some endpoints require a Skipper or Admiral license. Requests to gated endpoints
on Community Edition return `403` with `code: "PAID_REQUIRED"` or `code: "ADMIRAL_REQUIRED"`.
contact:
name: Sencho
url: https://sencho.io
@@ -59,11 +59,11 @@ tags:
- name: API Tokens
description: Manage scoped API tokens (Admiral license required)
- name: Webhooks
description: Configure and trigger deployment webhooks (Pro license required)
description: Configure and trigger deployment webhooks (Skipper or Admiral license required)
- name: Nodes
description: Manage local and remote Sencho nodes
- name: Fleet
description: Multi-node fleet overview and snapshots (Pro license required)
description: Multi-node fleet overview and snapshots (Skipper or Admiral license required)
- name: Scheduled Tasks
description: Configure recurring automated operations (Admiral license required)
- name: Registries
@@ -131,8 +131,8 @@ components:
description: Human-readable error message.
code:
type: string
description: Machine-readable error code (e.g., `PRO_REQUIRED`, `SCOPE_DENIED`).
enum: [PRO_REQUIRED, ADMIRAL_REQUIRED, SCOPE_DENIED]
description: Machine-readable error code (e.g., `PAID_REQUIRED`, `SCOPE_DENIED`).
enum: [PAID_REQUIRED, ADMIRAL_REQUIRED, SCOPE_DENIED]
SuccessMessage:
type: object
@@ -503,8 +503,8 @@ components:
schema:
$ref: "#/components/schemas/Error"
example:
error: "This feature requires Sencho Pro."
code: "PRO_REQUIRED"
error: "This feature requires a Skipper or Admiral license."
code: "PAID_REQUIRED"
NotFound:
description: Resource not found.
content:
@@ -931,7 +931,7 @@ paths:
tags: [Stacks]
summary: Deploy stack
description: |
Runs `docker compose up -d` for the stack. On Pro tier, uses atomic deployment
Runs `docker compose up -d` for the stack. On Skipper/Admiral tier, uses atomic deployment
with automatic rollback on failure. Requires `stack:deploy` permission.
parameters:
- $ref: "#/components/parameters/stackName"
@@ -959,7 +959,7 @@ paths:
type: string
rolledBack:
type: boolean
description: Whether the stack was automatically rolled back (Pro tier).
description: Whether the stack was automatically rolled back (Skipper/Admiral tier).
/api/stacks/{stackName}/down:
post:
@@ -1075,7 +1075,7 @@ paths:
summary: Pull and recreate stack
description: |
Pulls latest images and recreates containers (`docker compose pull && up -d`).
On Pro tier, uses atomic update with automatic rollback on failure.
On Skipper/Admiral tier, uses atomic update with automatic rollback on failure.
Requires `stack:deploy` permission.
parameters:
- $ref: "#/components/parameters/stackName"
@@ -1112,7 +1112,7 @@ paths:
operationId: rollbackStack
tags: [Stacks]
summary: Rollback stack
description: Restores the stack to its previous deployment state. Requires Pro license and `stack:deploy` permission.
description: Restores the stack to its previous deployment state. Requires Skipper or Admiral license and `stack:deploy` permission.
parameters:
- $ref: "#/components/parameters/stackName"
- $ref: "#/components/parameters/nodeId"
@@ -1410,7 +1410,7 @@ paths:
operationId: listWebhooks
tags: [Webhooks]
summary: List webhooks
description: Returns all configured webhooks with masked secrets. Requires Pro license.
description: Returns all configured webhooks with masked secrets. Requires Skipper or Admiral license.
responses:
"200":
description: Array of webhook objects.
@@ -1430,7 +1430,7 @@ paths:
summary: Create webhook
description: |
Creates a new webhook for a stack. The webhook secret is auto-generated and only
returned in the creation response. Requires Pro license and admin role.
returned in the creation response. Requires Skipper or Admiral license and admin role.
requestBody:
required: true
content:
@@ -1483,7 +1483,7 @@ paths:
operationId: updateWebhook
tags: [Webhooks]
summary: Update webhook
description: Updates webhook configuration. Requires Pro license and admin role.
description: Updates webhook configuration. Requires Skipper or Admiral license and admin role.
parameters:
- $ref: "#/components/parameters/idPath"
requestBody:
@@ -1525,7 +1525,7 @@ paths:
operationId: deleteWebhook
tags: [Webhooks]
summary: Delete webhook
description: Permanently deletes a webhook. Requires Pro license and admin role.
description: Permanently deletes a webhook. Requires Skipper or Admiral license and admin role.
parameters:
- $ref: "#/components/parameters/idPath"
responses:
@@ -1547,7 +1547,7 @@ paths:
operationId: getWebhookHistory
tags: [Webhooks]
summary: Get webhook execution history
description: Returns the execution log for a webhook. Requires Pro license.
description: Returns the execution log for a webhook. Requires Skipper or Admiral license.
parameters:
- $ref: "#/components/parameters/idPath"
responses:
@@ -1882,7 +1882,7 @@ paths:
operationId: getFleetNodeStacks
tags: [Fleet]
summary: List stacks on a fleet node
description: Returns stack names from a specific fleet node. Requires Pro license.
description: Returns stack names from a specific fleet node. Requires Skipper or Admiral license.
parameters:
- name: nodeId
in: path
@@ -1922,7 +1922,7 @@ paths:
operationId: getFleetNodeStackContainers
tags: [Fleet]
summary: List containers in a fleet node stack
description: Returns containers for a specific stack on a specific fleet node. Requires Pro license.
description: Returns containers for a specific stack on a specific fleet node. Requires Skipper or Admiral license.
parameters:
- name: nodeId
in: path
@@ -1992,7 +1992,7 @@ paths:
"401":
$ref: "#/components/responses/Unauthorized"
"403":
$ref: "#/components/responses/ProRequired"
$ref: "#/components/responses/Forbidden"
/api/fleet/nodes/{nodeId}/update:
post:
@@ -2019,7 +2019,7 @@ paths:
"401":
$ref: "#/components/responses/Unauthorized"
"403":
$ref: "#/components/responses/ProRequired"
$ref: "#/components/responses/Forbidden"
"404":
description: Node not found.
content:
@@ -2066,14 +2066,14 @@ paths:
"401":
$ref: "#/components/responses/Unauthorized"
"403":
$ref: "#/components/responses/ProRequired"
$ref: "#/components/responses/Forbidden"
/api/fleet/snapshots:
post:
operationId: createFleetSnapshot
tags: [Fleet]
summary: Create fleet snapshot
description: Creates a point-in-time backup of all compose files across all nodes. Requires Pro license and admin role.
description: Creates a point-in-time backup of all compose files across all nodes. Requires Skipper or Admiral license and admin role.
requestBody:
required: false
content:
@@ -2100,7 +2100,7 @@ paths:
operationId: listFleetSnapshots
tags: [Fleet]
summary: List fleet snapshots
description: Returns paginated fleet snapshots. Requires Pro license.
description: Returns paginated fleet snapshots. Requires Skipper or Admiral license.
parameters:
- name: limit
in: query
@@ -2138,7 +2138,7 @@ paths:
operationId: getFleetSnapshot
tags: [Fleet]
summary: Get snapshot details
description: Returns full snapshot details including all captured files grouped by node and stack. Requires Pro license.
description: Returns full snapshot details including all captured files grouped by node and stack. Requires Skipper or Admiral license.
parameters:
- $ref: "#/components/parameters/idPath"
responses:
@@ -2158,7 +2158,7 @@ paths:
operationId: deleteFleetSnapshot
tags: [Fleet]
summary: Delete snapshot
description: Permanently deletes a fleet snapshot. Requires Pro license and admin role.
description: Permanently deletes a fleet snapshot. Requires Skipper or Admiral license and admin role.
parameters:
- $ref: "#/components/parameters/idPath"
responses:
@@ -2180,7 +2180,7 @@ paths:
operationId: restoreFleetSnapshot
tags: [Fleet]
summary: Restore from snapshot
description: Restores a specific stack on a specific node from the snapshot. Optionally redeploys after restore. Requires Pro license and admin role.
description: Restores a specific stack on a specific node from the snapshot. Optionally redeploys after restore. Requires Skipper or Admiral license and admin role.
parameters:
- $ref: "#/components/parameters/idPath"
requestBody: