From 9999f876feb9a2d419a79ad601f78053c44d44f8 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Mon, 20 Apr 2026 16:24:20 -0500 Subject: feat(v2.0.0): introduce tracked domains, diffing, and monitoring foundations - replace basic watchlist with structured TrackedDomain model - add manual refresh flow for tracked domains - implement snapshot diffing (DNS, IP, TLS, HTTP, redirect, email, availability) - add change summaries (changed/unchanged + affected sections) - link tracked domains to history snapshots - enhance HistoryEntry with normalized summary fields - persist availability + suggestions in history and export - add WatchlistView with pinning, notes, and status display - introduce premium capability scaffolding (no StoreKit) - enforce free-tier tracked domain limit (local only) - refactor view model to support tracking, diffing, and refresh flows notes: - no background monitoring, notifications, or paid APIs yet - all features remain local-first and manual --- DomainDig/PremiumAccessService.swift | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 DomainDig/PremiumAccessService.swift (limited to 'DomainDig/PremiumAccessService.swift') diff --git a/DomainDig/PremiumAccessService.swift b/DomainDig/PremiumAccessService.swift new file mode 100644 index 0000000..698a2d2 --- /dev/null +++ b/DomainDig/PremiumAccessService.swift @@ -0,0 +1,27 @@ +import Foundation + +enum PremiumAccessService { + static let freeTrackedDomainLimit = 3 + + static func hasAccess(to capability: PremiumCapability) -> Bool { + switch capability { + case .unlimitedTrackedDomains, + .automatedMonitoring, + .pushAlerts, + .batchTracking, + .advancedExports: + return false + } + } + + static func trackedDomainLimitMessage(currentCount: Int) -> String? { + guard currentCount >= freeTrackedDomainLimit, !hasAccess(to: .unlimitedTrackedDomains) else { + return nil + } + return "More tracked domains will be available in a future Pro upgrade." + } + + static func canAddTrackedDomain(currentCount: Int) -> Bool { + hasAccess(to: .unlimitedTrackedDomains) || currentCount < freeTrackedDomainLimit + } +} -- cgit v1.2.3