Service List
The service list is the /{workspace}/services view — the landing page for a workspace. It shows every service in the current workspace as a card, with search and filtering across the top and a Create Service action.
Layout
- A header with the workspace title, a service count, search, and filters.
- Below it, a responsive grid of service cards (one card per service).
The list renders every matching service at once — there is no pagination and no sort control. Cards appear in the order the workspace returns them. Search and filtering both run client-side over the services already loaded for the workspace, so results update instantly as you type.
Header
The header shows the heading Services and a subtitle of the form {n} services in {workspace}. On the right is the Create Service button (a + icon), which opens the new-service flow at /{workspace}/services/new.
When a workspace has no services at all, the header is simplified to just the title and workspace name (search and filters are hidden); the create action then lives in the empty state below.
Search
A single search box (Search services…) filters the list as you type. It matches, case-insensitively, on:
- service name
- service subdomain
- service slug
There is no special query syntax — it is a substring match on those three fields.
Filters
A Filters button opens a dialog with two filters:
| Filter | Options |
|---|---|
| Status | All statuses, Active, Draft, Archived |
| Tag | All tags, plus every tag defined in the workspace |
Choose values and click Apply Filters (or Clear to reset). The Filters button shows a count badge of how many filters are active. Applied filters also appear as removable chips under the header (e.g. Status: Active ✕, Tag: billing ✕), and a Clear filters button resets everything except the search text.
The list view currently offers Status and Tag filters only. There are no date or owner filters, and no sort/order options.
Service card
Each card links to the service and summarizes its state.
- Name — links to the schema editor (
/services/{id}/editor). - Service status badge —
Active,Draft, orArchived(see below). - Hosting badge —
Hosted(cloud) orSelf-hosted(server), derived from the workspace subscription. - Deployed badge — shown when the service has an active Apso deployment.
- Billing badge (hosted plans, deployed services) —
Includedor+${n}/modepending on whether the service is within the plan’s included allotment. - Repository — when a GitHub repo is connected, the
owner/repoand branch are shown. - Tags — up to two tag chips, then
+N more. - Metadata row — entity count (from the schema), owner name (or Not assigned), and a relative timestamp (
Deployed 2h agofor deployed hosted services, otherwiseUpdated 2h ago). - Actions menu (
⋮) — context-dependent links: View Dashboard (hosted + deployed), Edit Schema, API Keys (hosted + deployed), Open API (when a deployed URL exists), and Settings. - Build status badge (hosted plans only) and the subdomain appear on the right.
- Health dot (hosted plans only) — a colored dot reflecting deployment health.
Status, build status, and health are three different things
The list surfaces three independent state indicators. Do not conflate them — in particular, “Error” is a build status, not a service status.
Service status (the badge next to the name) — the lifecycle state of the service record:
| Status | Meaning |
|---|---|
| Active | Live/in-use service |
| Draft | Not yet finalized |
| Archived | Retired |
Build status (hosted plans only, right side of the card) — the state of the most recent build/provision:
| Category | Examples | Color |
|---|---|---|
| Ready | build complete | green |
| Building / in progress | scaffolding, provisioning, migrating | yellow (pulsing) |
| Error | a failed build | red |
| Intermediate | DatabaseProvisioned, Scaffolded, StackCreated, … | blue |
| New / pending | not started | neutral |
Deployment health (hosted plans only, the dot before the name) — the state of the active deployment: Live (green), Deploying (yellow, pulsing), Failed (red), Inactive/Not deployed (muted).
Empty and loading states
- Loading — cards render as skeleton placeholders while services load.
- No services in the workspace — a welcome state (
Welcome to {workspace}) prompting you to create your first service, with the Create Service button. - No matches for the current filters — a “No services match your filters” state with a Clear all filters button.
Create Service
The Create Service button (header, or the empty-state button when the workspace has no services) navigates to /{workspace}/services/new. Creating a service requires an active workspace; the button is always available to workspace members from this view.
Related
- Service Management — creating, configuring, and deleting services
- Dashboard
- API Keys