diff --git a/docs/content/docs/guides/campaigns.mdx b/docs/content/docs/guides/campaigns.mdx
index 73f97958e..af5afe274 100644
--- a/docs/content/docs/guides/campaigns.mdx
+++ b/docs/content/docs/guides/campaigns.mdx
@@ -17,6 +17,10 @@ Campaigns belong to the workspace. Members with **View campaigns** can read camp
Select the workspace that owns the campaign before opening it. Creating a campaign does not grant access to it from a different workspace.
+## Campaigns list
+
+Campaign names take priority over descriptions in the list. Descriptions use the remaining space and are hidden on small screens. A name that is still too long for the available space is shortened with an ellipsis so the status and actions stay accessible; hover over the name to read it in full, or open the campaign on a touch screen. The top campaigns list in Analytics also uses the available space for names before shortening them.
+
## Create a campaign
**Campaigns** > **New campaign** opens a four-step flow. A campaign is a first email and, optionally, follow-ups that stop for anyone who replies.
diff --git a/web/src/app/app/analytics/page.tsx b/web/src/app/app/analytics/page.tsx
index 8f25d35a8..8e752c001 100644
--- a/web/src/app/app/analytics/page.tsx
+++ b/web/src/app/app/analytics/page.tsx
@@ -233,7 +233,7 @@ export default function AnalyticsPage() {
className="group h-11 px-5 flex items-center gap-3 hover:bg-slate-50 transition-colors"
>
- {c.name}
+ {c.name}
{num(c.emails_sent)} sent
{pct(c.open_rate)} open
diff --git a/web/src/app/app/campaigns/page.tsx b/web/src/app/app/campaigns/page.tsx
index 3a58aaf93..956591c7e 100644
--- a/web/src/app/app/campaigns/page.tsx
+++ b/web/src/app/app/campaigns/page.tsx
@@ -531,19 +531,21 @@ export default function CampaignsPage() {
-
- {c.name}
-
-
- {c.id.slice(0, 8)}
-
-
-
- {c.description && (
-
- {c.description}
+
+
+ {c.name}
- )}
+
+ {c.id.slice(0, 8)}
+
+
+
+ {c.description && (
+
+ {c.description}
+
+ )}
+
{stateLabel}