# Conversation sharing is supported

- **Pattern:** `ab-000340` (`ai-ux-patterns.feedback-control.share-conversation`)
- **Severity:** low
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-000340
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-000340)

## Why it matters

Shared conversations are one of the highest-leverage organic growth loops an AI product has — every shared link is both a demo of capability and a referral. ChatGPT's share feature, Claude's share feature, and Poe's share feature all exist because shared chats convert viewers to signups at rates that paid channels cannot match. Without a native share path, users screenshot their conversations (which loses formatting and the ability to continue) or switch to a competitor whose share link works.

## Severity rationale

Low because sharing is a growth accelerant rather than a core workflow blocker.

## Remediation

Add a share button that POSTs to `/api/conversations/[id]/share`, flips an `is_public` flag on the row, returns a slug, and copies `${origin}/share/${slug}` to the clipboard. Gate the public read route on the flag and strip sensitive metadata on serialization. Implement the route at `app/api/conversations/[id]/share/route.ts`.

```tsx
await navigator.clipboard.writeText(`${location.origin}/share/${slug}`)
```

## Detection

- **ID:** `share-conversation`
- **Severity:** `low`
- **What to look for:** Count all share-related UI controls: share buttons, copy-link actions, social sharing integrations. For each, enumerate whether it produces a working shareable URL. Look for a `shared` or `public` flag on conversation records in the database schema, or a dedicated `conversation_shares` table. Check for `navigator.share()` API usage or clipboard copy of a URL. A share button that only copies the page URL (not a conversation-specific link) does not count as pass.
- **Pass criteria:** Users can generate a shareable link to a conversation or share via the native share API. At least 1 sharing mechanism must produce a conversation-specific URL.
- **Fail criteria:** No sharing functionality found.
- **Skip (N/A) when:** The application is single-user or operates in contexts where sharing is inherently inappropriate (e.g., a private therapy or journaling AI tool). Signal: no user authentication, or explicit privacy-first language in the codebase/copy.
- **Detail on fail:** `"No share button, shareable link generation, or public conversation URL pattern found"`.
- **Remediation:** Sharing drives organic growth. A minimal implementation:

  ```tsx
  // API route: POST /api/conversations/:id/share
  // Sets conversation.is_public = true, returns shareable slug

  const handleShare = async () => {
    const { shareUrl } = await fetch(`/api/conversations/${conversationId}/share`, {
      method: 'POST'
    }).then(r => r.json())

    await navigator.clipboard.writeText(shareUrl)
    toast("Share link copied to clipboard")
  }
  ```

---

Taxons: user-experience

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