Skip to main content

Conversation sharing is supported

ab-000340 · ai-ux-patterns.feedback-control.share-conversation
Severity: lowactive

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.

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

Detection

  • ID: ai-ux-patterns.feedback-control.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:

    // 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

History