Repository navigation
feat: restore Free vs Pro tier differentiation across backend, web pricing, and Apple paywall flows - #49
Merged
reason-machines[bot] merged 4 commits intoOct 25, 2026
Conversation
…fix IAP test fixtures Co-authored-by: MatheusKindrazki <36010251+MatheusKindrazki@users.noreply.github.com>
…icing, and Apple paywall flows Co-authored-by: MatheusKindrazki <36010251+MatheusKindrazki@users.noreply.github.com>
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
…re values Co-authored-by: MatheusKindrazki <36010251+MatheusKindrazki@users.noreply.github.com>
Co-authored-by: MatheusKindrazki <36010251+MatheusKindrazki@users.noreply.github.com>
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
After disabling
PRO_FOR_ALL_USERSin #48, a product & code audit of FastShared revealed that commit8d84328(Enable launch unlimited access (#31)) had leftFREE_CAPSidentical toPRO_CAPSacross the backend, the Swift core package, and the marketing/pricing pages, plus several UX gaps in the paywall flows.1. Backend (
backend/)backend/src/lib/tierCaps.ts: RestoredFREE_CAPSto the canonical v1.1 Free limits (uploadsPerDay: 3, maxFileSizeMB: 100, maxRetentionHours: 24, allowsCloudSync: false) while keepingPRO_CAPSatuploadsPerDay: -1, maxFileSizeMB: 2048, maxRetentionHours: 720, allowsCloudSync: true.backend/test/tierCaps.test.ts: Updated unit tests to assert explicit differentiation betweenFREE_CAPSandPRO_CAPSand theirtoWireCaps()serialization.2. Apple App & Share Extension (
apple/)TierCaps.swift&UsageTrackerTests.swift: RestoredTierCaps.freeto 3 uploads/day, 100 MB max file size, and 24-hour retention so client preflight checks (SubscriptionGate) and lock badges on7d/30dretention chips inGatedRetentionPickerandShareRootViewwork out of the box.ShareRootView.swift&Info.plist&FastSharedApp.swift: Fixed the Share Extension'sSharePaywallSheet("OPEN FASTSHARED PRO") deep link fromfastsharedapp://paywalltofastshared://paywall?trigger=..., registeredfastsharedappas a fallback scheme inInfo.plist/project.yml, and wired.onOpenURLon both iOS and macOS to openPaywallViewwith the matching trigger context. Also clamped stale>24hdefault retention inShareRootViewwhen the user is on Free.SettingsView.swift: Added lock icons (lock.fill) to7 daysand30 daysinRetentionPickerSheetfor Free users and routed taps on gated options topaywallCoordinator.present(.longRetentionRequested(policy:)).PaywallTierCard.swift&PaywallView.swift: Changed the CTA button on the one-timeLifetimecard from"Subscribe"to"Unlock Lifetime"and restored thelongRetentionRequestedsubhead ("Pro supports up to 30-day retention. Free tops out at 24 hours.").LibraryView.swift,MacCompanionView.swift,MacMenuBarView.swift,APIClient.swift: WiredSubscriptionGateandAPIError.paymentRequired(including429 free_tier_daily_exceededon batch uploads) to open the Paywall across all macOS and iPad drop/import surfaces.3. Web Landing & Pricing (
web/)web/src/pages/pricing.astro: Restored clear Free (3/day,100 MB,up to 24 h) vs Pro (unlimited,2 GB,up to 30 days,iCloud sync,priority support,Family Sharing up to 6on Lifetime) comparison cards and FAQ answers.web/src/components/Hero.astro,HowItWorks.astro,FAQ.astro: Updated proof strip (Free: 100 MB · 24 h|Pro: 2 GB · 30 d) and retention copy.web/src/components/Nav.astro&Footer.astro: MadePricingvisible on mobile viewports (<640px) in the top nav and addedpricingto the footer links.Verification
cd backend && pnpm typecheck && pnpm test: 15 test suites passed (125/125 tests).cd web && pnpm build:astro check(0 errors, 0 warnings) + 7 static pages built.cd cli && pnpm typecheck && pnpm test && pnpm build: 5 test suites passed (13/13 tests).Contributors