Skip to content

feat(ads): add force_ad flag to show ads to Plus members - #7225

Merged
idoshamun merged 1 commit into
mainfrom
feat/force-ad-flag
Nov 3, 2026
Merged

idoshamun merged 1 commit into
mainfrom
feat/force-ad-flag

Conversation

@idoshamun

@idoshamun idoshamun commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Changes

  • New force_ad flag, off by default. When it's on, a Plus member gets ads wherever a free reader would. The other gates still apply: ad-free squads and sources, disableAds, feed previews and viewport rules.
  • New useIsPlusAdFree hook. On the ad surfaces it replaces the plain isPlus check, and it only evaluates the flag for Plus members. The surfaces:
    • feed ads, the ad cadence clamp and the feed_ad_template evaluation
    • the feed hero ad, the widget-rail ad and the sponsor strip
    • the post sidebar ad, the EX.CO player and the ad in comments
    • engagement creatives
    • promoted squads (directory and similar squads)
  • The "Remove ads" upsells on ad cards still check isPlus, so a Plus member never sees an upgrade prompt.
  • deriveAdCadence now takes isAdFree instead of isPlus.
  • Tests: a Feed test where a Plus member with force_ad on gets ads, and a sponsor-strip test for the same case. The test fails if the override is removed.

GrowthBook: force_ad is created and published. It's a boolean with default false, on in production with one force rule {"team": 1} → true. dev and api-config are off.

Checks: shared and webapp tsc pass (the only shared error is the existing one in ArchiveFeedPage.spec.tsx). The strict-changed guard and oxlint/oxfmt pass on the changed files. The related shared suites (125 suites) pass, and so does pnpm --filter webapp test.

Events

No.

Experiment

No. force_ad is a targeting flag, not an experiment.

Manual Testing

Not tested in a running app. One thing to check on a Plus account in the team after merge: the ad server may filter Plus users on its side. This PR only changes the client gates.


🤖 Opened by Smith (AI) on behalf of @idoshamun.

Preview domain

https://feat-force-ad-flag.preview.app.daily.dev

Plus hides ads on every surface, so the team (mostly on Plus) never sees
the ads we ship. `force_ad` (off by default) overrides that: a Plus member
with it on gets ads wherever a free reader would, and every other gate
(ad-free squads and sources, disableAds, viewport rules) still applies.

`useIsPlusAdFree` replaces the bare `isPlus` check on the ad surfaces:
feed ads and cadence, the ad template, the hero ad, the widget-rail ad,
the sponsor strip, the post sidebar ad, the EX.CO player, the comment ad,
engagement creatives and squad promotions. The flag is only evaluated for
Plus members. The "Remove ads" upsells keep reading `isPlus`.
@vercel

vercel Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
daily-webapp Ready Ready Preview Nov 3, 2026 8:14pm UTC
storybook Ready Ready Preview Nov 3, 2026 8:14pm UTC

Request Review

@idoshamun
idoshamun enabled auto-merge (squash) November 3, 2026 20:11
@idoshamun
idoshamun merged commit 04fe81d into main Nov 3, 2026
13 checks passed
@idoshamun
idoshamun deleted the feat/force-ad-flag branch November 3, 2026 20:15

This branch was successfully deployed

2 active deployments
Preview – daily-webapp — 5ff1ed01 Deployed Nov 3, 2026 by vercel[bot]
Preview – storybook — 5ff1ed01 Deployed Nov 3, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant