AI welcome / first-run screen
First-message hero an AI chat surface renders when the user hasn't sent anything yet — mark + greeting + capability hint + 3-4 starter prompts that pre-fill the composer (do NOT auto-send). Distinct from generic empty-state (#063) by anatomy and intent. Modeled after Ant Design X Welcome + ChatGPT / Claude / Gemini first-run.
Pattern — AI welcome screen
*tatus* v0.1.0 — Draft.
R1 — When to use
Render the AI welcome screen when ALL of:
- The current conversation has zero messages.
- The AI surface is the primary canvas (not a side panel where the
user is mid-task).
For empty sidepanel AI assists: use `patterns/emptystate.kmd` (#063) — simpler, no starter prompts.
R2 — Anatomy
Centered in the chat scroll region, above the Sender:
| Element | Required | Notes |
|---|---|---|
| AI mark | Yes | Sparkle ⟡ per patterns/ai-feature-visual-language.kmd R1, sized 48 dp |
| Greeting | Yes | One short sentence; identifies the assistant (e.g. "Hi — I'm Kortex Assist") + invites action ("Ask me to summarize, draft, or plan.") |
| Capability hint | Optional | 1-2 lines describing what the assistant knows about the user's current context (e.g. "I can see your open Kortex notes.") |
| Starter prompts | Yes | 3 |
| Disclosure line | Yes | Per ai-feature-visual-language.kmd R5 — "AI-generated. Verify before acting." (translatable) |
R3 — Starter prompts
- 3-4 chips, one row (wraps on narrow viewports per
specs/app-layout/adaptive-layouts.kmd). - Each chip: short imperative ("Summarize my last 5 notes",
"Draft a follow-up email"); ≤ 36 chars per chip.
- Tap behavior: fills Sender textarea, focuses it, places cursor at
end. Does NOT auto-send. The user always reviews before sending.
- After first send: welcome screen disappears for the rest of the
conversation; re-appears only on
clear()or new conversation.
R4 — Greeting tone
Per specs/content/voice-and-tone.kmd R2 first-run column:
- Welcoming, never apologetic.
- Identify the assistant by name (Kortex Assist, Talk Helper, Koder Help).
- Set expectations briefly. Avoid "I'm an AI" disclaimers (the AI mark
+ disclosure line carry that).
R5 — Accessibility
- The welcome region uses
role="region"witharia-labelledbypointingat the greeting.
- Starter prompts:
role="list"with each chip a<button>. - Initial focus does NOT move into the welcome region — the Sender
retains focus so keyboard users can type directly. (Cmd+/ shortcut per
ai-chat-surface.kmdR3 still works.)
R6 — Personalization
The capability hint MAY surface user-specific context (open notes, recent files, active project) but MUST NOT surface anything the user hasn't already approved sharing with AI (per policies/ai-content-disclosure.kmd when published). When in doubt: omit the hint.
R7 — i18n
All strings translatable per specs/i18n/contract.kmd. Keys:
ai.welcome.greeting.{assistant_id}ai.welcome.capability_hint.{assistant_id}(optional)ai.welcome.starter.{assistant_id}.{index}(1..4)
Per-assistant keys allow each Koder product to ship its own copy without collision.
Não-escopo
- Per
product asset content (starter prompts are ownercurated persurface — KDS sets the anatomy contract, not the prose).
- A/B-tested starter variations (consumer concern).