Back to changelog
v1.4.0

Growth and retention — referrals, replay, embedded onboarding

Partner referrals, Sentry session replay with consent gating, and a polished embedded-admin onboarding land in this release.

featuresgrowth

The focus this wave was the work that turns a free install into a paid subscription. Three things ship.

Partner referrals

OrderWise now has a first-class referral system inside the settings tab. Existing merchants can share a referral code, and any new merchant who installs via that code gets credited at OAuth callback time. The matching is install-time — we attribute the visit to a referrer before the Shopify install, so the referrer gets credit even when the merchant removes the UTM at checkout.

  • Payout calculator built in (default: 20% recurring for 12 months).
  • Settings panel for managing codes, viewing pending payouts, and pulling monthly reports.
  • Click-through tracking via /api/track/click with bot-filtering on the user-agent and IP-level dedupe.

Embedded admin pages now record session replay with masked content, gated behind a consent banner that lives in the layout. Default mode is "opt-in" — no replays are recorded until the merchant clicks accept. Privacy-sensitive elements (order data, conversation transcripts) are auto-masked even with consent.

  • Banner respects an existing analytics-consent cookie.
  • Replays only fire for sampled errors, not for happy-path navigation.

Storefront widget polish

The widget that lives on the merchant's storefront learned to detect the active Shopify theme's color mode and switch its own light/dark palette accordingly. Locale resolution is also tighter — we read Shopify.locale first and fall back to navigator.language only when the theme didn't expose one.

Bug fixes

  • withRetry no longer retries on non-retriable errors (input validation failures, 4xx responses).
  • Embedded conversations list no longer shows orphan toasts after a message is deleted.
  • Sitemap entry for the /de landing now correctly emits hreflang alternates for en and x-default.