Setup Wizard — UX Flow Specification

Audience: designers and engineers implementing the Stella Ops Setup Wizard across CLI and UI.

This document defines the user experience flows for both the CLI and UI implementations of the Stella Ops Setup Wizard, ensuring feature parity across surfaces. Stella Ops is the self-hosted DevOps vulnerability-scanner and release control plane; the wizard bootstraps a fresh installation’s core control-plane services and seeds initial advisory/VEX sources.

Scope note. Section 1.3 records the current implemented boundary of the live browser wizard. Sections 2 onward include broader product/backlog design material (multi-connector and tenant-onboarding flows) that is not all shipped — treat §1.3 as authoritative for what runs today.

1. Design Principles

1.1 Core UX Goals

  1. Self-serve clarity - Users should complete setup without reading external documentation
  2. Progressive disclosure - Show only relevant options at each step
  3. Fail-forward - Guide users through errors with actionable fixes
  4. Parity - CLI and UI offer identical capabilities
  5. Resume-friendly - Support interruption and resumption

1.2 Terminology

TermDefinition
StepA discrete configuration unit (e.g., “Database Setup”)
CheckA Doctor diagnostic that validates a step
FixA remediation command generated by Doctor
ConnectorA specific integration provider (e.g., “HashiCorp Vault”)

1.3 Current implemented boundary (2026-04)

The live browser wizard is now intentionally narrower than some of the broader design material later in this document.


2. CLI Flow

2.1 Command Structure

# Interactive setup (default)
stella setup

# Non-interactive with config file
stella setup --config setup.yaml

# Reconfigure existing installation
stella setup --reconfigure

# Resume interrupted setup
stella setup --resume

# Specific step only
stella setup --step database

# Skip optional steps
stella setup --skip vault,scm

2.2 Global Options

OptionTypeDescription
--configpathYAML configuration file
--non-interactiveflagFail on missing required input
--reconfigureflagRe-run on existing installation
--resumeflagContinue from last incomplete step
--step <id>stringRun specific step only
--skip <ids>stringComma-separated steps to skip
--verboseflagShow detailed progress
--output <format>enumtext, json, yaml

2.3 Interactive Flow

$ stella setup

   ____  _       _ _        ___
  / ___|| |_ ___| | | __ _ / _ \ _ __  ___
  \___ \| __/ _ \ | |/ _` | | | | '_ \/ __|
   ___) | ||  __/ | | (_| | |_| | |_) \__ \
  |____/ \__\___|_|_|\__,_|\___/| .__/|___/
                                |_|
  Setup Wizard v2026.01

  This wizard will guide you through the initial configuration.
  Press Ctrl+C at any time to exit. Progress is saved automatically.

  Detected environment:
    - Platform: linux-x64
    - Docker: available
    - PostgreSQL: not detected
    - Valkey: not detected

  [1/10] Database Setup
  ----------------------

  ? PostgreSQL host: localhost
  ? PostgreSQL port: [5432]
  ? Database name: [stellaops]
  ? Username: stellaops_admin
  ? Password: ********

  Testing connection...

  [OK] Connected to PostgreSQL 16.2
  [OK] User has CREATE SCHEMA permission
  [OK] Database 'stellaops' accessible

  Running Doctor checks...

  [PASS] check.database.connectivity
  [PASS] check.database.permissions
  [PASS] check.database.version

  Database setup complete.

  [2/10] Valkey/Redis Setup
  -------------------------
  ...

2.4 Error Handling Flow

  Testing connection...

  [FAIL] Could not connect to PostgreSQL

  Likely causes:
    1. PostgreSQL is not running
    2. Firewall blocking port 5432
    3. Incorrect host/port

  Suggested fixes:

  # If using Docker Compose:
  docker compose -f devops/compose/docker-compose.yml up -d postgres

  # If using systemd:
  sudo systemctl start postgresql
  sudo systemctl enable postgresql

  # Verify connectivity:
  pg_isready -h localhost -p 5432

  ? Retry connection? [Y/n]

2.5 Multi-Connector Flow

  [6/10] Vault Integration (Optional)
  -----------------------------------

  ? Configure a secrets provider? [Y/n] Y

  Detected: VAULT_ADDR=https://vault.example.com:8200

  ? Use detected HashiCorp Vault? [Y/n] Y

  ? Vault address: [https://vault.example.com:8200]
  ? Authentication method:
    > Token
      AppRole
      Kubernetes

  ? Vault token: ********

  Testing connection...

  [OK] Vault connected (version 1.15.0)
  [OK] KV v2 mount 'secret' accessible

  ? Add another secrets provider? [y/N] y

  ? Select provider:
      HashiCorp Vault
    > Azure Key Vault
      AWS Secrets Manager
      File Provider

  ...

2.6 Skip Flow

  [7/10] SCM Integration (Optional)
  ---------------------------------

  ? Configure source control integration? [Y/n] n

  Skipping SCM integration.
  Note: You can configure this later via 'stella setup --step scm'

  Skipped steps can be completed from:
    - CLI: stella setup --reconfigure
    - UI:  Settings > Configuration Wizard

2.7 Non-Interactive Mode

# setup.yaml
database:
  host: postgres.example.com
  port: 5432
  database: stellaops
  username: stellaops_admin
  password: ${POSTGRES_PASSWORD}  # Environment variable

valkey:
  host: valkey.example.com
  port: 6379
  password: ${VALKEY_PASSWORD}

vault:
  - type: hashicorp
    address: https://vault.example.com:8200
    authMethod: kubernetes
    role: stellaops

scm:
  - type: github-app
    appId: "123456"
    installationId: "789012"
    privateKeyPath: /etc/stellaops/github-app.pem

notifications:
  - type: slack
    name: engineering
    webhookUrl: ${SLACK_WEBHOOK_URL}

environments:
  - name: dev
    displayName: Development
    orderIndex: 0
  - name: staging
    displayName: Staging
    orderIndex: 1
  - name: prod
    displayName: Production
    orderIndex: 2
    isProduction: true
    requiredApprovals: 2
$ stella setup --config setup.yaml --non-interactive

[1/10] Database Setup.............. [OK]
[2/10] Valkey/Redis Setup.......... [OK]
[3/10] Database Migrations......... [OK]
[4/10] Admin Bootstrap............. [OK]
[5/10] Crypto Profile.............. [OK]
[6/10] Vault Integration........... [OK]
[7/10] SCM Integration............. [OK]
[8/10] Notification Channels....... [OK]
[9/10] Environment Definition...... [OK]
[10/10] Agent Registration......... [SKIP] (no agents defined)

Setup complete. System status: Operational

Run 'stella doctor run' for full diagnostics.

2.8 Completion Output

  Setup Complete!
  ===============

  Status: Operational

  Completed steps:
    [x] Database Setup
    [x] Valkey/Redis Setup
    [x] Database Migrations
    [x] Admin Bootstrap
    [x] Crypto Profile
    [x] Vault Integration
    [x] SCM Integration
    [x] Notification Channels

  Skipped steps:
    [ ] Identity Provider (OIDC/LDAP)
    [ ] Environment Definition
    [ ] Agent Registration
    [ ] Vulnerability Feeds

  To reach Production-Ready status, configure:
    - Identity Provider: stella setup --step identity
    - Environments: stella setup --step environments
    - Agents: stella setup --step agents

  Next steps:
    1. Run first scan: stella scan image --image <digest>
    2. View dashboard: https://localhost:8080
    3. Full diagnostics: stella doctor run --mode full

  Setup report saved to: ~/.stellaops/setup-report-2026-01-13.md

3. UI Flow

3.1 First-Run Blocking

When the system detects first-run (no database connection or admin user):

  1. Intercept all routes - Redirect to /setup
  2. Show blocking modal - Cannot dismiss without completing required steps
  3. Progress indicator - Show completion percentage

3.2 Wizard Layout

+------------------------------------------------------------------+
|  [StellaOps Logo]                              [?] Help  [X] Exit |
+------------------------------------------------------------------+
|                                                                    |
|  SETUP WIZARD                                          Step 1 of 10|
|                                                                    |
|  +------------+  +------------+  +------------+  +------------+    |
|  | Database   |  | Valkey     |  | Migrations |  | Admin      |    |
|  |   [1]      |  |   [2]      |  |   [3]      |  |   [4]      |    |
|  | [CURRENT]  |  | [PENDING]  |  | [PENDING]  |  | [PENDING]  |    |
|  +------------+  +------------+  +------------+  +------------+    |
|                                                                    |
|  +------------+  +------------+  +------------+  +------------+    |
|  | Crypto     |  | Vault      |  | SCM        |  | Notify     |    |
|  |   [5]      |  |   [6]      |  |   [7]      |  |   [8]      |    |
|  | [PENDING]  |  | [OPTIONAL] |  | [OPTIONAL] |  | [OPTIONAL] |    |
|  +------------+  +------------+  +------------+  +------------+    |
|                                                                    |
|  +------------+  +------------+                                    |
|  | Environments|  | Agents    |                                    |
|  |   [9]      |  |   [10]    |                                    |
|  | [OPTIONAL] |  | [OPTIONAL] |                                    |
|  +------------+  +------------+                                    |
|                                                                    |
+------------------------------------------------------------------+
|                                                                    |
|  DATABASE SETUP                                                    |
|  ---------------                                                   |
|                                                                    |
|  Configure PostgreSQL connection for Stella Ops data storage.      |
|                                                                    |
|  +----------------------------------------------------------+     |
|  | Host        [localhost                              ]     |     |
|  | Port        [5432                                   ]     |     |
|  | Database    [stellaops                              ]     |     |
|  | Username    [                                       ]     |     |
|  | Password    [                                       ]     |     |
|  | SSL Mode    [prefer                              v  ]     |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  [Test Connection]                                                 |
|                                                                    |
|  Connection Status: Not tested                                     |
|                                                                    |
+------------------------------------------------------------------+
|                                                [Skip] [Continue]   |
+------------------------------------------------------------------+

3.3 Step States

StateIconColorDescription
PENDINGCircleGrayNot yet started
CURRENTCircle+RingBlueCurrently active
PASSEDCheckmarkGreenCompleted successfully
FAILEDXRedFailed validation
SKIPPEDDashOrangeExplicitly skipped
OPTIONALCircle+OGrayCan be skipped

3.4 Connection Test Flow

+------------------------------------------------------------------+
|                                                                    |
|  [Test Connection]                                                 |
|                                                                    |
|  +----------------------------------------------------------+     |
|  |  Testing connection...                                    |     |
|  |  [=========>                                      ] 30%   |     |
|  |                                                           |     |
|  |  [OK] TCP connection to localhost:5432                    |     |
|  |  [ ] Authenticating...                                    |     |
|  |  [ ] Checking permissions...                              |     |
|  +----------------------------------------------------------+     |
|                                                                    |
+------------------------------------------------------------------+

3.5 Error State with Fixes

+------------------------------------------------------------------+
|                                                                    |
|  CONNECTION FAILED                                                 |
|                                                                    |
|  +----------------------------------------------------------+     |
|  |  [!] Could not connect to PostgreSQL                      |     |
|  |                                                           |     |
|  |  Error: Connection refused (ECONNREFUSED)                 |     |
|  |                                                           |     |
|  |  LIKELY CAUSES:                                           |     |
|  |    1. PostgreSQL is not running                           |     |
|  |    2. Firewall blocking port 5432                         |     |
|  |    3. Incorrect host or port                              |     |
|  |                                                           |     |
|  |  SUGGESTED FIXES:                                         |     |
|  |                                                           |     |
|  |  If using Docker Compose:                                 |     |
|  |  +------------------------------------------------------+ |     |
|  |  | docker compose up -d postgres                   [Copy]| |     |
|  |  +------------------------------------------------------+ |     |
|  |                                                           |     |
|  |  If using systemd:                                        |     |
|  |  +------------------------------------------------------+ |     |
|  |  | sudo systemctl start postgresql                [Copy]| |     |
|  |  +------------------------------------------------------+ |     |
|  |                                                           |     |
|  |  Verify connectivity:                                     |     |
|  |  +------------------------------------------------------+ |     |
|  |  | pg_isready -h localhost -p 5432                [Copy]| |     |
|  |  +------------------------------------------------------+ |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|                           [Retry] [Edit Configuration]             |
+------------------------------------------------------------------+

3.6 Multi-Connector Interface

+------------------------------------------------------------------+
|                                                                    |
|  VAULT INTEGRATION (Optional)                                      |
|  ---------------------------                                       |
|                                                                    |
|  Configure secrets management providers.                           |
|                                                                    |
|  CONFIGURED PROVIDERS:                                             |
|  +----------------------------------------------------------+     |
|  |  [V] HashiCorp Vault                          [Edit] [X] |     |
|  |      https://vault.example.com:8200                       |     |
|  |      Status: Connected                                    |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  [+ Add Another Provider]                                          |
|                                                                    |
|  +----------------------------------------------------------+     |
|  |  SELECT PROVIDER TYPE:                                    |     |
|  |                                                           |     |
|  |  [HashiCorp Vault]  [Azure Key Vault]                     |     |
|  |  [AWS Secrets Mgr]  [File Provider]                       |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  Note: You can add up to 5 vault integrations.                     |
|                                                                    |
+------------------------------------------------------------------+
|                                                [Skip] [Continue]   |
+------------------------------------------------------------------+

3.7 Doctor Check Results Panel

+------------------------------------------------------------------+
|                                                                    |
|  VALIDATION RESULTS                                                |
|  ------------------                                                |
|                                                                    |
|  +----------------------------------------------------------+     |
|  |  [PASS] check.database.connectivity                       |     |
|  |         PostgreSQL connection successful                  |     |
|  |                                                           |     |
|  |  [PASS] check.database.permissions                        |     |
|  |         User has required permissions                     |     |
|  |                                                           |     |
|  |  [PASS] check.database.version                            |     |
|  |         PostgreSQL 16.2 (minimum: 16.0)                   |     |
|  |                                                           |     |
|  |  [WARN] check.database.poolsize                           |     |
|  |         Pool size 10 is below recommended 50              |     |
|  |         [Show Fix]                                        |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  All required checks passed.                                       |
|                                                                    |
+------------------------------------------------------------------+

3.8 Skip Confirmation Dialog

+------------------------------------------------------------------+
|                                                                    |
|  +----------------------------------------------------------+     |
|  |                                                           |     |
|  |  SKIP VAULT INTEGRATION?                                  |     |
|  |  -----------------------                                  |     |
|  |                                                           |     |
|  |  Without a secrets provider:                              |     |
|  |    - Credentials stored in local keyring                  |     |
|  |    - Air-gap deployments may require manual setup         |     |
|  |    - Production deployments not recommended               |     |
|  |                                                           |     |
|  |  You can configure this later from:                       |     |
|  |    Settings > Configuration Wizard > Vault                |     |
|  |                                                           |     |
|  |  +----------------------------------------------------+   |     |
|  |  | Reason for skipping (optional):                    |   |     |
|  |  | [Will configure after infrastructure ready     ]   |   |     |
|  |  +----------------------------------------------------+   |     |
|  |                                                           |     |
|  |                          [Cancel] [Skip This Step]        |     |
|  +----------------------------------------------------------+     |
|                                                                    |
+------------------------------------------------------------------+

3.9 Completion Screen

+------------------------------------------------------------------+
|                                                                    |
|  +----------------------------------------------------------+     |
|  |                                                           |     |
|  |              [Checkmark Icon]                             |     |
|  |                                                           |     |
|  |              SETUP COMPLETE                               |     |
|  |                                                           |     |
|  |  Status: OPERATIONAL                                      |     |
|  |                                                           |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  COMPLETED STEPS:                                                  |
|  +----------------------------------------------------------+     |
|  |  [x] Database Setup                                       |     |
|  |  [x] Valkey/Redis Setup                                   |     |
|  |  [x] Database Migrations                                  |     |
|  |  [x] Admin Bootstrap                                      |     |
|  |  [x] Crypto Profile                                       |     |
|  |  [x] Vault Integration                                    |     |
|  |  [x] SCM Integration                                      |     |
|  |  [x] Notification Channels                                |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  SKIPPED STEPS:                                                    |
|  +----------------------------------------------------------+     |
|  |  [ ] Identity Provider (OIDC/LDAP)                        |     |
|  |  [ ] Environment Definition                               |     |
|  |  [ ] Agent Registration                                   |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  NEXT STEPS:                                                       |
|  +----------------------------------------------------------+     |
|  |  1. Run your first scan                                   |     |
|  |  2. Configure identity provider for SSO                   |     |
|  |  3. Set up environments for deployments                   |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  [Download Setup Report]           [Go to Dashboard]               |
|                                                                    |
+------------------------------------------------------------------+

4. Configuration Pane (Post-Setup)

4.1 Access Points

SurfacePathMenu Location
UI/settings/configurationSettings > Configuration Wizard
CLIstella setup --reconfigureN/A

4.2 Configuration Pane Layout

+------------------------------------------------------------------+
|  CONFIGURATION WIZARD                                              |
+------------------------------------------------------------------+
|                                                                    |
|  Last configured: January 13, 2026 at 10:30 AM                     |
|  Status: Production-Ready                                          |
|                                                                    |
|  INFRASTRUCTURE                                                    |
|  +----------------------------------------------------------+     |
|  | Database Setup           [Healthy]        [Reconfigure]   |     |
|  | PostgreSQL 16.2 at localhost:5432                         |     |
|  +----------------------------------------------------------+     |
|  +----------------------------------------------------------+     |
|  | Valkey/Redis Setup       [Healthy]        [Reconfigure]   |     |
|  | Valkey at localhost:6379                                  |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  INTEGRATIONS                                                      |
|  +----------------------------------------------------------+     |
|  | Vault (2 providers)      [Healthy]        [Manage]        |     |
|  | HashiCorp Vault, Azure Key Vault                          |     |
|  +----------------------------------------------------------+     |
|  +----------------------------------------------------------+     |
|  | SCM (1 provider)         [Healthy]        [Manage]        |     |
|  | GitHub App                                                |     |
|  +----------------------------------------------------------+     |
|  +----------------------------------------------------------+     |
|  | Notifications (3 channels) [Healthy]      [Manage]        |     |
|  | Slack, Email, PagerDuty                                   |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  ORCHESTRATION                                                     |
|  +----------------------------------------------------------+     |
|  | Environments (3)         [Healthy]        [Manage]        |     |
|  | dev, staging, prod                                        |     |
|  +----------------------------------------------------------+     |
|  +----------------------------------------------------------+     |
|  | Agents (2)               [1 Stale]        [Manage]        |     |
|  | docker-prod-01, docker-prod-02                            |     |
|  +----------------------------------------------------------+     |
|                                                                    |
|  [Run Diagnostics]                     [Export Configuration]      |
+------------------------------------------------------------------+

5. Wording Guidelines

5.1 Step Titles

StepTitleSubtitle
databaseDatabase SetupConfigure PostgreSQL connection
valkeyValkey/Redis SetupConfigure caching and message queue
migrationsDatabase MigrationsApply schema updates
adminAdmin BootstrapCreate administrator account
cryptoCrypto ProfileConfigure signing keys
assuranceAssurance PacksReview optional evidence-pack prerequisites
sourcesAdvisory & VEX SourcesEnable StellaOps Mirror or manual feeds
vaultVault IntegrationConfigure secrets management
scmSCM IntegrationConnect source control
notificationsNotification ChannelsConfigure alerts and notifications
environmentsEnvironment DefinitionDefine deployment environments
agentsAgent RegistrationRegister deployment agents

5.2 Button Labels

ActionLabel
Proceed to next stepContinue
Skip optional stepSkip
Test configurationTest Connection
Retry after failureRetry
Add another connector+ Add Another
Edit existingEdit
RemoveRemove
Complete wizardFinish Setup

5.3 Status Messages

StatusMessage
TestingTesting connection…
SuccessConnection successful
FailureCould not connect
TimeoutConnection timed out
Permission deniedPermission denied

5.4 Error Messages

Format: [What happened]. [Why it matters]. [What to do]

Example:

Could not connect to PostgreSQL. The database is required for all Stella Ops operations. Check that PostgreSQL is running and the connection details are correct.


6. Keyboard Navigation (UI)

KeyAction
TabMove to next field
Shift+TabMove to previous field
EnterSubmit form / Continue
EscapeCancel / Close dialog
Ctrl+CCopy command to clipboard
1-9Jump to step number

7. Accessibility Requirements

  1. Screen reader support - All form fields have labels
  2. Focus indicators - Visible focus rings on all interactive elements
  3. Color contrast - WCAG 2.1 AA compliance
  4. Keyboard navigation - Full functionality without mouse
  5. Error announcements - Errors announced to screen readers