Skip to content

✨ Added "open in your email app" button to increase signup conversion#26198

Merged
EvanHahn merged 2 commits intomainfrom
sniperlinks-ga
Feb 4, 2026
Merged

✨ Added "open in your email app" button to increase signup conversion#26198
EvanHahn merged 2 commits intomainfrom
sniperlinks-ga

Conversation

@EvanHahn
Copy link
Contributor

@EvanHahn EvanHahn commented Feb 3, 2026

ref https://linear.app/ghost/project/sniperlink-support-in-portal-5aeb1fec6681
ref #26116

This moves the sniperlinks feature flag to GA, releasing it for all.

Summary by CodeRabbit

  • Features
    • Sniper Links now appear by default unless explicitly disabled, showing in the Close button area and OTC form footer.
  • Tests
    • End-to-end tests updated to use a stable test-id to locate the close button.
  • Chores
    • Feature-flag configuration updated to include Sniper Links in the global flag set.

@cursor

This comment was marked as outdated.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 3, 2026

📝 Walkthrough

Walkthrough

Sniperlinks flag in the portal now treats undefined as enabled (site.labs?.sniperlinks !== false); sniperlinks moved from PRIVATE_FEATURES to GA_FEATURES in core labs. E2E portal and sign-up helpers now locate the Close button via getByTestId('close-popup').

Changes

Cohort / File(s) Summary
Portal component
apps/portal/src/components/pages/magic-link-page.js
Changed feature-flag check from Boolean(site.labs?.sniperlinks) to site.labs?.sniperlinks !== false, affecting conditional rendering of the Close button and OTC form.
Core labs config
ghost/core/core/shared/labs.js
Added 'sniperlinks' to GA_FEATURES and removed it from PRIVATE_FEATURES, relocating the flag between feature groups.
E2E page helpers
e2e/helpers/pages/portal/portal-page.ts, e2e/helpers/pages/portal/sign-up-success-page.ts
Replaced role-based Close button selector with getByTestId('close-popup') in portal and sign-up success page helpers.

Poem

🐰 I hopped in code at break of light,
A sniperlink now set just right.
Undefined turned on, I twirl and sing—
Close buttons found by a tiny string.
Tiny hops, big changes—joyful spring.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title describes adding an 'open in your email app' button, but the PR primarily moves sniperlinks from private/experimental to GA status. The title emphasizes a UI feature rather than the main change of releasing the feature for all users.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch sniperlinks-ga

Important

Action Needed: IP Allowlist Update

If your organization protects your Git platform with IP whitelisting, please add the new CodeRabbit IP address to your allowlist:

  • 136.113.208.247/32 (new)
  • 34.170.211.100/32
  • 35.222.179.152/32

Reviews will stop working after February 8, 2026 if the new IP is not added to your allowlist.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

renderCloseButton() {
const {site, sniperLinks} = this.context;
const isSniperLinksEnabled = Boolean(site.labs?.sniperlinks);
const isSniperLinksEnabled = site.labs?.sniperlinks !== false;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Had to change this because GA'd feature flags don't show up in site.labs.

coderabbitai[bot]

This comment was marked as resolved.

@github-actions

This comment was marked as outdated.

@EvanHahn EvanHahn marked this pull request as draft February 3, 2026 20:25
@github-actions

This comment was marked as outdated.

@EvanHahn EvanHahn force-pushed the sniperlinks-ga branch 2 times, most recently from dceada7 to fb77a5d Compare February 3, 2026 22:07
@EvanHahn EvanHahn changed the base branch from main to update-context.json February 3, 2026 22:07
this.portalPopupFrame = page.locator(this.frameSelector);

this.closeButton = this.portalFrame.getByRole('button', {name: 'Close'});
this.closeButton = this.portalFrame.getByTestId('close-popup');
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Had to change this because there isn't (necessarily) a button that says "Close" any more.

Base automatically changed from update-context.json to main February 3, 2026 22:22
@EvanHahn EvanHahn marked this pull request as ready for review February 3, 2026 22:32
@github-actions
Copy link
Contributor

github-actions bot commented Feb 3, 2026

E2E Tests Failed

To view the Playwright test report locally, run:

REPORT_DIR=$(mktemp -d) && gh run download 21650167700 -n playwright-report -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR"

@EvanHahn EvanHahn marked this pull request as draft February 3, 2026 22:41
@github-actions
Copy link
Contributor

github-actions bot commented Feb 3, 2026

E2E Tests Failed

To view the Playwright test report locally, run:

REPORT_DIR=$(mktemp -d) && gh run download 21650167700 -n playwright-report -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR"

@EvanHahn EvanHahn marked this pull request as ready for review February 3, 2026 22:46
Copy link
Contributor

@9larsons 9larsons left a comment

Choose a reason for hiding this comment

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

Interesting. I'll mentally note that site.labs behavior for another time.

@EvanHahn EvanHahn enabled auto-merge (squash) February 4, 2026 15:20
@EvanHahn EvanHahn merged commit 8b4aa79 into main Feb 4, 2026
68 of 71 checks passed
@EvanHahn EvanHahn deleted the sniperlinks-ga branch February 4, 2026 15:55
betschki pushed a commit to magicpages/Ghost that referenced this pull request Feb 19, 2026
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