Skip to content

docs(campaigns): deactivate a campaign link (LIN-3355) - #282

Open
SudhanshuAi wants to merge 4 commits into
mainfrom
sudhanshu/lin-3355-deactivate-campaign-link-docs
Open

SudhanshuAi wants to merge 4 commits into
mainfrom
sudhanshu/lin-3355-deactivate-campaign-link-docs

Conversation

@SudhanshuAi

Copy link
Copy Markdown

Adds a public page for the new Link status row in the Edit campaign modal: how to deactivate a link (Stop attributing traffic or Stop redirecting), what each option does, and how to reactivate.

Linear ticket: https://linear.app/linkrunner/issue/LIN-3355/deactivate-a-link-from-the-edit-campaign-modal-stop-attributing-or

Do not merge before the feature is live for customers. The dashboard UI is behind the PostHog flag link-status, and the code PRs are still in review:

Changes

  • features/deactivate-campaign-link.mdx (new, sidebar "Deactivate a Link"): before you start, comparison of the two options, steps, check the result, reactivate, webhooks and Data API, troubleshooting.
  • docs.json: page added to Links & Journeys, after Link redirection.
  • images/deactivate-link/*.webp: 4 screenshots.

Review notes

Scope

  • Reader task: a customer with an existing campaign wants to stop a link getting credit, or stop it being used, without deleting it, and later reactivate it.
  • Page type: how-to, following attribution-windows.mdx and deep-link-management.mdx.

Behavioral evidence (branch code, not yet deployed)

Claim Source
Labels, dialog copy, badges, Applying / Retry, "Couldn't check link status" dashboard #789 at 047660a9: LinkStatusSection.tsx, DeactivateLinkModal.tsx, LinkStatusBadge.tsx
Only Linkrunner links; system links hidden; ad-network campaigns get Reactivate only edit-campaign-modal.tsx (canManageLinkStatus, linkStatusReactivateOnly), backend setCampaignLinkStatus
Admin or Member role backend roleCheck in setCampaignLinkStatus
Reactivation refused at the plan limit; deactivated links do not count liveCampaignLimitCheck counts active: true; 402 in setCampaignLinkStatus
Stop redirecting refused when a base link is off or missing; base link cannot be turned off while links use it checkBaseLinks (409 BASE_LINK_INACTIVE), refuseBaseLinkDeactivation (409 BASE_LINK_IN_USE)
Data API PATCH active on a deactivated link returns 409 backend controllers/data.ts updateCampaign
Install goes to the next eligible click, else organic; rule applied at install time; earlier users keep attribution; no postbacks; signup webhook still fires, other events not forwarded hazelnut #864 description and tests
Applies within about 30 seconds hazelnut pkg/linkstatus 30 s cache, backend propagation retry

Screenshots: cropped from real UI captures on the dashboard evidence/lin-3355 branch (f8732caf), with synthetic demoshop data. A focus ring and a tooltip showing a staff email were cropped out. The "Not redirecting" capture was not used (copy from before the 13 Oct change).

Verification

Check Result
npm run check:agents pass (0 failures)
npm run check:routes -- origin/main pass, 126 pages, no unredirected removals
npx mintlify@4.2.957 dev --port 3001, page opened at /features/deactivate-campaign-link renders; sidebar entry under Links & Journeys; all 4 images return 200; full-page screenshot reviewed
Style: em dashes, banned words none

Not tested: the behavior on production (not deployed yet). Dark-mode screenshots are not included, matching other feature pages.

Follow-ups (not in this PR): a "Deactivated links" note on Link redirection, the 409 responses on the Edit Campaign API page, and a line on the Webhooks page.

…dal (LIN-3355)

New Links & Journeys page for the Link status row: Stop attributing traffic,
Stop redirecting (send to your base link), Reactivate, the Applying state,
table badges, webhook and Data API effects, and the base-link refusals.
Screenshots are cropped from the dashboard evidence/lin-3355 captures.
…3355)

Review on LIN-3759: Stop redirecting does not always credit the base
link (web-to-app taps, a base link that cannot be loaded, a base link
that is turned off), and 30 seconds is the usual propagation time, not
a guaranteed maximum.
…opy (LIN-3355)

Both screenshots come from the dashboard branch with the copy fix
(linkrunner-dashboard PR 789), on a local stack with synthetic Demo Shop
data. The dialog no longer says paused installs always count as organic.
@SudhanshuAi

Copy link
Copy Markdown
Author

@ganimtron-10 all three wording findings from https://linear.app/linkrunner/issue/LIN-3759 are fixed in db4b5c5.

  • Base-link credit: Stop redirecting credit is now "usually" the base link. A short list names the three exceptions: web-to-app taps, a base link that cannot be loaded, and a base link that is turned off.
  • Timing: 30 seconds is described as typical, not guaranteed.
  • Screenshots: the dialog copy was fixed at the source (https://github.com/linkrunner-labs/linkrunner-dashboard/pull/789), and both screenshots were recaptured from it with synthetic data (4e3088b).
  • Main merge: main is merged in (936ff9d), so the route guard no longer reports the unrelated page. check:routes passes (127 pages, no unredirected removals) and check:agents passes 9/9.

Do not merge before the link-status flag is on.

@ganimtron-10 ganimtron-10 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved at 4e3088b. All three wording findings are resolved in prose and recaptured screenshots. Local checks pass: check:agents 9/9, check:routes 127 pages with no unredirected removals. The updated Mintlify page renders locally and the four image references resolve; current route/CodeQL checks pass.

Publication prerequisite: do not merge/publish until the feature is deployed and the link-status flag is enabled for customers.

This branch has not been deployed

No deployments
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.

2 participants