AI behavior settings or preferences panel exists
Why it matters
Two users of the same AI product want different things from it — one wants terse bullet-point answers, another wants long-form prose; one wants responses in Spanish, another in code blocks only. When every parameter is hardcoded in the system prompt, the product optimizes for the median user and disappoints everyone else. A small settings panel with response style, language, and a custom-instructions textarea dramatically widens the product's fit across the user base at minimal engineering cost.
Severity rationale
Medium because hardcoded behavior caps customer fit but does not break the core flow.
Remediation
Persist a user_preferences row keyed by user id with at least response_style, language, and custom_instructions fields. Inject the selected style into the system prompt on each request. Expose the settings at /settings/ai and mirror to localStorage for anonymous users. Implement in app/settings/ai/page.tsx.
const systemPrompt = `${BASE_PROMPT}\n\nResponse style: ${prefs.responseStyle}. ${prefs.customInstructions ?? ''}`
Detection
-
ID:
settings-preferences -
Severity:
medium -
What to look for: Count all configurable AI behavior parameters: response length, tone selection, language, memory preferences, notification settings. For each, enumerate whether it is exposed in a user-facing settings UI and whether the value is persisted (localStorage, user profile in database). Look for a dedicated
app/settings/route, a settings modal, or a dropdown configuration menu. At least 1 parameter must be persisted. -
Pass criteria: A settings or preferences interface exists with at least 1 configurable AI behavior parameter. Settings are persisted between sessions. Report on pass: "X configurable parameters; persisted via Y."
-
Fail criteria: No settings or preferences panel found. AI behavior is entirely fixed with no user configuration.
-
Skip (N/A) when: The application is a single-purpose tool with no configurable behavior — for example, a dedicated code linter or a fixed-format document generator where behavioral variation would be a defect.
-
Detail on fail:
"No settings or preferences UI detected. AI behavior parameters appear hardcoded with no per-user configuration.". -
Remediation: Even one or two adjustable parameters dramatically improve perceived customizability:
// Settings schema stored in user preferences type AIPreferences = { responseStyle: 'concise' | 'balanced' | 'detailed' language: string enableMarkdown: boolean } // In the settings panel <div className="space-y-4"> <div> <label className="text-sm font-medium">Response Style</label> <Select value={prefs.responseStyle} onValueChange={(v) => updatePref('responseStyle', v)}> <SelectItem value="concise">Concise — short, direct answers</SelectItem> <SelectItem value="balanced">Balanced — default</SelectItem> <SelectItem value="detailed">Detailed — thorough explanations</SelectItem> </Select> </div> </div>
Taxons
History
- 2026-04-18·v1.0.0·Initial import from ai-ux-patterns·automated