Skip to content

fix: settings & company page UX polish (12 items) #709

@Aureliolo

Description

@Aureliolo

Summary

Batch of UX bugs and improvements identified during manual review of the Settings, Company, Org Chart, and Dashboard pages. All are in the settings/company UI area and should land as a single PR.

Issues

Bugs

1. Advanced toggle does not revert visually on Cancel

  • Toggle basic->advanced, dialog appears, click Cancel -- toggle stays visually "on" even though showAdvanced remains false
  • Root cause: PrimeVue ToggleSwitch flips its visual state on click before handleAdvancedToggle() runs. When toggleAdvanced() returns 'needs_warning' it does not change showAdvanced, so the switch visual diverges from the model. The cancel event from AdvancedWarningDialog is never handled in SettingsPage.vue
  • Fix: either use :model-value binding that forces the switch back, or explicitly handle the cancel event

2. Org Chart shows "No departments" despite departments existing

  • OrgChart uses companyStore.fetchDepartments() which calls GET /departments (the DepartmentController API). Company page reads departments from the company/departments JSON setting. These are two different data paths
  • The API endpoint validates against a Department schema with DepartmentName enum. Departments saved via Company page may not match that schema, causing the API to return empty
  • Fix: align the data paths -- either OrgChart should read from the same settings source, or the Company page should validate/transform departments to match the API schema on save

3. Department card edit/delete buttons invisible

  • CompanyDepartmentCard has pencil/trash buttons with text prop (PrimeVue text-only buttons). On the dark bg-slate-800/50 card background, severity="secondary" text buttons are nearly invisible
  • Screenshot confirms: cards show name + budget tag only, no visible action buttons
  • Fix: use visible icon buttons (remove text prop or add hover reveal with opacity transition)

4. Dashboard System Status -- inconsistent "ok" vs "OK" casing

  • API Server shows health?.status raw from backend ("ok" lowercase)
  • Persistence and Message Bus use hardcoded "OK" (uppercase)
  • Fix: normalize all status labels to the same casing (e.g. uppercase "OK" everywhere, or use a shared formatter)

5. Log level shows empty/nothing instead of effective value

  • observability/root_log_level has default="debug" in the definition, but if the resolved value comes back as empty string or null, the Select dropdown shows nothing
  • Should display the effective value from the running app (env var SYNTHORG_LOG_LEVEL or definition default)

UX Improvements

6. Department Add form -- poor UX, no hints, no prefill

  • "Head" field is a raw text input (placeholder="e.g. agent-cto-001") -- should be a dropdown populated from existing agents
  • No explanation of what "Teams", "Reporting Lines", "Policies" expect as JSON structure -- needs help text or example templates
  • Budget % has no contextual hint (e.g. remaining budget across departments)
  • No field-level tooltips or guidance

7. "General" settings tab looks auto-generated and unpolished

  • Both CompanyGeneralForm and Settings page namespace tabs render via SettingGroupRenderer which produces a flat list of key-value inputs
  • No visual hierarchy, no contextual grouping, no designed layout -- reads like a raw config dump
  • Needs intentional layout with logical sections, descriptions, and spacing

8. setup_complete should never be exposed in the settings UI

  • api/setup_complete is defined at level: basic (default), visible in the API tab without advanced mode
  • This is internal system state users should never manually toggle
  • Fix: either set level: advanced + mark hidden, or filter it out of the settings UI entirely

9. Source badge labels ("YAML" / "Database") are meaningless to users

  • SettingSourceBadge shows Database, YAML, Environment, Default
  • Users don't care about storage backend. Show Custom (for db/yaml overrides) vs Default -- the only distinction that matters
  • Environment should remain distinct but with different treatment (see Implement agent-to-agent messaging with channels and topics #10)

10. Environment-sourced settings should be greyed out, not just badged

  • When a setting comes from an env var, it shows an orange "Environment" badge but the field still looks editable
  • Should visually disable the input and show a clear message: "Set by environment variable -- cannot be changed here"

11. default_provider setting -- unnecessary, not actually used

  • Defined as "Default LLM provider name for new tasks" with default=None
  • Subscriber code explicitly calls it "advisory-only" -- watched for logging only, never read by routing logic
  • Provider selection is determined by agent model config + routing strategy
  • Fix: remove the setting definition, or at minimum hide it from the UI

12. Remove or normalize the default_provider concept

  • If we keep it, it needs a clear purpose and UI explanation
  • If we remove it, clean up the subscriber watch list too

Affected files

  • web/src/views/SettingsPage.vue -- advanced toggle cancel handling
  • web/src/stores/settings.ts -- toggle state management
  • web/src/views/CompanyPage.vue -- department data path
  • web/src/views/OrgChartPage.vue -- department data source
  • web/src/components/company/CompanyDepartmentCard.vue -- button visibility
  • web/src/components/company/CompanyDepartmentFormDialog.vue -- form UX
  • web/src/components/company/CompanyGeneralForm.vue -- general tab layout
  • web/src/components/settings/SettingSourceBadge.vue -- label text
  • web/src/components/settings/SettingField.vue -- env var disabling
  • web/src/components/dashboard/SystemStatus.vue -- ok/OK casing
  • src/synthorg/settings/definitions/api.py -- setup_complete level
  • src/synthorg/settings/definitions/providers.py -- default_provider
  • src/synthorg/settings/subscribers/provider_subscriber.py -- default_provider watch

Metadata

Metadata

Assignees

No one assigned

    Labels

    scope:webVue 3 dashboardtype:fixBug fixes and correctionsv0.4Minor version v0.4v0.4.7Patch release v0.4.7

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions