Skip to content

Settings page auto-saves with no visible confirmation #1376

Description

@jss367

Problem

The Settings page auto-saves, but gives no indication that it does. A user who fills in a multi-field form (e.g. a remote target) has no way to know their work is persisted, and reasonably goes hunting for a save button that doesn't exist.

This came up during a real remote-target setup: after filling in all nine fields and getting a green "Connection OK", the natural next question was "how do I save? I don't see a save button."

Current behavior

Every field writes through on change and schedules a debounced save:

// vireo/templates/settings.html:1611
var save = function(field) {
  return function(v) { _remoteTargetsState[i][field] = v; saveConfig(); };
};

saveConfig() (vireo/templates/settings.html:1943) clears a timer and POSTs the whole config to /api/config 500ms later. On success there is no UI change at all — no flash, no toast, no timestamp.

Why it matters

Auto-save is a fine choice, but an invisible auto-save is indistinguishable from no save. The user is left to either guess or verify out-of-band (in this case, by reading ~/.vireo/config.json directly). Per CORE_PHILOSOPHY.md, the UI should show what's happening rather than leave the user inferring it.

The risk is not just confusion — a user who believes their edits were lost may re-enter them, navigate away expecting a confirm prompt, or abandon the setup.

Suggested fix

A transient "Saved ✓" indicator near the section heading (or page header) after the debounced POST resolves, plus a "Saving…" state while in flight. Failure should be loud — currently a failed save is swallowed by safeFetch and looks identical to success.

Worth considering: a subtle "last saved HH:MM:SS" that persists, so the signal is still there for a user who looks away during the 500ms window.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions