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.
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:
saveConfig()(vireo/templates/settings.html:1943) clears a timer and POSTs the whole config to/api/config500ms 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.jsondirectly). PerCORE_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
safeFetchand 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.