+ {[
+ {
+ label: '1 — Control, shipping today',
+ props: { promptVariant: 'control' as const },
+ },
+ {
+ label: '2 — Band: one line, networks in the dropdown',
+ props: { promptVariant: 'band' as const },
+ },
+ {
+ label: '3 — Hero: the card, networks in the dropdown',
+ props: { promptVariant: 'hero' as const },
+ },
+ {
+ label: '4 — Card: all eight networks inline',
+ props: { promptVariant: 'card' as const, surface: 'card' as const },
+ },
+ ].map(({ label, props }) => (
+
+ ))}
+
+ ),
+};
diff --git a/packages/storybook/stories/components/PostContentSharePlayground.stories.tsx b/packages/storybook/stories/components/PostContentSharePlayground.stories.tsx
new file mode 100644
index 00000000000..16f3a7a0eb1
--- /dev/null
+++ b/packages/storybook/stories/components/PostContentSharePlayground.stories.tsx
@@ -0,0 +1,535 @@
+import type { Meta, StoryObj } from '@storybook/react-vite';
+import type { ReactElement, ReactNode } from 'react';
+import React, { useEffect, useState } from 'react';
+import type { PostContentSharePromptVariant } from '@dailydotdev/shared/src/components/post/common/PostContentShare';
+import { PostContentShare } from '@dailydotdev/shared/src/components/post/common/PostContentShare';
+import { EndOfConversationShare } from '@dailydotdev/shared/src/components/post/EndOfConversationShare';
+import {
+ Typography,
+ TypographyColor,
+ TypographyType,
+} from '@dailydotdev/shared/src/components/typography/Typography';
+import {
+ Button,
+ ButtonSize,
+ ButtonVariant,
+} from '@dailydotdev/shared/src/components/buttons/Button';
+import { PostSharePromptHarness, upvotedPost } from './share.mocks';
+
+/* -------------------------------------------------------------------------- */
+/* Shared chrome */
+/* -------------------------------------------------------------------------- */
+
+const Section = ({
+ title,
+ note,
+ children,
+}: {
+ title: string;
+ note: ReactNode;
+ children: ReactNode;
+}) => (
+
+
+ {upvotedPost.title}
+
+ {[1, 0.95, 0.9, 0.75].map((width) => (
+
+ ))}
+
+);
+
+const ActionBarSkeleton = () => (
+
+
+ 42 Upvotes · 12 Comments
+
+ {/* `PostActions` is a rounded, bordered box — not a full-width rule. The
+ difference matters here: a flat prompt underneath is judged against
+ whatever edge sits above it. */}
+
+ {['Upvote', 'Comment', 'Bookmark', 'Copy link'].map((action) => (
+
+ {action}
+
+ ))}
+
+
+);
+
+const CommentsSkeleton = () => (
+