AI Chat Viewers token "won't stick" (the user's blocker) Diagnosed it: the token was persisting correctly (upsertAiChatbotConfig writes it) — the problem was UX + browser autofill: - The write-only field cleared to a sk-… placeholder after save, so it looked empty/unsaved. - The Base-URL text field sitting right before a password field is a classic password-manager autofill trap — it can inject garbage into those fields, which is almost certainly why the Test error showed a "placeholder-looking URL" (a corrupted base URL). Fixes: a saved key now shows as a masked sentinel (••••••••••••••••) with a green "✓ Key saved" — clearly "a key is stored, leave it to keep it." Only a freshly-typed key is ever sent; the sentinel means "keep existing." Both fields are hardened against autofill (autocomplete="new-password", data-lpignore, data-1p-ignore, distinct names). Test Connection uses the stored key when the field is untouched — so n8admin can now paste the Open WebUI key once, see it stick, and test against the Cloudflare tunnel.