# AI behavior settings or preferences panel exists

- **Pattern:** `ab-000348` (`ai-ux-patterns.advanced-patterns.settings-preferences`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-000348
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-000348)

## 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`.

```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:

  ```tsx
  // 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: user-experience

HTML version: https://auditbuffet.com/patterns/ab-000348
