feat(ads): disclose ads as "Ad" behind the ad_label experiment - #6379
Open
tsahimatsliah wants to merge 2 commits into
Open
feat(ads): disclose ads as "Ad" behind the ad_label experiment#6379tsahimatsliah wants to merge 2 commits into
tsahimatsliah wants to merge 2 commits into
Conversation
Control names the advertiser under the creative ("Promoted by Vercel").
The treatments hide the advertiser and disclose with a plain "Ad", so we
can measure what the disclosure wording does to ad CTR.
Arms: control, ad (advertise link kept), ad_only (advertise link dropped
from the feed cards). Default stays control — GrowthBook ramps the arms.
CTR needs no new instrumentation: the cards already emit the impression
and click events built by adLogEvent with target_type "ad".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every ad surface (feed grid + list, signal card, post sidebar card and inline, ad as comment) and card use case (no CTA, no referral link, network creative, long copy, matching tags, Plus) rendered per arm. The GrowthBook mock gains a FeatureOverrides provider so one story can pin a different flag value per subtree; the useConditionalFeature mock reads the same overrides and is now aliased like the provider, falling back to the flag's own default so existing stories are unaffected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
capJavert
reviewed
Jul 28, 2026
capJavert
left a comment
Contributor
There was a problem hiding this comment.
First-pass review is clear: I found no blocking code issue, and the current CI checks are green. Holding the formal approval for the final reviewer.
capJavert
approved these changes
Jul 28, 2026
capJavert
left a comment
Contributor
There was a problem hiding this comment.
Approved after first-pass review; no blocking code issues found and CI was green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ad cards name the advertiser under the creative ("Promoted by Vercel") and carry an "Advertise here" self-promo. This experiment hides the advertiser and discloses with a plain "Ad" instead, to measure what the disclosure wording does to ad CTR.
Flag
ad_label(string) — defaultcontrol, so nothing changes until GrowthBook ramps it.controladad_onlyMeasurement
No new instrumentation. The cards already emit the impression and click events built by
adLogEventwithtarget_type: "ad", so CTR = ad clicks / ad impressions split by arm. Guardrails: revenue per mille, and theadvertise here ctaclick rate thatad_onlyremoves.Scope
The label swap lives in the shared
AdAttribution, so it also covers the signal card and the post sidebar widget. The "Advertise here" removal is scoped toAdGrid/AdList, where CTR is measured.Three gaps are deliberate and left for a follow-up once the direction is picked:
AdAsCommentbuilds its own "Promoted by {source}" string instead of usingAdAttribution, so the flag does not reach it.ad.companyseparately, so the advertiser is still named there.Review
Storybook → Experiments → Ad label. Nine stories render every ad surface and card use case (no CTA, no referral link, network creative, long copy, matching tags, Plus subscriber) with all three arms side by side, plus an experiment brief and control/treatment reference pages.
Per-arm rendering needed a
FeatureOverridesprovider in the Storybook GrowthBook mock; theuseConditionalFeaturemock now reads the same overrides and is aliased like the provider, falling back to each flag's own default so existing stories are unaffected.🤖 Generated with Claude Code
Preview domain
https://claude-ad-label-experiment.preview.app.daily.dev