Skip to content

feat(onboarding): explain "not a commercial VPN" on Background Delivery page#96

Merged
torlando-tech merged 1 commit into
mainfrom
feat/onboarding-not-a-vpn-explainer
Jun 20, 2026
Merged

feat(onboarding): explain "not a commercial VPN" on Background Delivery page#96
torlando-tech merged 1 commit into
mainfrom
feat/onboarding-not-a-vpn-explainer

Conversation

@torlando-tech

Copy link
Copy Markdown
Owner

What

The last onboarding page (Background Delivery) brings up the on-device VPN / Network Extension, but only briefly noted that "your traffic isn't sent to any server." The fuller explanation that this isn't a traditional / commercial VPN lived only in Settings → Background Transport, which users never see during onboarding.

This surfaces that same explanation on the onboarding page so users understand up front that it's not actually a VPN:

  • "Not a commercial VPN" — Columba uses Apple's VPN mechanism only to run a background packet tunnel for the mesh; traffic isn't proxied/routed/monetized; the tunnel runs entirely on-device.
  • "The VPN badge" — pre-empts the iOS status-bar VPN badge (the thing that makes it look like a real VPN).

How — no duplicated copy

Rather than copy/paste the wording, the explainer content is extracted into a shared component, Views/Components/BackgroundVPNExplainer.swift:

  • VPNNotCommercialExplainer and VPNBadgeExplainer(featureName:) hold the canonical copy + layout.
  • VPNExplainerUI holds the shared section-header / row primitives.

Both the settings screen (BackgroundTransportView) and the onboarding page (BackgroundDeliveryPage) now render this single-sourced content; each supplies its own card chrome (settings glassCard() vs the onboarding Theme.backgroundSecondary card matching PermissionsPage). The badge sentence's feature name is parameterized ("background transport" vs "background delivery") to fit each surface. The settings screen's now-duplicate private helpers were removed.

Verification

  • xcodebuild Columba-Swift / Debug-Swift (the config that enables COLUMBA_ONBOARDING_ENABLED) → BUILD SUCCEEDED, no warnings on the touched files.
  • Confirmed each explainer string and the row/header helpers now exist in exactly one file (the shared component) — no duplication across the two screens.

🤖 Generated with Claude Code

@greptile-apps

greptile-apps Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR surfaces the "Not a commercial VPN" and "VPN badge" explainer content on the onboarding Background Delivery page, so users understand the VPN mechanism before tapping Enable rather than only after discovering the Settings → Background Transport screen.

  • New shared component BackgroundVPNExplainer.swift holds VPNNotCommercialExplainer, VPNBadgeExplainer, and VPNExplainerUI — a single source of truth for the explainer copy and row/header primitives, compiled under ENABLE_NETWORK_EXTENSION || COLUMBA_ONBOARDING_ENABLED.
  • BackgroundDeliveryPage now renders both explainer cards before the enable button using a new file-private explainerCardStyle() extension that matches the onboarding card chrome.
  • BackgroundTransportView drops its duplicated private helpers and delegates to the shared component; visual output is unchanged.

Confidence Score: 5/5

Safe to merge — this is a pure UI refactor that extracts duplicated copy into a shared component with no logic changes.

All three changed Swift files compile under the correct preprocessor guards, the shared component's || condition covers both build configurations, and the visual output for existing settings users is bit-for-bit identical to before. The new onboarding cards are additive only.

No files require special attention.

Important Files Changed

Filename Overview
Sources/ColumbaApp/Views/Components/BackgroundVPNExplainer.swift New shared component file; compile-flag guard correctly uses `
Sources/ColumbaApp/Views/Onboarding/BackgroundDeliveryPage.swift Adds privacyCard and badgeCard computed properties plus a private explainerCardStyle() view extension; layout and flag gating look correct.
Sources/ColumbaApp/Views/Settings/BackgroundTransportView.swift Private helpers removed and replaced with shared components; the visual output for settings users is unchanged.
Columba.xcodeproj/project.pbxproj Adds BackgroundVPNExplainer.swift to the Components group and build sources with properly formed GUIDs.

Reviews (2): Last reviewed commit: "feat(onboarding): explain "not a commerc..." | Re-trigger Greptile

Comment thread Columba.xcodeproj/project.pbxproj Outdated
@codecov

codecov Bot commented Jun 20, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…ry page

The final onboarding page brings up the on-device VPN / Network Extension
but only briefly noted that traffic isn't sent to a server. The fuller
explanation that this isn't a traditional / commercial VPN lived only in
Settings → Background Transport, which users never see during onboarding.

Surface that same explanation on the onboarding Background Delivery page:
the "Not a commercial VPN" privacy reassurance and the "VPN badge" note.

To avoid duplicating the copy, extract the explainer content into a shared
component, BackgroundVPNExplainer.swift (VPNNotCommercialExplainer /
VPNBadgeExplainer + the shared section-header/row primitives). Both the
settings screen and the onboarding page now render the same single-sourced
content; each supplies its own card chrome (settings glassCard vs the
onboarding Theme.backgroundSecondary card). The badge sentence's feature
name is parameterized ("background transport" vs "background delivery") to
match each surface's terminology.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@torlando-tech torlando-tech force-pushed the feat/onboarding-not-a-vpn-explainer branch from d18bad6 to 38ddb7c Compare June 20, 2026 21:14
@torlando-tech torlando-tech merged commit aa97f81 into main Jun 20, 2026
3 checks passed
@torlando-tech torlando-tech deleted the feat/onboarding-not-a-vpn-explainer branch June 20, 2026 23:19
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