Conversation
ref https://linear.app/ghost/issue/BER-3529 - the social media preview rendered at `/gift/:token` (title, description, noscript fallback) was hardcoded English, leaving non-English sites with mismatched OG metadata when gift links are shared - wrapped user-facing strings with `t()` and added 5 new keys to the ghost namespace - duration label uses the established `1 X` / `{n} Xs` two-key split (matching `portal.json`) rather than appending `s` to a bare unit, since plural rules and word order vary by locale - initialised i18n in the controller test before requiring the controller so the destructured `t` import resolves to the live `i18next` instance
ref #27396 - staff users have had Threads, Bluesky, Mastodon, TikTok, YouTube, Instagram and LinkedIn since 5.117; publication handles for the same networks were missing, so themes using `{{@site.linkedin}}` or `{{social_url type="threads"}}` had nothing to render - the two social input surfaces (publication settings, staff modal) carried parallel per-platform branches for URL conversion and validation; putting them behind a shared SOCIAL_PLATFORM_CONFIGS table means adding the next network is a config entry, not coordinated edits across three files - LinkedIn's display value was drifting between blur and reload: a regional URL like https://uk.linkedin.com/in/foo would persist on screen after blur but flip on reload because the stored handle drops the regional prefix; routing post-blur display through toStoredValue → toDisplayValue closes the gap for all platforms - a capability gate hides the new fields when none of the new keys are in the settings response, so the admin can deploy before or after the backend without silently losing user input to the API's unknown-key filter
no issue ## Summary - aborts the Ember `setup.done` transition before handing off to the React onboarding hash route - updates onboarding E2E coverage to exercise the production-shaped `firstStart=true` root redirect - allows onboarding step navigation assertions to tolerate query params before the hash ## Root cause The hosted setup flow enters Admin at `#/?firstStart=true...`, then Ember redirects through `setup.done` to start onboarding. The route set `window.location.hash` for the React onboarding screen, but allowed the original Ember transition to finish. That could leave the app settled on the empty `#/setup/done` route instead of rendering onboarding.
…#27703) ref https://linear.app/tryghost/issue/BER-3611/ - when a gift member upgraded to a paid subscription, the gift was being marked as consumed which counted as a cancellation in the Paid subscriptions chart, even though the member had actually converted to a paying customer (not churned) - distinguish upgrades from natural gift endings by comparing `consumed_at` to `consumes_at`: the cron-driven natural-end path only fires once `consumes_at` has passed, so `consumed_at >= consumes_at`, whereas the upgrade path consumes the gift mid-period - this prevents the chart from showing misleading cancellations for members who upgraded, which understated retention
…27660) ref https://linear.app/ghost/issue/ONC-1658/ When a customer clicks a newsletter reply-to verification email in a browser that isn't signed in to admin, the link silently no-ops — they have to click it a second time for the address to actually save. Two customers hit this in the past few weeks (ONC-1618, ONC-1642). The signin-redirect flow added in #27316 stores the original URL in `sessionStorage` and replays it via `router.transitionTo(redirectUrl)` after auth. But `react-fallback` is a wildcard route with no controller-declared `queryParams`, so Ember strips `?verifyEmail=<token>` on the replay. The verify-on-mount `useEffect` in `newsletters.tsx` then short-circuits because the token is missing.
ref https://linear.app/ghost/issue/BER-3600/design-iteration - Redesigned the gift selection screen with an inline accordion tier picker. - Refreshed the gift card and right-side panel design across the selection, confirmation, redemption, and magic link pages.
closes https://linear.app/ghost/issue/BER-3613 Hide the "Billing info & receipts" section in Portal's account home page for gift members. Gift members do not have a card on file or an active Stripe subscription, so the section's "Update" button (which calls `manageBilling`) led to a dead end. Complimentary members were already excluded for the same reason — gift members were an oversight.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )