diff --git a/content/docs/changelog.mdx b/content/docs/changelog.mdx new file mode 100644 index 0000000..0d79c0c --- /dev/null +++ b/content/docs/changelog.mdx @@ -0,0 +1,7 @@ +--- +title: "Changelog" +description: "Track recent updates and additions to the Superwall documentation." +icon: "History" +--- + + diff --git a/content/docs/meta.json b/content/docs/meta.json index 39c531d..0136e01 100644 --- a/content/docs/meta.json +++ b/content/docs/meta.json @@ -9,6 +9,7 @@ "web-checkout", "integrations", "support", + "changelog", "---SDKs---", "ios", diff --git a/next-env.d.ts b/next-env.d.ts index c4b7818..9edff1c 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/dev/types/routes.d.ts"; +import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/package.json b/package.json index 0ca9623..5513af9 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "generate:md": "bun scripts/generate-md-files.ts", "generate:llm": "bun scripts/generate-llm-files.ts", "generate:title-map": "bun scripts/generate-title-map.ts", - "build:prep": "bun run generate:title-map && bun run generate:llm && bun run generate:md && bun run copy:docs-images", + "generate:changelog": "bun scripts/generate-changelog.ts", + "build:prep": "bun run generate:changelog && bun run generate:title-map && bun run generate:llm && bun run generate:md && bun run copy:docs-images", "build": "bun run build:prep && fumadocs-mdx && bun run build:next", "build:next": "NEXT_PRIVATE_STANDALONE=true NEXT_PRIVATE_OUTPUT_TRACE_ROOT=$PWD next build --webpack", "build:cf": "bun run build && opennextjs-cloudflare build -- --skipNextBuild", diff --git a/scripts/generate-changelog.ts b/scripts/generate-changelog.ts new file mode 100644 index 0000000..86b42df --- /dev/null +++ b/scripts/generate-changelog.ts @@ -0,0 +1,267 @@ +import fs from 'fs'; +import path from 'path'; +import matter from 'gray-matter'; +import { getChangedFilesSince, type GitFileChange } from './utils/git-history'; +import { + categorizeFile, + getCategoryOrder, +} from './utils/changelog-categorizer'; +import { + generateDescriptions, + hasApiKey, + type DescriptionRequest, +} from './utils/llm-descriptions'; + +// Configuration +const SINCE_DATE = new Date('2025-12-01'); +const OUTPUT_FILE = path.join(process.cwd(), 'src/lib/changelog-entries.json'); +const MONTHS_TO_KEEP = 3; + +interface ChangelogEntry { + /** Unique key: path:commitHash */ + key: string; + /** Relative path from content/docs */ + path: string; + /** Page title from frontmatter */ + title: string; + /** One-line description of the change */ + description: string; + /** Top-level category */ + category: string; + /** Subcategory (optional) */ + subcategory?: string; + /** Full docs URL */ + url: string; + /** ISO date string of the change */ + date: string; + /** Type of change */ + changeType: 'added' | 'modified'; +} + +interface ChangelogData { + /** When the changelog was last updated */ + lastUpdated: string; + /** All changelog entries (newest first) */ + entries: ChangelogEntry[]; +} + +/** + * Get the cutoff date for pruning old entries (first day of the month, N months ago). + */ +function getCutoffDate(monthsToKeep: number): Date { + const now = new Date(); + return new Date(now.getFullYear(), now.getMonth() - monthsToKeep + 1, 1); +} + +/** + * Filter entries to only keep those within the retention period. + */ +function pruneOldEntries(entries: ChangelogEntry[]): ChangelogEntry[] { + const cutoff = getCutoffDate(MONTHS_TO_KEEP); + return entries.filter((entry) => new Date(entry.date) >= cutoff); +} + +/** + * Load existing changelog data. + */ +function loadExistingChangelog(): ChangelogData { + try { + if (fs.existsSync(OUTPUT_FILE)) { + const content = fs.readFileSync(OUTPUT_FILE, 'utf-8'); + return JSON.parse(content); + } + } catch (error) { + console.warn('Warning: Failed to load existing changelog:', error); + } + return { lastUpdated: '', entries: [] }; +} + +/** + * Extract frontmatter from an MDX file. + */ +function extractFrontmatter( + filePath: string +): { title: string } | null { + try { + if (!fs.existsSync(filePath)) { + return null; + } + + const content = fs.readFileSync(filePath, 'utf-8'); + const { data } = matter(content); + + if (!data.title) { + return null; + } + + return { title: data.title }; + } catch (error) { + console.warn(`Warning: Failed to parse ${filePath}:`, error); + return null; + } +} + +/** + * Convert a file path to a docs URL. + */ +function filePathToUrl(relativePath: string): string { + const normalizedPath = relativePath.replace(/\\/g, '/'); + const cleanPath = normalizedPath + .replace(/^content\/docs\//, '') + .replace(/\.mdx?$/, '') + .replace(/\/index$/, ''); + return `/docs/${cleanPath}`; +} + +/** + * Main generator function. + */ +async function main() { + console.log('šŸ“ Generating documentation changelog...'); + console.log(` Since: ${SINCE_DATE.toISOString().split('T')[0]}`); + + // Load existing changelog + const existing = loadExistingChangelog(); + const existingKeys = new Set(existing.entries.map((e) => e.key)); + console.log(` Existing entries: ${existingKeys.size}`); + + // Get changed files from git + const changes = getChangedFilesSince(SINCE_DATE); + console.log(` Found ${changes.length} changed files in git history`); + + // Find NEW changes (not already in changelog) + const newChanges: Array<{ + change: GitFileChange; + frontmatter: { title: string }; + categoryInfo: ReturnType; + key: string; + }> = []; + + for (const change of changes) { + const key = `${change.path}:${change.commitHash}`; + + // Skip if already in changelog + if (existingKeys.has(key)) { + continue; + } + + const absolutePath = path.join(process.cwd(), change.path); + const frontmatter = extractFrontmatter(absolutePath); + + if (!frontmatter) { + continue; + } + + const normalizedPath = change.path.replace(/\\/g, '/'); + const categoryInfo = categorizeFile(normalizedPath); + + newChanges.push({ + change, + frontmatter, + categoryInfo, + key, + }); + } + + console.log(` New entries to generate: ${newChanges.length}`); + + if (newChanges.length === 0) { + console.log('āœ… Changelog is up to date, no new entries'); + return; + } + + // Check for API key - required for generating new entries + if (!hasApiKey()) { + console.log('\nāš ļø No ANTHROPIC_API_KEY found. Skipping changelog generation.'); + console.log(' To generate descriptions for new entries, add ANTHROPIC_API_KEY to .env.local'); + console.log(` ${newChanges.length} new entries were not added.\n`); + return; + } + + // Generate descriptions for new changes only + const descriptionRequests: DescriptionRequest[] = newChanges.map((item) => ({ + filePath: item.change.path, + commitHash: item.change.commitHash, + changeType: item.change.changeType, + title: item.frontmatter.title, + category: item.categoryInfo.category, + subcategory: item.categoryInfo.subcategory, + })); + + const descriptions = await generateDescriptions(descriptionRequests); + + // Build new entries + const newEntries: ChangelogEntry[] = newChanges.map((item) => { + const cacheKey = `${item.change.path}:${item.change.commitHash}`; + const descResult = descriptions.get(cacheKey); + const normalizedPath = item.change.path.replace(/\\/g, '/'); + const relativePath = normalizedPath.replace(/^content\/docs\//, ''); + + return { + key: item.key, + path: relativePath, + title: item.frontmatter.title, + description: descResult?.description || '', + category: item.categoryInfo.category, + subcategory: item.categoryInfo.subcategory, + url: filePathToUrl(normalizedPath), + date: item.change.date.toISOString(), + changeType: item.change.changeType, + }; + }); + + // Merge: new entries + existing entries + const mergedEntries = [...newEntries, ...existing.entries]; + + // Prune entries older than 3 months + const prunedEntries = pruneOldEntries(mergedEntries); + const prunedCount = mergedEntries.length - prunedEntries.length; + + // Sort by date (newest first), then by category order + prunedEntries.sort((a, b) => { + const dateCompare = new Date(b.date).getTime() - new Date(a.date).getTime(); + if (dateCompare !== 0) return dateCompare; + return getCategoryOrder(a.category) - getCategoryOrder(b.category); + }); + + // Build final changelog data + const changelogData: ChangelogData = { + lastUpdated: new Date().toISOString(), + entries: prunedEntries, + }; + + // Ensure output directory exists + const outputDir = path.dirname(OUTPUT_FILE); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + // Write output + fs.writeFileSync(OUTPUT_FILE, JSON.stringify(changelogData, null, 2), 'utf-8'); + + console.log(`āœ… Changelog updated: ${path.relative(process.cwd(), OUTPUT_FILE)}`); + console.log(` Added ${newEntries.length} new entries`); + if (prunedCount > 0) { + console.log(` Pruned ${prunedCount} entries older than ${MONTHS_TO_KEEP} months`); + } + console.log(` Total entries: ${prunedEntries.length}`); + + // Show category breakdown for new entries + if (newEntries.length > 0) { + const categoryCount = new Map(); + for (const entry of newEntries) { + const count = categoryCount.get(entry.category) || 0; + categoryCount.set(entry.category, count + 1); + } + + console.log(' New entries by category:'); + for (const [category, count] of categoryCount.entries()) { + console.log(` - ${category}: ${count}`); + } + } +} + +main().catch((error) => { + console.error('āŒ Changelog generation failed:', error); + process.exit(1); +}); diff --git a/scripts/utils/changelog-categorizer.ts b/scripts/utils/changelog-categorizer.ts new file mode 100644 index 0000000..d035e76 --- /dev/null +++ b/scripts/utils/changelog-categorizer.ts @@ -0,0 +1,102 @@ +export interface CategoryInfo { + /** Top-level category (e.g., "iOS SDK", "Dashboard") */ + category: string; + /** Subcategory within the main category (e.g., "Guides", "SDK Reference") */ + subcategory?: string; +} + +/** + * Map of top-level folder names to display categories. + */ +const CATEGORY_MAP: Record = { + ios: 'iOS SDK', + android: 'Android SDK', + flutter: 'Flutter SDK', + expo: 'Expo SDK', + 'react-native': 'React Native SDK', + dashboard: 'Dashboard', + integrations: 'Integrations', + 'web-checkout': 'Web Checkout', + support: 'Support', + community: 'Community', +}; + +/** + * Map of subfolder names to display subcategories. + */ +const SUBCATEGORY_MAP: Record = { + quickstart: 'Quickstart', + guides: 'Guides', + 'sdk-reference': 'SDK Reference', + 'dashboard-campaigns': 'Campaigns', + 'dashboard-creating-paywalls': 'Creating Paywalls', + 'dashboard-settings': 'Settings', + faq: 'FAQ', + troubleshooting: 'Troubleshooting', +}; + +/** + * Categorize a file based on its path. + * @param relativePath Path relative to content/docs (e.g., "ios/guides/advanced.mdx") + */ +export function categorizeFile(relativePath: string): CategoryInfo { + // Normalize path separators + const normalizedPath = relativePath.replace(/\\/g, '/'); + + // Remove content/docs prefix if present + const cleanPath = normalizedPath.replace(/^content\/docs\//, ''); + + // Split into segments + const segments = cleanPath.split('/').filter(Boolean); + + if (segments.length === 0) { + return { category: 'Documentation' }; + } + + // First segment is the top-level category + const topLevel = segments[0]; + const category = CATEGORY_MAP[topLevel] || 'Documentation'; + + // Second segment might be a subcategory (if it's a directory, not a file) + let subcategory: string | undefined; + if (segments.length > 2) { + const secondLevel = segments[1]; + subcategory = SUBCATEGORY_MAP[secondLevel]; + } + + return { category, subcategory }; +} + +/** + * Get display string for a category (combines category and subcategory). + */ +export function getCategoryDisplay(info: CategoryInfo): string { + if (info.subcategory) { + return `${info.category} → ${info.subcategory}`; + } + return info.category; +} + +/** + * Sort order for categories (lower = earlier). + */ +const CATEGORY_ORDER: Record = { + 'iOS SDK': 1, + 'Android SDK': 2, + 'Flutter SDK': 3, + 'Expo SDK': 4, + 'React Native SDK': 5, + Dashboard: 6, + Integrations: 7, + 'Web Checkout': 8, + Support: 9, + Community: 10, + Documentation: 99, +}; + +/** + * Get sort order for a category. + */ +export function getCategoryOrder(category: string): number { + return CATEGORY_ORDER[category] ?? 50; +} diff --git a/scripts/utils/git-history.ts b/scripts/utils/git-history.ts new file mode 100644 index 0000000..83c6f16 --- /dev/null +++ b/scripts/utils/git-history.ts @@ -0,0 +1,120 @@ +import { spawnSync } from 'child_process'; + +export interface GitFileChange { + /** Relative path from repo root */ + path: string; + /** Type of change */ + changeType: 'added' | 'modified'; + /** Date of the change */ + date: Date; + /** Commit hash */ + commitHash: string; +} + +/** + * Get all changed MDX files in content/docs since a specific date. + * Only includes additions and modifications (ignores deletions). + * Deduplicates by file path, keeping the most recent change. + */ +export function getChangedFilesSince( + sinceDate: Date, + repoRoot: string = process.cwd() +): GitFileChange[] { + const sinceDateStr = sinceDate.toISOString().split('T')[0]; + + // Use spawnSync to avoid shell interpretation issues with special characters + const result = spawnSync( + 'git', + [ + 'log', + `--since=${sinceDateStr}`, + '--diff-filter=AM', // Only Added or Modified + '--name-status', + '--pretty=format:%H|%aI', + '--', + 'content/docs', + ], + { + cwd: repoRoot, + encoding: 'utf-8', + } + ); + + if (result.error) { + console.warn('Warning: Git command failed:', result.error.message); + return []; + } + + if (result.status !== 0) { + // Git returns non-zero when no repo found or other errors + if (result.stderr?.includes('not a git repository')) { + console.warn('Warning: Not a git repository, generating empty changelog'); + return []; + } + // Some git errors are fine (like no commits matching) + if (result.stdout === '') { + return []; + } + console.warn('Warning: Git command returned non-zero:', result.stderr); + return []; + } + + const output = result.stdout || ''; + const changes = parseGitLog(output); + + // Filter to only .mdx files + const mdxChanges = changes.filter((c) => c.path.endsWith('.mdx')); + + return deduplicateByPath(mdxChanges); +} + +/** + * Parse git log output into structured changes. + */ +function parseGitLog(output: string): GitFileChange[] { + const changes: GitFileChange[] = []; + const lines = output.trim().split('\n').filter(Boolean); + + let currentCommit: { hash: string; date: Date } | null = null; + + for (const line of lines) { + // Commit line: hash|date (no tab character) + if (line.includes('|') && !line.includes('\t')) { + const [hash, dateStr] = line.split('|'); + currentCommit = { hash: hash.trim(), date: new Date(dateStr.trim()) }; + continue; + } + + // File change line: status\tpath + if (currentCommit && (line.startsWith('A\t') || line.startsWith('M\t'))) { + const [status, filePath] = line.split('\t'); + changes.push({ + path: filePath, + changeType: status === 'A' ? 'added' : 'modified', + date: currentCommit.date, + commitHash: currentCommit.hash, + }); + } + } + + return changes; +} + +/** + * Deduplicate changes by file path, keeping the most recent change for each file. + */ +function deduplicateByPath(changes: GitFileChange[]): GitFileChange[] { + const fileMap = new Map(); + + // Sort by date descending (newest first) + const sorted = [...changes].sort((a, b) => b.date.getTime() - a.date.getTime()); + + // Keep first occurrence (newest) for each file + for (const change of sorted) { + if (!fileMap.has(change.path)) { + fileMap.set(change.path, change); + } + } + + return Array.from(fileMap.values()); +} diff --git a/scripts/utils/llm-descriptions.ts b/scripts/utils/llm-descriptions.ts new file mode 100644 index 0000000..bd2a727 --- /dev/null +++ b/scripts/utils/llm-descriptions.ts @@ -0,0 +1,190 @@ +import { spawnSync } from 'child_process'; + +/** + * Get the git diff for a specific file at a specific commit. + */ +function getFileDiff(commitHash: string, filePath: string): string | null { + const result = spawnSync( + 'git', + ['show', '--no-color', '--format=', commitHash, '--', filePath], + { + cwd: process.cwd(), + encoding: 'utf-8', + maxBuffer: 1024 * 1024, // 1MB + } + ); + + if (result.error || result.status !== 0) { + return null; + } + + return result.stdout || null; +} + +/** + * Call Claude API to generate a description for a change. + */ +async function callClaudeAPI( + diff: string, + filePath: string, + changeType: 'added' | 'modified', + title: string +): Promise { + const apiKey = process.env.ANTHROPIC_API_KEY; + if (!apiKey) { + throw new Error('ANTHROPIC_API_KEY not set'); + } + + // Truncate diff if too long (keep first 4000 chars) + const truncatedDiff = diff.length > 4000 ? diff.slice(0, 4000) + '\n... (truncated)' : diff; + + const prompt = `You are writing a changelog entry for documentation changes. Given the following git diff for a documentation file, write a single concise sentence (max 15 words) describing what changed for end users. + +File: ${filePath} +Page title: ${title} +Change type: ${changeType === 'added' ? 'New page' : 'Updated page'} + +Git diff: +\`\`\` +${truncatedDiff} +\`\`\` + +Rules: +- Write from the perspective of what users/developers will learn or benefit from +- Be specific about the content, not generic like "Updated documentation" +- Use active voice and present tense +- Don't start with "This" or "The page" +- Don't mention "documentation" or "docs" +- Examples of good descriptions: + - "Adds step-by-step guide for configuring push notifications" + - "Explains how to handle subscription status changes" + - "Covers new paywall presentation options in v4.0" + - "Fixes incorrect code sample for purchase restoration" + +Write only the description, nothing else:`; + + const response = await fetch('https://api.anthropic.com/v1/messages', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-api-key': apiKey, + 'anthropic-version': '2023-06-01', + }, + body: JSON.stringify({ + model: 'claude-3-5-haiku-20241022', + max_tokens: 100, + messages: [ + { + role: 'user', + content: prompt, + }, + ], + }), + }); + + if (!response.ok) { + const error = await response.text(); + throw new Error(`Claude API error: ${response.status} ${error}`); + } + + const data = await response.json(); + const content = data.content?.[0]?.text?.trim(); + + if (!content) { + throw new Error('Empty response from Claude API'); + } + + return content; +} + +/** + * Generate a fallback description when LLM call fails. + */ +function getFallbackDescription( + changeType: 'added' | 'modified', + category: string, + subcategory?: string +): string { + const action = changeType === 'added' ? 'New' : 'Updated'; + if (subcategory) { + return `${action} ${subcategory.toLowerCase()} for ${category}`; + } + return `${action} ${category} documentation`; +} + +export interface DescriptionRequest { + filePath: string; + commitHash: string; + changeType: 'added' | 'modified'; + title: string; + category: string; + subcategory?: string; +} + +export interface DescriptionResult { + description: string; + fromLLM: boolean; +} + +/** + * Check if API key is available. + */ +export function hasApiKey(): boolean { + return !!process.env.ANTHROPIC_API_KEY; +} + +/** + * Generate descriptions for multiple changes using LLM. + */ +export async function generateDescriptions( + requests: DescriptionRequest[] +): Promise> { + const results = new Map(); + + let llmGenerated = 0; + let fallbacks = 0; + + for (const request of requests) { + const cacheKey = `${request.filePath}:${request.commitHash}`; + + try { + const diff = getFileDiff(request.commitHash, request.filePath); + if (diff) { + const description = await callClaudeAPI( + diff, + request.filePath, + request.changeType, + request.title + ); + + results.set(cacheKey, { + description, + fromLLM: true, + }); + llmGenerated++; + continue; + } + } catch (error) { + console.warn(`Warning: Failed to generate description for ${request.filePath}:`, error); + } + + // Fallback description + const fallbackDesc = getFallbackDescription( + request.changeType, + request.category, + request.subcategory + ); + results.set(cacheKey, { + description: fallbackDesc, + fromLLM: false, + }); + fallbacks++; + } + + // Log summary + if (llmGenerated > 0 || fallbacks > 0) { + console.log(` Descriptions: ${llmGenerated} generated, ${fallbacks} fallback`); + } + + return results; +} diff --git a/src/components/ChangelogEntry.tsx b/src/components/ChangelogEntry.tsx new file mode 100644 index 0000000..3844053 --- /dev/null +++ b/src/components/ChangelogEntry.tsx @@ -0,0 +1,93 @@ +import Link from 'next/link'; + +export interface ChangelogEntryProps { + title: string; + description: string; + url: string; + date: string; + changeType: 'added' | 'modified'; +} + +/** + * Format a date as relative time (e.g., "3 days ago", "2 weeks ago"). + */ +function formatRelativeDate(dateStr: string): string { + const date = new Date(dateStr); + const now = new Date(); + const diffMs = now.getTime() - date.getTime(); + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + if (diffDays === 0) return 'Today'; + if (diffDays === 1) return 'Yesterday'; + if (diffDays < 7) return `${diffDays} days ago`; + if (diffDays < 14) return '1 week ago'; + if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`; + if (diffDays < 60) return '1 month ago'; + return `${Math.floor(diffDays / 30)} months ago`; +} + +/** + * Format a date for display in the title attribute. + */ +function formatFullDate(dateStr: string): string { + return new Date(dateStr).toLocaleDateString('en-US', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric', + }); +} + +export function ChangelogEntry({ + title, + description, + url, + date, + changeType, +}: ChangelogEntryProps) { + return ( +
  • + {/* Title + Pill badge + Date */} +
    +

    + + {title} + +

    + + {/* Change type pill */} + + {changeType === 'added' ? 'New' : 'Update'} + + + {/* Date */} + +
    + + {/* Description */} + {description && ( + + {description} + + )} +
  • + ); +} diff --git a/src/components/ChangelogTimeline.tsx b/src/components/ChangelogTimeline.tsx new file mode 100644 index 0000000..3d3a655 --- /dev/null +++ b/src/components/ChangelogTimeline.tsx @@ -0,0 +1,223 @@ +'use client'; + +import { ChangelogEntry } from './ChangelogEntry'; + +// Import the generated changelog data +// This file is incrementally updated by scripts/generate-changelog.ts +// and should be committed to the repo +import changelogData from '@/lib/changelog-entries.json'; + +interface ChangelogDataType { + lastUpdated: string; + entries: Array<{ + key: string; + path: string; + title: string; + description: string; + category: string; + subcategory?: string; + url: string; + date: string; + changeType: 'added' | 'modified'; + }>; +} + +interface TimePeriod { + label: string; + key: string; + entries: ChangelogDataType['entries']; +} + +interface CategoryGroup { + category: string; + entries: ChangelogDataType['entries']; +} + +/** + * Filter entries to only include the last N months. + */ +function filterToRecentMonths( + entries: ChangelogDataType['entries'], + months: number +): ChangelogDataType['entries'] { + const now = new Date(); + const cutoffDate = new Date(now.getFullYear(), now.getMonth() - months + 1, 1); + + return entries.filter((entry) => { + const entryDate = new Date(entry.date); + return entryDate >= cutoffDate; + }); +} + +/** + * Get the month key for a date (e.g., "2026-01"). + */ +function getMonthKey(date: Date): string { + const year = date.getFullYear(); + const month = (date.getMonth() + 1).toString().padStart(2, '0'); + return `${year}-${month}`; +} + +/** + * Get a human-readable label for a month key. + */ +function getMonthLabel(monthKey: string): string { + const [year, month] = monthKey.split('-'); + const date = new Date(parseInt(year, 10), parseInt(month, 10) - 1, 1); + return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' }); +} + +/** + * Group entries by month. + */ +function groupByMonth(entries: ChangelogDataType['entries']): TimePeriod[] { + const monthMap = new Map(); + + for (const entry of entries) { + const date = new Date(entry.date); + const key = getMonthKey(date); + + if (!monthMap.has(key)) { + monthMap.set(key, []); + } + monthMap.get(key)!.push(entry); + } + + // Convert to array and sort by key (newest first) + const periods: TimePeriod[] = []; + for (const [key, periodEntries] of monthMap.entries()) { + periods.push({ + key, + label: getMonthLabel(key), + entries: periodEntries, + }); + } + + // Sort periods by key descending (newest first) + periods.sort((a, b) => b.key.localeCompare(a.key)); + + return periods; +} + +/** + * Group entries by category. + */ +function groupByCategory( + entries: ChangelogDataType['entries'] +): CategoryGroup[] { + const categoryMap = new Map(); + + for (const entry of entries) { + const key = entry.subcategory + ? `${entry.category} → ${entry.subcategory}` + : entry.category; + + if (!categoryMap.has(key)) { + categoryMap.set(key, []); + } + categoryMap.get(key)!.push(entry); + } + + // Convert to array + const groups: CategoryGroup[] = []; + for (const [category, categoryEntries] of categoryMap.entries()) { + groups.push({ category, entries: categoryEntries }); + } + + return groups; +} + +/** + * Empty state component when no entries exist. + */ +function EmptyState() { + return ( +
    +

    No documentation changes yet

    +

    + Changes to the documentation will appear here automatically. +

    +
    + ); +} + +/** + * ChangelogTimeline renders the auto-generated changelog grouped by month and category. + */ +const MONTHS_TO_SHOW = 3; + +export function ChangelogTimeline() { + const data = changelogData as ChangelogDataType; + + if (!data.entries || data.entries.length === 0) { + return ; + } + + // Only show entries from the last 3 months + const recentEntries = filterToRecentMonths(data.entries, MONTHS_TO_SHOW); + + if (recentEntries.length === 0) { + return ; + } + + const periods = groupByMonth(recentEntries); + + return ( +
    + {periods.map((period) => { + const categoryGroups = groupByCategory(period.entries); + + return ( +
    + {/* Month heading */} +

    + {period.label} +

    + + {/* Category groups within this month */} +
    + {categoryGroups.map((group) => ( +
    + {/* Category subheading */} +

    + {group.category} +

    + + {/* Entries in this category */} +
      + {group.entries.map((entry) => ( + + ))} +
    +
    + ))} +
    +
    + ); + })} + + {/* Footer with generation info */} + +
    + ); +} diff --git a/src/lib/changelog-entries.json b/src/lib/changelog-entries.json new file mode 100644 index 0000000..36ea5aa --- /dev/null +++ b/src/lib/changelog-entries.json @@ -0,0 +1,2737 @@ +{ + "lastUpdated": "2026-01-22T19:48:36.102Z", + "entries": [ + { + "key": "content/docs/changelog.mdx:ea9b8388bf90d855b45ad488ed732830c2d975e1", + "path": "changelog.mdx", + "title": "Changelog", + "description": "Introduces a changelog page to track product updates and version history.", + "category": "Documentation", + "url": "/docs/changelog", + "date": "2026-01-21T21:32:17.000Z", + "changeType": "added" + }, + { + "key": "content/docs/dashboard/overview-metrics.mdx:4d42c4b03754f3ae641edfceeffdb38ef56a27d9", + "path": "dashboard/overview-metrics.mdx", + "title": "Overview", + "description": "Added Quickstart section with AI setup and updated overview page layout.", + "category": "Dashboard", + "url": "/docs/dashboard/overview-metrics", + "date": "2026-01-21T19:40:40.000Z", + "changeType": "modified" + }, + { + "key": "content/docs/android/sdk-reference/SuperwallDelegate.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "android/sdk-reference/SuperwallDelegate.mdx", + "title": "SuperwallDelegate", + "description": "Adds new `userAttributesDidChange` method to track changes in user attributes.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/SuperwallDelegate", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/flutter/sdk-reference/PaywallOptions.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "flutter/sdk-reference/PaywallOptions.mdx", + "title": "PaywallOptions", + "description": "Updates restore failure message description and default text for clarity.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/PaywallOptions", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/expo/sdk-reference/hooks/useSuperwallEvents.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "expo/sdk-reference/hooks/useSuperwallEvents.mdx", + "title": "useSuperwallEvents", + "description": "Adds new `onUserAttributesChange` event handler for tracking external user attribute updates.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/hooks/useSuperwallEvents", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/dashboard/dashboard-creating-paywalls/paywall-editor-layout.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "dashboard/dashboard-creating-paywalls/paywall-editor-layout.mdx", + "title": "Layout", + "description": "Learn keyboard shortcuts for copying and pasting components in the paywall editor.", + "category": "Dashboard", + "subcategory": "Creating Paywalls", + "url": "/docs/dashboard/dashboard-creating-paywalls/paywall-editor-layout", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/dashboard/dashboard-creating-paywalls/paywall-editor-notifications.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "dashboard/dashboard-creating-paywalls/paywall-editor-notifications.mdx", + "title": "Notifications", + "description": "Clarifies how trial-end notifications work across different trial lengths and SDK versions.", + "category": "Dashboard", + "subcategory": "Creating Paywalls", + "url": "/docs/dashboard/dashboard-creating-paywalls/paywall-editor-notifications", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/dashboard/dashboard-creating-paywalls/paywall-editor-styling-elements.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "dashboard/dashboard-creating-paywalls/paywall-editor-styling-elements.mdx", + "title": "Styling Elements", + "description": "Describes new `Set Attribute` tap action for capturing user preferences and tracking engagement.", + "category": "Dashboard", + "subcategory": "Creating Paywalls", + "url": "/docs/dashboard/dashboard-creating-paywalls/paywall-editor-styling-elements", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/integrations/figma-plugin.mdx:356127e6b0af276b023a92a46478eaa5e431e7aa", + "path": "integrations/figma-plugin.mdx", + "title": "Figma Plugin", + "description": "Highlights requirement of Auto Layout in Figma files for successful paywall design import.", + "category": "Integrations", + "url": "/docs/integrations/figma-plugin", + "date": "2026-01-21T13:58:08.000Z", + "changeType": "modified", + "commitHash": "356127e6b0af276b023a92a46478eaa5e431e7aa" + }, + { + "key": "content/docs/ios/guides/intro-offer-eligibility-override.mdx:0a080024cf2ff139d32d0c562960c8218c13003b", + "path": "ios/guides/intro-offer-eligibility-override.mdx", + "title": "Overriding Introductory Offer Eligibility", + "description": "Clarifies additional requirement for App Store Connect API setup for intro offer eligibility.", + "category": "iOS SDK", + "subcategory": "Guides", + "url": "/docs/ios/guides/intro-offer-eligibility-override", + "date": "2026-01-20T21:50:44.000Z", + "changeType": "modified", + "commitHash": "0a080024cf2ff139d32d0c562960c8218c13003b" + }, + { + "key": "content/docs/flutter/changelog.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/changelog.mdx", + "title": "Changelog", + "description": "Updates Flutter SDK changelog with version 2.4.7, highlighting iOS and Android SDK updates.", + "category": "Flutter SDK", + "url": "/docs/flutter/changelog", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "modified", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/index.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/index.mdx", + "title": "Welcome", + "description": "Updates Superwall Flutter SDK version to 2.4.7 in version reference.", + "category": "Flutter SDK", + "url": "/docs/flutter", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "modified", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/sdk-reference/NonSubscriptionTransaction.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/sdk-reference/NonSubscriptionTransaction.mdx", + "title": "NonSubscriptionTransaction", + "description": "Added reference for non-subscription transactions, including properties and usage examples.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/NonSubscriptionTransaction", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "added", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/sdk-reference/SubscriptionTransaction.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/sdk-reference/SubscriptionTransaction.mdx", + "title": "SubscriptionTransaction", + "description": "Adds detailed reference for subscription transactions with new offer and store properties.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/SubscriptionTransaction", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "added", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/sdk-reference/SuperwallDelegate.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/sdk-reference/SuperwallDelegate.mdx", + "title": "SuperwallDelegate", + "description": "Adds new `userAttributesDidChange` method to SuperwallDelegate for tracking user attribute updates", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/SuperwallDelegate", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "modified", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/sdk-reference/index.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/sdk-reference/index.mdx", + "title": "Overview", + "description": "Updates Superwall Flutter SDK reference page to version 2.4.7.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "modified", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/flutter/sdk-reference/setUserAttributes.mdx:0650e8a5b97371e684944c86302b03e316eac961", + "path": "flutter/sdk-reference/setUserAttributes.mdx", + "title": "setUserAttributes()", + "description": "Clarifies `SuperwallDelegate` behavior when setting user attributes in Flutter SDK.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/setUserAttributes", + "date": "2026-01-20T19:31:27.000Z", + "changeType": "modified", + "commitHash": "0650e8a5b97371e684944c86302b03e316eac961" + }, + { + "key": "content/docs/expo/changelog.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/changelog.mdx", + "title": "Changelog", + "description": "Updates Expo SDK changelog with version 1.0.1 release notes and Android back button handling.", + "category": "Expo SDK", + "url": "/docs/expo/changelog", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/expo/guides/configuring.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/guides/configuring.mdx", + "title": "Configuring", + "description": "Adds detailed Expo-specific Superwall configuration options with example usage.", + "category": "Expo SDK", + "subcategory": "Guides", + "url": "/docs/expo/guides/configuring", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/expo/guides/web-checkout/post-checkout-redirecting.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/guides/web-checkout/post-checkout-redirecting.mdx", + "title": "Post-Checkout Redirecting", + "description": "Adds details on accessing product data after successful checkout with new `product` object.", + "category": "Expo SDK", + "subcategory": "Guides", + "url": "/docs/expo/guides/web-checkout/post-checkout-redirecting", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/expo/index.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/index.mdx", + "title": "Welcome", + "description": "Updates SDK version to v1.0.1 in Expo integration guide.", + "category": "Expo SDK", + "url": "/docs/expo", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/expo/sdk-reference/components/SuperwallProvider.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/sdk-reference/components/SuperwallProvider.mdx", + "title": "SuperwallProvider", + "description": "Describes how to consume rerouted Android back buttons in SuperwallProvider with custom handling.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/components/SuperwallProvider", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/expo/sdk-reference/index.mdx:ef191593da584599bd65d16ce79c44e37cd7f726", + "path": "expo/sdk-reference/index.mdx", + "title": "Overview", + "description": "Updates SDK reference to latest version v1.0.1.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference", + "date": "2026-01-17T00:50:39.000Z", + "changeType": "modified", + "commitHash": "ef191593da584599bd65d16ce79c44e37cd7f726" + }, + { + "key": "content/docs/ios/guides/advanced/request-permissions-from-paywalls.mdx:ff0cebd2c8c068dc4b6657f5235943be35b30b4c", + "path": "ios/guides/advanced/request-permissions-from-paywalls.mdx", + "title": "Request permissions from paywalls", + "description": "Adds note about upcoming **Request permission** action in paywall editor rollout.", + "category": "iOS SDK", + "subcategory": "Guides", + "url": "/docs/ios/guides/advanced/request-permissions-from-paywalls", + "date": "2026-01-16T07:30:31.000Z", + "changeType": "modified", + "commitHash": "ff0cebd2c8c068dc4b6657f5235943be35b30b4c" + }, + { + "key": "content/docs/ios/sdk-reference/SuperwallEvent.mdx:ff0cebd2c8c068dc4b6657f5235943be35b30b4c", + "path": "ios/sdk-reference/SuperwallEvent.mdx", + "title": "SuperwallEvent", + "description": "Added note about upcoming Request permission action in paywall editor for iOS SDK.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/SuperwallEvent", + "date": "2026-01-16T07:30:31.000Z", + "changeType": "modified", + "commitHash": "ff0cebd2c8c068dc4b6657f5235943be35b30b4c" + }, + { + "key": "content/docs/web-checkout/web-checkout-configuring-stripe-keys-and-settings.mdx:7eb91dc24bb1e2efb3656010e8b176b33a7d702a", + "path": "web-checkout/web-checkout-configuring-stripe-keys-and-settings.mdx", + "title": "Stripe Setup", + "description": "Provides detailed, illustrated steps for configuring Stripe keys in Superwall with live and test modes.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-configuring-stripe-keys-and-settings", + "date": "2026-01-16T01:56:14.000Z", + "changeType": "modified", + "commitHash": "7eb91dc24bb1e2efb3656010e8b176b33a7d702a" + }, + { + "key": "content/docs/ios/guides/embedded-paywalls-in-scrollviews.mdx:ec8cde22a92a78f65d4770b6a9813ca8bf89fbf8", + "path": "ios/guides/embedded-paywalls-in-scrollviews.mdx", + "title": "Article-Style Paywalls: Inline with Additional Plans", + "description": "Learn how to embed inline paywalls in scrollable articles with optional full-screen plans.", + "category": "iOS SDK", + "subcategory": "Guides", + "url": "/docs/ios/guides/embedded-paywalls-in-scrollviews", + "date": "2026-01-15T21:38:48.000Z", + "changeType": "added", + "commitHash": "ec8cde22a92a78f65d4770b6a9813ca8bf89fbf8" + }, + { + "key": "content/docs/integrations/customer-io.mdx:d4341530f075a041705df739ccbd958feb92f137", + "path": "integrations/customer-io.mdx", + "title": "Customer.io", + "description": "Introduces comprehensive guide for integrating Superwall events with Customer.io's Data Pipelines API.", + "category": "Integrations", + "url": "/docs/integrations/customer-io", + "date": "2026-01-14T17:05:48.000Z", + "changeType": "added", + "commitHash": "d4341530f075a041705df739ccbd958feb92f137" + }, + { + "key": "content/docs/integrations/discord.mdx:d4341530f075a041705df739ccbd958feb92f137", + "path": "integrations/discord.mdx", + "title": "Discord", + "description": "Adds comprehensive Discord integration guide with setup, configuration, and webhook creation steps.", + "category": "Integrations", + "url": "/docs/integrations/discord", + "date": "2026-01-14T17:05:48.000Z", + "changeType": "added", + "commitHash": "d4341530f075a041705df739ccbd958feb92f137" + }, + { + "key": "content/docs/integrations/facebook-pixel.mdx:d4341530f075a041705df739ccbd958feb92f137", + "path": "integrations/facebook-pixel.mdx", + "title": "Facebook Pixel", + "description": "Introduces Facebook Pixel integration guide with comprehensive configuration and tracking options.", + "category": "Integrations", + "url": "/docs/integrations/facebook-pixel", + "date": "2026-01-14T17:05:48.000Z", + "changeType": "added", + "commitHash": "d4341530f075a041705df739ccbd958feb92f137" + }, + { + "key": "content/docs/web-checkout/web-checkout-creating-campaigns-to-show-paywalls.mdx:788567fb5bd3dfd29ed6f7de98fa5a5600270061", + "path": "web-checkout/web-checkout-creating-campaigns-to-show-paywalls.mdx", + "title": "Web Checkout Links", + "description": "Added link to Superwall Stripe app in Stripe configuration instructions.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-creating-campaigns-to-show-paywalls", + "date": "2026-01-14T00:59:35.000Z", + "changeType": "modified", + "commitHash": "788567fb5bd3dfd29ed6f7de98fa5a5600270061" + }, + { + "key": "content/docs/web-checkout/web-checkout-direct-stripe-checkout.mdx:788567fb5bd3dfd29ed6f7de98fa5a5600270061", + "path": "web-checkout/web-checkout-direct-stripe-checkout.mdx", + "title": "App2Web", + "description": "Clarifies web checkout setup by specifying installation of Superwall Stripe app.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-direct-stripe-checkout", + "date": "2026-01-14T00:59:35.000Z", + "changeType": "modified", + "commitHash": "788567fb5bd3dfd29ed6f7de98fa5a5600270061" + }, + { + "key": "content/docs/web-checkout/web-checkout-overview.mdx:788567fb5bd3dfd29ed6f7de98fa5a5600270061", + "path": "web-checkout/web-checkout-overview.mdx", + "title": "Overview", + "description": "Added Stripe app installation guide and clarified Paddle setup steps for Web Checkout.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-overview", + "date": "2026-01-14T00:59:35.000Z", + "changeType": "modified", + "commitHash": "788567fb5bd3dfd29ed6f7de98fa5a5600270061" + }, + { + "key": "content/docs/ios/guides/testing-purchases.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/guides/testing-purchases.mdx", + "title": "Setting up StoreKit testing", + "description": "Explains how to set up local StoreKit testing environment for in-app purchases in Xcode.", + "category": "iOS SDK", + "subcategory": "Guides", + "url": "/docs/ios/guides/testing-purchases", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/NonSubscriptionTransaction.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/NonSubscriptionTransaction.mdx", + "title": "NonSubscriptionTransaction", + "description": "Replaces table with more detailed TypeTable component for NonSubscriptionTransaction properties.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/NonSubscriptionTransaction", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/PaywallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/PaywallOptions.mdx", + "title": "PaywallOptions", + "description": "Provides detailed configuration options for customizing paywall interactions and alerts in iOS SDK.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/PaywallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/PaywallPresentationHandler.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/PaywallPresentationHandler.mdx", + "title": "PaywallPresentationHandler", + "description": "Replaces table with TypeTable for PaywallPresentationHandler method descriptions and types.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/PaywallPresentationHandler", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/PurchaseController.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/PurchaseController.mdx", + "title": "PurchaseController", + "description": "Updated PurchaseController reference to use TypeTable for clearer parameter descriptions.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/PurchaseController", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/SubscriptionTransaction.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/SubscriptionTransaction.mdx", + "title": "SubscriptionTransaction", + "description": "Updated SubscriptionTransaction properties table with more detailed type and requirement information.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/SubscriptionTransaction", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/SuperwallDelegate.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/SuperwallDelegate.mdx", + "title": "SuperwallDelegate", + "description": "Updates SuperwallDelegate reference with more detailed method type and parameter information.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/SuperwallDelegate", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/SuperwallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/SuperwallOptions.mdx", + "title": "SuperwallOptions", + "description": "Updates SuperwallOptions reference with new TypeTable and clarified StoreKit, transaction check details.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/SuperwallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/advanced/getPaywall.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/advanced/getPaywall.mdx", + "title": "getPaywall()", + "description": "Improves getPaywall method reference with detailed parameter descriptions and TypeTable.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/advanced/getPaywall", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/configure.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/configure.mdx", + "title": "configure()", + "description": "Replaces markdown table with TypeTable component for clearer parameter descriptions and formatting.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/configure", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/customerInfo.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/customerInfo.mdx", + "title": "customerInfo", + "description": "Updated CustomerInfo reference with more detailed property descriptions and TypeTable.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/customerInfo", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/entitlements.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/entitlements.mdx", + "title": "entitlements", + "description": "Updates entitlements section with new TypeTable component and consistent property descriptions.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/entitlements", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/getPresentationResult.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/getPresentationResult.mdx", + "title": "getPresentationResult()", + "description": "Updated parameter table format for getPresentationResult() method using TypeTable component.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/getPresentationResult", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/handleDeepLink.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/handleDeepLink.mdx", + "title": "handleDeepLink()", + "description": "Updated handleDeepLink method documentation with improved parameter type definition and clarified return value.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/handleDeepLink", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/identify.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/identify.mdx", + "title": "identify()", + "description": "Updated parameter table format for identify() method with improved type description.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/identify", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/register.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/register.mdx", + "title": "register()", + "description": "Replaces parameter table with TypeTable for clearer, more structured register() method documentation", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/register", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/setIntegrationAttributes.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/setIntegrationAttributes.mdx", + "title": "setIntegrationAttributes", + "description": "Updates parameter table to use TypeTable component with clear attribute definition.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/setIntegrationAttributes", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/sdk-reference/setUserAttributes.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "ios/sdk-reference/setUserAttributes.mdx", + "title": "setUserAttributes()", + "description": "Updates parameter table format and clarifies setUserAttributes method details for iOS SDK.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/setUserAttributes", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/PaywallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/PaywallOptions.mdx", + "title": "PaywallOptions", + "description": "Updates PaywallOptions reference with new TypeTable format and enhanced parameter descriptions.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/PaywallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/PurchaseController.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/PurchaseController.mdx", + "title": "PurchaseController", + "description": "Updates PurchaseController reference with new TypeTable layout for clearer method parameter descriptions.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/PurchaseController", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/SuperwallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/SuperwallOptions.mdx", + "title": "SuperwallOptions", + "description": "Updates `SuperwallOptions` reference page with enhanced TypeTable for detailed configuration parameters.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/SuperwallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/advanced/PaywallBuilder.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/advanced/PaywallBuilder.mdx", + "title": "PaywallBuilder", + "description": "Replaces parameter table with TypeTable component, adding required field indicators.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/advanced/PaywallBuilder", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/advanced/setSubscriptionStatus.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/advanced/setSubscriptionStatus.mdx", + "title": "setSubscriptionStatus()", + "description": "Updates `setSubscriptionStatus()` parameter table to use TypeTable component for clarity.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/advanced/setSubscriptionStatus", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/configure.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/configure.mdx", + "title": "configure()", + "description": "Updated Android SDK configuration method with new ActivityProvider parameter and Result-based completion handler.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/configure", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/getPresentationResult.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/getPresentationResult.mdx", + "title": "getPresentationResult()", + "description": "Updates parameter table with new TypeTable component for getPresentationResult() method.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/getPresentationResult", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/handleDeepLink.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/handleDeepLink.mdx", + "title": "handleDeepLink()", + "description": "Updated parameter table format for `handleDeepLink()` method using TypeTable component.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/handleDeepLink", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/identify.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/identify.mdx", + "title": "identify()", + "description": "Replaces parameter table with TypeTable for improved clarity on `identify()` method parameters.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/identify", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/register.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/register.mdx", + "title": "register()", + "description": "Updates `register()` method reference with improved TypeTable for clearer parameter descriptions.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/register", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/android/sdk-reference/setUserAttributes.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "android/sdk-reference/setUserAttributes.mdx", + "title": "setUserAttributes()", + "description": "Updates user attributes parameter table with improved TypeTable component and description.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/setUserAttributes", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/guides/testing-purchases.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/guides/testing-purchases.mdx", + "title": "StoreKit testing (iOS only)", + "description": "Explains StoreKit testing setup in Xcode for local in-app purchase testing on iOS.", + "category": "Flutter SDK", + "subcategory": "Guides", + "url": "/docs/flutter/guides/testing-purchases", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/CustomerInfo.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/CustomerInfo.mdx", + "title": "CustomerInfo", + "description": "Improves CustomerInfo reference with enhanced table format and clarified property details.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/CustomerInfo", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/Entitlements.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/Entitlements.mdx", + "title": "Entitlements", + "description": "Describes Entitlements properties using a new TypeTable component for clearer presentation.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/Entitlements", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/IntegrationAttribute.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/IntegrationAttribute.mdx", + "title": "IntegrationAttribute", + "description": "Removes detailed table of integration attribute values from IntegrationAttribute reference page.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/IntegrationAttribute", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/PaywallPresentationHandler.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/PaywallPresentationHandler.mdx", + "title": "PaywallPresentationHandler", + "description": "Improves PaywallPresentationHandler reference with enhanced TypeTable and parameter details.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/PaywallPresentationHandler", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/PresentationResult.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/PresentationResult.mdx", + "title": "PresentationResult", + "description": "Removes detailed cases table for PresentationResult, replaced with placeholder TypeTable component.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/PresentationResult", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/PurchaseController.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/PurchaseController.mdx", + "title": "PurchaseController", + "description": "Updates PurchaseController parameter table to use TypeTable component with more structured information.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/PurchaseController", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/SuperwallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/SuperwallOptions.mdx", + "title": "SuperwallOptions", + "description": "Replaced table with detailed TypeTable for SuperwallOptions parameters with more context and defaults.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/SuperwallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/advanced/setSubscriptionStatus.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/advanced/setSubscriptionStatus.mdx", + "title": "setSubscriptionStatus()", + "description": "Updated parameter table format to improve readability and clarity for setSubscriptionStatus().", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/advanced/setSubscriptionStatus", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/configure.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/configure.mdx", + "title": "configure()", + "description": "Updates `configure()` parameter table with a new TypeTable component for improved readability.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/configure", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/consume.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/consume.mdx", + "title": "consume()", + "description": "Updates consume() parameter table to use TypeTable component for clearer presentation.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/consume", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/getPresentationResult.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/getPresentationResult.mdx", + "title": "getPresentationResult()", + "description": "Updates parameter table to use TypeTable component with clearer, more structured parameter descriptions.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/getPresentationResult", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/handleDeepLink.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/handleDeepLink.mdx", + "title": "handleDeepLink()", + "description": "Updates `handleDeepLink()` reference to use TypeTable for clearer parameter documentation.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/handleDeepLink", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/identify.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/identify.mdx", + "title": "identify()", + "description": "Updates identify() method reference with improved TypeTable component for parameter details.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/identify", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/overrideProductsByName.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/overrideProductsByName.mdx", + "title": "overrideProductsByName", + "description": "Updates reference page to use TypeTable component for parameter description.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/overrideProductsByName", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/register.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/register.mdx", + "title": "registerPlacement()", + "description": "Replaces parameter table with more detailed TypeTable for registerPlacement() function parameters.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/register", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/setIntegrationAttribute.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/setIntegrationAttribute.mdx", + "title": "setIntegrationAttribute()", + "description": "Updated parameter table format with improved type definition and clarity.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/setIntegrationAttribute", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/flutter/sdk-reference/setIntegrationAttributes.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "flutter/sdk-reference/setIntegrationAttributes.mdx", + "title": "setIntegrationAttributes()", + "description": "Updates parameter table to use TypeTable component for clearer attribute documentation.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/setIntegrationAttributes", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/guides/testing-purchases.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/guides/testing-purchases.mdx", + "title": "StoreKit testing (iOS only)", + "description": "Provides detailed steps for StoreKit testing in Expo with development builds on iOS.", + "category": "Expo SDK", + "subcategory": "Guides", + "url": "/docs/expo/guides/testing-purchases", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/components/CustomPurchaseControllerProvider.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/components/CustomPurchaseControllerProvider.mdx", + "title": "CustomPurchaseControllerProvider", + "description": "Clarifies how to handle purchase and restore outcomes in the CustomPurchaseControllerProvider.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/components/CustomPurchaseControllerProvider", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/components/SuperwallError.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/components/SuperwallError.mdx", + "title": "SuperwallError", + "description": "Updates SuperwallError component props section with improved type and description clarity.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/components/SuperwallError", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/components/SuperwallLoaded.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/components/SuperwallLoaded.mdx", + "title": "SuperwallLoaded", + "description": "Adds TypeTable to describe the `children` prop with type and requirement details.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/components/SuperwallLoaded", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/components/SuperwallLoading.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/components/SuperwallLoading.mdx", + "title": "SuperwallLoading", + "description": "Adds prop details for SuperwallLoading component, explaining required children prop.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/components/SuperwallLoading", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/getPresentationResult.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/getPresentationResult.mdx", + "title": "getPresentationResult()", + "description": "Updates `getPresentationResult()` reference with new `TypeTable` component and detailed result types.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/getPresentationResult", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/hooks/usePlacement.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/hooks/usePlacement.mdx", + "title": "usePlacement", + "description": "Improves usePlacement hook documentation with new TypeTable component and detailed state descriptions", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/hooks/usePlacement", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/hooks/useSuperwall.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/hooks/useSuperwall.mdx", + "title": "useSuperwall", + "description": "Updated `useSuperwall` hook reference with improved type details and configuration options.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/hooks/useSuperwall", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/expo/sdk-reference/hooks/useUser.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "expo/sdk-reference/hooks/useUser.mdx", + "title": "useUser", + "description": "Adds detailed type definitions and descriptions for all `useUser` hook returned values.", + "category": "Expo SDK", + "subcategory": "SDK Reference", + "url": "/docs/expo/sdk-reference/hooks/useUser", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/PaywallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/PaywallOptions.mdx", + "title": "PaywallOptions", + "description": "Updates PaywallOptions reference with more detailed type descriptions and new TypeTable component.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/PaywallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/PaywallPresentationHandler.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/PaywallPresentationHandler.mdx", + "title": "PaywallPresentationHandler", + "description": "Updates SDK reference table to TypeTable for PaywallPresentationHandler method details.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/PaywallPresentationHandler", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/PurchaseController.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/PurchaseController.mdx", + "title": "PurchaseController", + "description": "Updated PurchaseController reference with improved method type definitions and table layout.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/PurchaseController", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/SuperwallDelegate.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/SuperwallDelegate.mdx", + "title": "SuperwallDelegate", + "description": "Updated SuperwallDelegate reference with detailed TypeScript method signatures and descriptions.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/SuperwallDelegate", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/SuperwallOptions.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/SuperwallOptions.mdx", + "title": "SuperwallOptions", + "description": "Replaces parameter table with more detailed TypeTable for SuperwallOptions properties.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/SuperwallOptions", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/configure.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/configure.mdx", + "title": "configure()", + "description": "Updates configure() method reference with improved TypeTable component and parameter descriptions.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/configure", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/handleDeepLink.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/handleDeepLink.mdx", + "title": "handleDeepLink()", + "description": "Updates parameter table style and confirms `url` parameter is required for `handleDeepLink()`.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/handleDeepLink", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/identify.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/identify.mdx", + "title": "identify()", + "description": "Updates identify() method reference with improved TypeTable component for clearer parameter descriptions.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/identify", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/register.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/register.mdx", + "title": "register()", + "description": "Updates register() parameter reference to use TypeTable for clearer, more structured parameter descriptions.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/register", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/setUserAttributes.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/setUserAttributes.mdx", + "title": "setUserAttributes()", + "description": "Updates parameter table formatting for setUserAttributes() method reference.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/setUserAttributes", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/react-native/sdk-reference/subscriptionStatus.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "react-native/sdk-reference/subscriptionStatus.mdx", + "title": "Subscription Status", + "description": "Updates component reference for `setSubscriptionStatus` method using new TypeTable component.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/subscriptionStatus", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/dashboard/dashboard-campaigns/campaigns-standard-placements.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "dashboard/dashboard-campaigns/campaigns-standard-placements.mdx", + "title": "Standard Placements", + "description": "Expands Standard Placements documentation with detailed event descriptions, parameters, and usage examples.", + "category": "Dashboard", + "subcategory": "Campaigns", + "url": "/docs/dashboard/dashboard-campaigns/campaigns-standard-placements", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/support/troubleshooting/4780985851-troubleshooting-expo-sdk.mdx:43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1", + "path": "support/troubleshooting/4780985851-troubleshooting-expo-sdk.mdx", + "title": "Troubleshooting: Expo SDK", + "description": "Adds troubleshooting guide for Android paywall orientation with Expo SDK config plugin.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/4780985851-troubleshooting-expo-sdk", + "date": "2026-01-08T01:23:03.000Z", + "changeType": "modified", + "commitHash": "43e81a83ff2053e3aa39db3e2057c3ef0a2aa2c1" + }, + { + "key": "content/docs/ios/changelog.mdx:7884217842b337a88548b9aeba532fbdfc5976bb", + "path": "ios/changelog.mdx", + "title": "Changelog", + "description": "Adds preload events, permission request actions, and improves drawer presentation in iOS SDK.", + "category": "iOS SDK", + "url": "/docs/ios/changelog", + "date": "2026-01-07T20:49:41.000Z", + "changeType": "modified", + "commitHash": "7884217842b337a88548b9aeba532fbdfc5976bb" + }, + { + "key": "content/docs/ios/index.mdx:7884217842b337a88548b9aeba532fbdfc5976bb", + "path": "ios/index.mdx", + "title": "Welcome", + "description": "Updates SDK version reference to latest 4.12.0 release.", + "category": "iOS SDK", + "url": "/docs/ios", + "date": "2026-01-07T20:49:41.000Z", + "changeType": "modified", + "commitHash": "7884217842b337a88548b9aeba532fbdfc5976bb" + }, + { + "key": "content/docs/ios/sdk-reference/index.mdx:7884217842b337a88548b9aeba532fbdfc5976bb", + "path": "ios/sdk-reference/index.mdx", + "title": "Overview", + "description": "Updates SDK reference page with latest Superwall iOS SDK version 4.12.0.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference", + "date": "2026-01-07T20:49:41.000Z", + "changeType": "modified", + "commitHash": "7884217842b337a88548b9aeba532fbdfc5976bb" + }, + { + "key": "content/docs/community/capacitor.mdx:3e3e740d3a696d529bb2e14cc70bc86f36a31b5a", + "path": "community/capacitor.mdx", + "title": "Capacitor", + "description": "Adds Capacitor SDK integration guide with installation, configuration, and event handling steps", + "category": "Community", + "url": "/docs/community/capacitor", + "date": "2026-01-07T15:10:07.000Z", + "changeType": "added", + "commitHash": "3e3e740d3a696d529bb2e14cc70bc86f36a31b5a" + }, + { + "key": "content/docs/community/index.mdx:3e3e740d3a696d529bb2e14cc70bc86f36a31b5a", + "path": "community/index.mdx", + "title": "Community SDKs", + "description": "Introduces community-maintained Superwall SDKs, starting with Capacitor plugin support.", + "category": "Community", + "url": "/docs/community", + "date": "2026-01-07T15:10:07.000Z", + "changeType": "added", + "commitHash": "3e3e740d3a696d529bb2e14cc70bc86f36a31b5a" + }, + { + "key": "content/docs/ios/vibe-coding-guide.mdx:b93ae29fd12adc2c0d8cfcea97516bded272bc9f", + "path": "ios/vibe-coding-guide.mdx", + "title": "Superwall iOS Vibe Coding Guide", + "description": "Adds comprehensive iOS SDK integration guide covering installation, configuration, and features.", + "category": "iOS SDK", + "url": "/docs/ios/vibe-coding-guide", + "date": "2025-12-30T22:22:38.000Z", + "changeType": "added", + "commitHash": "b93ae29fd12adc2c0d8cfcea97516bded272bc9f" + }, + { + "key": "content/docs/android/vibe-coding-guide.mdx:b93ae29fd12adc2c0d8cfcea97516bded272bc9f", + "path": "android/vibe-coding-guide.mdx", + "title": "Superwall Android Vibe Coding Guide", + "description": "Added comprehensive Android SDK guide covering installation, configuration, and user management.", + "category": "Android SDK", + "url": "/docs/android/vibe-coding-guide", + "date": "2025-12-30T22:22:38.000Z", + "changeType": "added", + "commitHash": "b93ae29fd12adc2c0d8cfcea97516bded272bc9f" + }, + { + "key": "content/docs/flutter/vibe-coding-guide.mdx:b93ae29fd12adc2c0d8cfcea97516bded272bc9f", + "path": "flutter/vibe-coding-guide.mdx", + "title": "Superwall Flutter Vibe Coding Guide", + "description": "Adds comprehensive Flutter SDK guide covering installation, configuration, and best practices", + "category": "Flutter SDK", + "url": "/docs/flutter/vibe-coding-guide", + "date": "2025-12-30T22:22:38.000Z", + "changeType": "added", + "commitHash": "b93ae29fd12adc2c0d8cfcea97516bded272bc9f" + }, + { + "key": "content/docs/expo/vibe-coding-guide.mdx:b93ae29fd12adc2c0d8cfcea97516bded272bc9f", + "path": "expo/vibe-coding-guide.mdx", + "title": "Superwall Expo Vibe Coding Guide", + "description": "Adds comprehensive Expo Vibe SDK implementation guide with step-by-step instructions.", + "category": "Expo SDK", + "url": "/docs/expo/vibe-coding-guide", + "date": "2025-12-30T22:22:38.000Z", + "changeType": "added", + "commitHash": "b93ae29fd12adc2c0d8cfcea97516bded272bc9f" + }, + { + "key": "content/docs/react-native/vibe-coding-guide.mdx:b93ae29fd12adc2c0d8cfcea97516bded272bc9f", + "path": "react-native/vibe-coding-guide.mdx", + "title": "Superwall React Native Vibe Coding Guide", + "description": "Provides comprehensive guide for setting up Superwall SDK in React Native applications.", + "category": "React Native SDK", + "url": "/docs/react-native/vibe-coding-guide", + "date": "2025-12-30T22:22:38.000Z", + "changeType": "added", + "commitHash": "b93ae29fd12adc2c0d8cfcea97516bded272bc9f" + }, + { + "key": "content/docs/ios/guides/superwall-deep-links.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "ios/guides/superwall-deep-links.mdx", + "title": "Using Superwall Deep Links", + "description": "Added guide for using Superwall Deep Links to trigger paywalls and custom in-app behavior.", + "category": "iOS SDK", + "subcategory": "Guides", + "url": "/docs/ios/guides/superwall-deep-links", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "added", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/ios/sdk-reference/Superwall.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "ios/sdk-reference/Superwall.mdx", + "title": "Superwall", + "description": "Adds guidance on when and how to reset user state with `Superwall.shared.reset()`", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/Superwall", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/android/changelog.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "android/changelog.mdx", + "title": "Changelog", + "description": "Adds detailed changelog for Superwall Android SDK, covering releases from 2.5.7 to 2.6.6.", + "category": "Android SDK", + "url": "/docs/android/changelog", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "added", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/android/sdk-reference/Superwall.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "android/sdk-reference/Superwall.mdx", + "title": "Superwall", + "description": "Adds guidance on resetting user state and when to use the reset method in the SDK.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference/Superwall", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/flutter/guides/superwall-deep-links.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "flutter/guides/superwall-deep-links.mdx", + "title": "Using Superwall Deep Links", + "description": "Added guide for using Superwall Deep Links to trigger paywalls or custom behavior.", + "category": "Flutter SDK", + "subcategory": "Guides", + "url": "/docs/flutter/guides/superwall-deep-links", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "added", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/flutter/sdk-reference/Superwall.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "flutter/sdk-reference/Superwall.mdx", + "title": "Superwall.shared", + "description": "Added guidance on resetting user state and best practices for SDK user management.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/Superwall", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/expo/guides/setting-locale.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "expo/guides/setting-locale.mdx", + "title": "Setting a Locale", + "description": "Explains how to override device locale for previewing localized paywalls and testing targeting rules.", + "category": "Expo SDK", + "subcategory": "Guides", + "url": "/docs/expo/guides/setting-locale", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "added", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/expo/quickstart/in-app-paywall-previews.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "expo/quickstart/in-app-paywall-previews.mdx", + "title": "Handling Deep Links", + "description": "Updates page title to clarify focus on handling deep links in Expo.", + "category": "Expo SDK", + "subcategory": "Quickstart", + "url": "/docs/expo/quickstart/in-app-paywall-previews", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/react-native/changelog.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "react-native/changelog.mdx", + "title": "Changelog", + "description": "Introduces changelog tracking release notes for Superwall React Native SDK versions.", + "category": "React Native SDK", + "url": "/docs/react-native/changelog", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "added", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/react-native/sdk-reference/Superwall.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "react-native/sdk-reference/Superwall.mdx", + "title": "Superwall", + "description": "Added method to reset user state with guidance on when to use `Superwall.shared.reset()`.", + "category": "React Native SDK", + "subcategory": "SDK Reference", + "url": "/docs/react-native/sdk-reference/Superwall", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/dashboard/dashboard-campaigns/campaigns-placements.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "dashboard/dashboard-campaigns/campaigns-placements.mdx", + "title": "Placements", + "description": "Added explanation of placement parameters and their uses in campaigns and paywalls.", + "category": "Dashboard", + "subcategory": "Campaigns", + "url": "/docs/dashboard/dashboard-campaigns/campaigns-placements", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/dashboard/dashboard-settings/overview-settings-revenue-tracking-google-play.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "dashboard/dashboard-settings/overview-settings-revenue-tracking-google-play.mdx", + "title": "Google Play Revenue Tracking", + "description": "Added troubleshooting step for missing topic name field in Google Play Console setup.", + "category": "Dashboard", + "subcategory": "Settings", + "url": "/docs/dashboard/dashboard-settings/overview-settings-revenue-tracking-google-play", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/dashboard/products.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "dashboard/products.mdx", + "title": "Adding Products", + "description": "Updates headings and clarifies Google Play offer selection and tagging process for developers.", + "category": "Dashboard", + "url": "/docs/dashboard/products", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/web-checkout/web-checkout-faq.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "web-checkout/web-checkout-faq.mdx", + "title": "Web Checkout FAQ", + "description": "Explains Superwall's default email behavior after web checkout and how to disable it", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-faq", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/web-checkout/web-checkout-managing-memberships.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "web-checkout/web-checkout-managing-memberships.mdx", + "title": "Restoring & Managing Purchases", + "description": "Added details on default activation email process and how to disable Superwall emails.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-managing-memberships", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/support/web-checkout/3969573187-how-do-i-disable-the-activation-link-email-for-web-checkout.mdx:4db2e26374a73d60e17cb3598f2bb13dd779a7f3", + "path": "support/web-checkout/3969573187-how-do-i-disable-the-activation-link-email-for-web-checkout.mdx", + "title": "How do I disable the activation link email for web checkout?", + "description": "Describes default activation email details for web checkout, including sender and subject.", + "category": "Support", + "url": "/docs/support/web-checkout/3969573187-how-do-i-disable-the-activation-link-email-for-web-checkout", + "date": "2025-12-23T00:12:28.000Z", + "changeType": "modified", + "commitHash": "4db2e26374a73d60e17cb3598f2bb13dd779a7f3" + }, + { + "key": "content/docs/ios/sdk-reference/getDeviceAttributes.mdx:37a09e99365e6020a181fc95fee8fd624c15e4c6", + "path": "ios/sdk-reference/getDeviceAttributes.mdx", + "title": "getDeviceAttributes", + "description": "Deprecates `isApplePayAvailable` attribute, which now always returns `true`", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/getDeviceAttributes", + "date": "2025-12-22T23:56:58.000Z", + "changeType": "modified", + "commitHash": "37a09e99365e6020a181fc95fee8fd624c15e4c6" + }, + { + "key": "content/docs/ios/sdk-reference/refreshConfiguration.mdx:37a09e99365e6020a181fc95fee8fd624c15e4c6", + "path": "ios/sdk-reference/refreshConfiguration.mdx", + "title": "refreshConfiguration", + "description": "Explains how to manually refresh Superwall configuration during development workflows.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/refreshConfiguration", + "date": "2025-12-22T23:56:58.000Z", + "changeType": "added", + "commitHash": "37a09e99365e6020a181fc95fee8fd624c15e4c6" + }, + { + "key": "content/docs/support/faq/can-i-pre-authenticate-users-on-subscription-management-page.mdx:8037ca30bd203ba62a8a4ff9f2db804585a36c9d", + "path": "support/faq/can-i-pre-authenticate-users-on-subscription-management-page.mdx", + "title": "Can I pre-authenticate users on the subscription management page?", + "description": "Added FAQ explaining how to pre-fill email for subscription management page.", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/can-i-pre-authenticate-users-on-subscription-management-page", + "date": "2025-12-22T07:14:01.000Z", + "changeType": "added", + "commitHash": "8037ca30bd203ba62a8a4ff9f2db804585a36c9d" + }, + { + "key": "content/docs/support/faq/how-do-i-migrate-my-existing-purchases-to-revenuecat.mdx:8037ca30bd203ba62a8a4ff9f2db804585a36c9d", + "path": "support/faq/how-do-i-migrate-my-existing-purchases-to-revenuecat.mdx", + "title": "How do I migrate my existing purchases to RevenueCat?", + "description": "Added guide for migrating existing purchases to RevenueCat with Superwall support.", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/how-do-i-migrate-my-existing-purchases-to-revenuecat", + "date": "2025-12-22T07:14:01.000Z", + "changeType": "added", + "commitHash": "8037ca30bd203ba62a8a4ff9f2db804585a36c9d" + }, + { + "key": "content/docs/support/faq/why-is-my-android-app-missing-historical-revenue-data.mdx:8037ca30bd203ba62a8a4ff9f2db804585a36c9d", + "path": "support/faq/why-is-my-android-app-missing-historical-revenue-data.mdx", + "title": "Why is my Android app missing historical revenue data after setting up the Google Play integration?", + "description": "Explains why Android apps lack historical revenue data when integrating Google Play", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/why-is-my-android-app-missing-historical-revenue-data", + "date": "2025-12-22T07:14:01.000Z", + "changeType": "added", + "commitHash": "8037ca30bd203ba62a8a4ff9f2db804585a36c9d" + }, + { + "key": "content/docs/support/faq/why-is-my-transaction-failure-rate-high.mdx:8037ca30bd203ba62a8a4ff9f2db804585a36c9d", + "path": "support/faq/why-is-my-transaction-failure-rate-high.mdx", + "title": "Why is my transaction failure rate high?", + "description": "Explains common causes and strategies for reducing transaction failure rates in mobile apps.", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/why-is-my-transaction-failure-rate-high", + "date": "2025-12-22T07:14:01.000Z", + "changeType": "added", + "commitHash": "8037ca30bd203ba62a8a4ff9f2db804585a36c9d" + }, + { + "key": "content/docs/support/troubleshooting/troubleshooting-pending-trials-not-converting.mdx:8037ca30bd203ba62a8a4ff9f2db804585a36c9d", + "path": "support/troubleshooting/troubleshooting-pending-trials-not-converting.mdx", + "title": "Why are my trials still showing as pending after they should have converted?", + "description": "Explains why trials can remain pending and how Apple's billing retry process works", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/troubleshooting-pending-trials-not-converting", + "date": "2025-12-22T07:14:01.000Z", + "changeType": "added", + "commitHash": "8037ca30bd203ba62a8a4ff9f2db804585a36c9d" + }, + { + "key": "content/docs/support/faq/how-to-migrate-from-another-provider-to-superwall.mdx:266dc32ca744ce6537c03063e9ee223bd8a0db90", + "path": "support/faq/how-to-migrate-from-another-provider-to-superwall.mdx", + "title": "How do I migrate to Superwall from another provider?", + "description": "Provides comprehensive guide for migrating subscriptions from other providers to Superwall", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/how-to-migrate-from-another-provider-to-superwall", + "date": "2025-12-22T07:13:40.000Z", + "changeType": "added", + "commitHash": "266dc32ca744ce6537c03063e9ee223bd8a0db90" + }, + { + "key": "content/docs/support/troubleshooting/subscription-status-active-but-no-dashboard-data.mdx:266dc32ca744ce6537c03063e9ee223bd8a0db90", + "path": "support/troubleshooting/subscription-status-active-but-no-dashboard-data.mdx", + "title": "Why does my user show active subscription but no data in the dashboard?", + "description": "Explains why an active subscription might not show data in the Superwall dashboard.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/subscription-status-active-but-no-dashboard-data", + "date": "2025-12-22T07:13:40.000Z", + "changeType": "added", + "commitHash": "266dc32ca744ce6537c03063e9ee223bd8a0db90" + }, + { + "key": "content/docs/support/troubleshooting/why-is-my-paywall-not-updating-after-publishing.mdx:266dc32ca744ce6537c03063e9ee223bd8a0db90", + "path": "support/troubleshooting/why-is-my-paywall-not-updating-after-publishing.mdx", + "title": "Why is my paywall not updating after publishing?", + "description": "Added troubleshooting guide for resolving paywall update and visibility issues in Superwall.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/why-is-my-paywall-not-updating-after-publishing", + "date": "2025-12-22T07:13:40.000Z", + "changeType": "added", + "commitHash": "266dc32ca744ce6537c03063e9ee223bd8a0db90" + }, + { + "key": "content/docs/flutter/quickstart/tracking-subscription-state.mdx:169a9f4c93439c829321ab65c70dfeb9efe209be", + "path": "flutter/quickstart/tracking-subscription-state.mdx", + "title": "Tracking Subscription State", + "description": "Adds example of using `isActive` property to check subscription status more concisely.", + "category": "Flutter SDK", + "subcategory": "Quickstart", + "url": "/docs/flutter/quickstart/tracking-subscription-state", + "date": "2025-12-15T20:10:04.000Z", + "changeType": "modified", + "commitHash": "169a9f4c93439c829321ab65c70dfeb9efe209be" + }, + { + "key": "content/docs/flutter/sdk-reference/subscriptionStatus.mdx:169a9f4c93439c829321ab65c70dfeb9efe209be", + "path": "flutter/sdk-reference/subscriptionStatus.mdx", + "title": "subscriptionStatus", + "description": "Adds example for checking subscription status and using the `isActive` convenience property.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/subscriptionStatus", + "date": "2025-12-15T20:10:04.000Z", + "changeType": "modified", + "commitHash": "169a9f4c93439c829321ab65c70dfeb9efe209be" + }, + { + "key": "content/docs/integrations/webhooks/index.mdx:308978f6e42298a54910eea379f94aa9b6e813f2", + "path": "integrations/webhooks/index.mdx", + "title": "Webhooks", + "description": "Added details on including custom user attributes in webhook event payloads.", + "category": "Integrations", + "url": "/docs/integrations/webhooks", + "date": "2025-12-12T13:50:22.000Z", + "changeType": "modified", + "commitHash": "308978f6e42298a54910eea379f94aa9b6e813f2" + }, + { + "key": "content/docs/android/quickstart/install.mdx:6cfdb59fabd5aa8ab11fe4bfdd012f1f04fc77bb", + "path": "android/quickstart/install.mdx", + "title": "Install the SDK", + "description": "Updates Android SDK installation guide with correct Paywall Activity class name.", + "category": "Android SDK", + "subcategory": "Quickstart", + "url": "/docs/android/quickstart/install", + "date": "2025-12-11T19:11:52.000Z", + "changeType": "modified", + "commitHash": "6cfdb59fabd5aa8ab11fe4bfdd012f1f04fc77bb" + }, + { + "key": "content/docs/support/paywall-editor/6770999766-paywall-editor-menus-or-modals-closing.mdx:f1390dc4b90fa36947583769ecfa7ee1f112d62c", + "path": "support/paywall-editor/6770999766-paywall-editor-menus-or-modals-closing.mdx", + "title": "Paywall Editor: Menus or Modals Closing", + "description": "Troubleshooting guide for paywall editor menus or modals closing unexpectedly in web browsers.", + "category": "Support", + "url": "/docs/support/paywall-editor/6770999766-paywall-editor-menus-or-modals-closing", + "date": "2025-12-11T05:31:08.000Z", + "changeType": "added", + "commitHash": "f1390dc4b90fa36947583769ecfa7ee1f112d62c" + }, + { + "key": "content/docs/web-checkout/web-checkout-web-only.mdx:bfe2bf9bf4b39275f2e7d4c835731a4500f1ee61", + "path": "web-checkout/web-checkout-web-only.mdx", + "title": "Web-Only Checkout", + "description": "Clarifies Stripe integration steps and updates web checkout link generation details.", + "category": "Web Checkout", + "url": "/docs/web-checkout/web-checkout-web-only", + "date": "2025-12-10T14:20:49.000Z", + "changeType": "modified", + "commitHash": "bfe2bf9bf4b39275f2e7d4c835731a4500f1ee61" + }, + { + "key": "content/docs/support/dashboard/2125187334-how-do-i-change-my-login-email-address.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/2125187334-how-do-i-change-my-login-email-address.mdx", + "title": "How do I change my login email address?", + "description": "Added instructions for changing login email address by creating a new account", + "category": "Support", + "url": "/docs/support/dashboard/2125187334-how-do-i-change-my-login-email-address", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/2132346026-how-do-i-update-my-apple-small-business-program-status-in-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/2132346026-how-do-i-update-my-apple-small-business-program-status-in-superwall.mdx", + "title": "How do I update my Apple Small Business Program status in Superwall?", + "description": "Explains how to update Apple Small Business Program status in Superwall dashboard.", + "category": "Support", + "url": "/docs/support/dashboard/2132346026-how-do-i-update-my-apple-small-business-program-status-in-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/2172810792-why-don-t-trial-conversion-and-cancellation-rates-add-up-to-100.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/2172810792-why-don-t-trial-conversion-and-cancellation-rates-add-up-to-100.mdx", + "title": "Why don't trial conversion and cancellation rates add up to 100%?", + "description": "Explains why trial conversion and cancellation rates don't always sum to 100%.", + "category": "Support", + "url": "/docs/support/dashboard/2172810792-why-don-t-trial-conversion-and-cancellation-rates-add-up-to-100", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/2563776677-revenue-charts-tour.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/2563776677-revenue-charts-tour.mdx", + "title": "Video: Revenue Charts Tour", + "description": "Added video tutorial explaining how to use free revenue charts for tracking app proceeds.", + "category": "Support", + "url": "/docs/support/dashboard/2563776677-revenue-charts-tour", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/3633020467-breaking-down-revenue-charts-by-user-attributes.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/3633020467-breaking-down-revenue-charts-by-user-attributes.mdx", + "title": "Video: Breaking Down Revenue Charts by User Attributes", + "description": "Learn how to break down revenue data by user attributes in Superwall with this video tutorial.", + "category": "Support", + "url": "/docs/support/dashboard/3633020467-breaking-down-revenue-charts-by-user-attributes", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/4129730749-how-is-the-estimated-arpu-metric-calculated-in-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/4129730749-how-is-the-estimated-arpu-metric-calculated-in-superwall.mdx", + "title": "How is the Estimated ARPU metric calculated in Superwall?", + "description": "Explains how Superwall calculates Estimated ARPU metric using trial proceeds and user count.", + "category": "Support", + "url": "/docs/support/dashboard/4129730749-how-is-the-estimated-arpu-metric-calculated-in-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/5346543318-how-do-i-find-my-superwall-server-secret.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/5346543318-how-do-i-find-my-superwall-server-secret.mdx", + "title": "How do I find my Superwall Server Secret?", + "description": "Provides step-by-step instructions for finding Superwall Server Secret for RevenueCat integration.", + "category": "Support", + "url": "/docs/support/dashboard/5346543318-how-do-i-find-my-superwall-server-secret", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/5483562984-how-to-optimize-refund-protection-settings.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/5483562984-how-to-optimize-refund-protection-settings.mdx", + "title": "How to Optimize Refund Protection Settings", + "description": "Learn how to optimize refund protection settings to prevent unauthorized app refunds.", + "category": "Support", + "url": "/docs/support/dashboard/5483562984-how-to-optimize-refund-protection-settings", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/8137029255-configuring-products-to-use-in-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/8137029255-configuring-products-to-use-in-superwall.mdx", + "title": "Video: Configuring Products to use in Superwall", + "description": "Provides video walkthrough for configuring products in Superwall using App Store Connect or Revenue Cat.", + "category": "Support", + "url": "/docs/support/dashboard/8137029255-configuring-products-to-use-in-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/8360602963-how-to-show-different-paywalls-to-certain-users-with-audiences.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/8360602963-how-to-show-different-paywalls-to-certain-users-with-audiences.mdx", + "title": "Video: How to Show Different Paywalls to Certain Users with Audiences", + "description": "Learn how to show different paywalls to users based on audiences in Superwall.", + "category": "Support", + "url": "/docs/support/dashboard/8360602963-how-to-show-different-paywalls-to-certain-users-with-audiences", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/8851145816-get-started-with-apple-search-ads.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/8851145816-get-started-with-apple-search-ads.mdx", + "title": "Video: Get Started with Apple Search Ads", + "description": "Added video tutorial and guide for integrating Apple Search Ads with Superwall analytics.", + "category": "Support", + "url": "/docs/support/dashboard/8851145816-get-started-with-apple-search-ads", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/9023151337-how-do-i-add-my-vat-number-to-invoices.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/9023151337-how-do-i-add-my-vat-number-to-invoices.mdx", + "title": "How do I add my VAT number to invoices?", + "description": "Added instructions for adding VAT number to invoices in Billing Settings.", + "category": "Support", + "url": "/docs/support/dashboard/9023151337-how-do-i-add-my-vat-number-to-invoices", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/9149611399-can-i-recover-an-archived-product-in-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/9149611399-can-i-recover-an-archived-product-in-superwall.mdx", + "title": "How can I recover an archived product in Superwall?", + "description": "Learn how to recreate an archived product in Superwall when direct unarchiving is unavailable.", + "category": "Support", + "url": "/docs/support/dashboard/9149611399-can-i-recover-an-archived-product-in-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/9274386153-what-is-the-difference-between-trial-cancel-and-trial-expire-tags.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/9274386153-what-is-the-difference-between-trial-cancel-and-trial-expire-tags.mdx", + "title": "What is the difference between \"Trial Cancel\" and \"Trial Expire\" tags?", + "description": "Clarifies the difference between \"Trial Cancel\" and \"Trial Expire\" tags in user subscriptions.", + "category": "Support", + "url": "/docs/support/dashboard/9274386153-what-is-the-difference-between-trial-cancel-and-trial-expire-tags", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/9588935743-a-superwall-product-tour.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/9588935743-a-superwall-product-tour.mdx", + "title": "A Superwall product tour", + "description": "Introduces a video product tour covering Superwall features for new users and developers.", + "category": "Support", + "url": "/docs/support/dashboard/9588935743-a-superwall-product-tour", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/9621028514-why-is-initial-conversion-lower-than-new-trials-on-some-days.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/9621028514-why-is-initial-conversion-lower-than-new-trials-on-some-days.mdx", + "title": "Why is initial conversion lower than new trials on some days?", + "description": "Explains the difference between initial conversion and new trials metrics in Superwall analytics.", + "category": "Support", + "url": "/docs/support/dashboard/9621028514-why-is-initial-conversion-lower-than-new-trials-on-some-days", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/dashboard/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/dashboard/index.mdx", + "title": "Dashboard", + "description": "Provides overview of Superwall Dashboard for managing paywalls, campaigns, and users.", + "category": "Support", + "url": "/docs/support/dashboard", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/faq/1379595978-how-to-transfer-app-to-a-new-owner.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/faq/1379595978-how-to-transfer-app-to-a-new-owner.mdx", + "title": "How to Transfer Your App to a New Owner", + "description": "Added guide explaining how to transfer an app to a new owner through Superwall support.", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/1379595978-how-to-transfer-app-to-a-new-owner", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/faq/2801653905-how-does-superwalls-pricing-work.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/faq/2801653905-how-does-superwalls-pricing-work.mdx", + "title": "How does Superwall's pricing work?", + "description": "Introduces Superwall's new pricing model based on Monthly Attributed Revenue (MAR)", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq/2801653905-how-does-superwalls-pricing-work", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/faq/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/faq/index.mdx", + "title": "FAQ", + "description": "Added FAQ section with common questions and answers about Superwall.", + "category": "Support", + "subcategory": "FAQ", + "url": "/docs/support/faq", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/index.mdx", + "title": "Support Center", + "description": "Introduces new Support Center with common issues, troubleshooting links, and help options", + "category": "Support", + "url": "/docs/support", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/1377495156-how-to-create-a-countdown-timer-on-a-paywall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/1377495156-how-to-create-a-countdown-timer-on-a-paywall.mdx", + "title": "Video: How to create a countdown timer on a paywall", + "description": "Explains how to create countdown timers for paywalls using Superwall's editor through video tutorial.", + "category": "Support", + "url": "/docs/support/paywall-editor/1377495156-how-to-create-a-countdown-timer-on-a-paywall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/1502195570-adding-products-to-paywalls.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/1502195570-adding-products-to-paywalls.mdx", + "title": "Video: Adding Products to Paywalls", + "description": "Provides video tutorial and guidance on adding products to paywalls with customization tips.", + "category": "Support", + "url": "/docs/support/paywall-editor/1502195570-adding-products-to-paywalls", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/1523245773-are-videos-automatically-compressed-when-uploaded-to-a-paywall-via-the-editor.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/1523245773-are-videos-automatically-compressed-when-uploaded-to-a-paywall-via-the-editor.mdx", + "title": "Are video and images automatically compressed when uploaded to a paywall via the editor?", + "description": "Added details about automatic video and image compression when uploading to a paywall.", + "category": "Support", + "url": "/docs/support/paywall-editor/1523245773-are-videos-automatically-compressed-when-uploaded-to-a-paywall-via-the-editor", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/1932646675-building-your-first-paywall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/1932646675-building-your-first-paywall.mdx", + "title": "Video: Building your first paywall", + "description": "Adds video tutorial for building first paywall with step-by-step walkthrough from start to testing.", + "category": "Support", + "url": "/docs/support/paywall-editor/1932646675-building-your-first-paywall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/2079174387-using-custom-actions-to-setup-referral-systems.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/2079174387-using-custom-actions-to-setup-referral-systems.mdx", + "title": "Video: Using Custom Actions to Setup Referral Systems", + "description": "Added video tutorial for setting up referral systems with custom actions in Superwall SDK.", + "category": "Support", + "url": "/docs/support/paywall-editor/2079174387-using-custom-actions-to-setup-referral-systems", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/2306253672-can-i-use-a-feature-shown-in-the-attached-screenshot.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/2306253672-can-i-use-a-feature-shown-in-the-attached-screenshot.mdx", + "title": "When adding a product, is it possible to fetch the price for non subscription products?", + "description": "Added guidance on pricing limitations for non-subscription products in paywall editor.", + "category": "Support", + "url": "/docs/support/paywall-editor/2306253672-can-i-use-a-feature-shown-in-the-attached-screenshot", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/2427577661-how-to-use-custom-actions-in-your-paywall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/2427577661-how-to-use-custom-actions-in-your-paywall.mdx", + "title": "Video: How to use custom actions in your paywall", + "description": "Learn how to set up and use custom actions in your paywall with a helpful video tutorial.", + "category": "Support", + "url": "/docs/support/paywall-editor/2427577661-how-to-use-custom-actions-in-your-paywall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/2455479259-showing-paywalls-with-a-discount-for-abandoned-transactions.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/2455479259-showing-paywalls-with-a-discount-for-abandoned-transactions.mdx", + "title": "Video: Showing paywalls with a discount for abandoned transactions", + "description": "Learn how to show discounted paywalls for abandoned transactions and boost revenue.", + "category": "Support", + "url": "/docs/support/paywall-editor/2455479259-showing-paywalls-with-a-discount-for-abandoned-transactions", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/3696237744-using-custom-placements-for-tracking-paywall-interactions.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/3696237744-using-custom-placements-for-tracking-paywall-interactions.mdx", + "title": "Video: Using Custom Placements for Tracking Paywall Interactions", + "description": "Learn how to track specific paywall interactions using custom placements with this video tutorial.", + "category": "Support", + "url": "/docs/support/paywall-editor/3696237744-using-custom-placements-for-tracking-paywall-interactions", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/4109039578-display-dynamic-images-in-your-paywalls.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/4109039578-display-dynamic-images-in-your-paywalls.mdx", + "title": "Display dynamic images in your paywalls", + "description": "Learn how to display dynamic images in paywalls using contextual variables.", + "category": "Support", + "url": "/docs/support/paywall-editor/4109039578-display-dynamic-images-in-your-paywalls", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/4876966592-feature-gating.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/4876966592-feature-gating.mdx", + "title": "Video: Feature Gating", + "description": "Explains feature gating in Superwall, demonstrating how to control paywall and pro content access.", + "category": "Support", + "url": "/docs/support/paywall-editor/4876966592-feature-gating", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/5453267914-how-to-make-paywalls-adapt-to-device-light-or-dark-mode-and-more.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/5453267914-how-to-make-paywalls-adapt-to-device-light-or-dark-mode-and-more.mdx", + "title": "Video: How to make paywalls adapt to device, light or dark mode, and more.", + "description": "Learn how to customize paywalls based on device, mode, and screen width in Superwall.", + "category": "Support", + "url": "/docs/support/paywall-editor/5453267914-how-to-make-paywalls-adapt-to-device-light-or-dark-mode-and-more", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/6032457649-building-a-multi-tier-paywall-using-the-superwall-editor.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/6032457649-building-a-multi-tier-paywall-using-the-superwall-editor.mdx", + "title": "Video: Building a Multi-Tier Paywall using the Superwall Editor", + "description": "Learn how to create multi-tier paywalls with different service levels using the Superwall Editor.", + "category": "Support", + "url": "/docs/support/paywall-editor/6032457649-building-a-multi-tier-paywall-using-the-superwall-editor", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/6426797732-how-do-i-animate-text-elements-in-the-superwall-editor.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/6426797732-how-do-i-animate-text-elements-in-the-superwall-editor.mdx", + "title": "How do I animate elements in the Superwall editor?", + "description": "Learn how to animate text and elements using Lottie and Effects in Superwall editor.", + "category": "Support", + "url": "/docs/support/paywall-editor/6426797732-how-do-i-animate-text-elements-in-the-superwall-editor", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/6485999553-how-to-use-dynamic-values.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/6485999553-how-to-use-dynamic-values.mdx", + "title": "Video: How to use Dynamic Values", + "description": "Learn how to use dynamic values to customize paywalls based on user conditions and device.", + "category": "Support", + "url": "/docs/support/paywall-editor/6485999553-how-to-use-dynamic-values", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/6666110181-tracking-user-behavior-on-paywalls.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/6666110181-tracking-user-behavior-on-paywalls.mdx", + "title": "Video: Tracking User Behavior on Paywalls", + "description": "Provides video tutorial on tracking user interactions and behavior on paywalls", + "category": "Support", + "url": "/docs/support/paywall-editor/6666110181-tracking-user-behavior-on-paywalls", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/7124788686-how-do-i-copy-a-paywall-from-one-account-to-another.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/7124788686-how-do-i-copy-a-paywall-from-one-account-to-another.mdx", + "title": "How do I copy a paywall from one account to another?", + "description": "Provides detailed steps for copying paywalls between Superwall accounts using sharing feature.", + "category": "Support", + "url": "/docs/support/paywall-editor/7124788686-how-do-i-copy-a-paywall-from-one-account-to-another", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/7448860745-can-i-delete-or-update-existing-snippets.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/7448860745-can-i-delete-or-update-existing-snippets.mdx", + "title": "Can I delete or update existing snippets?", + "description": "Added guide for updating existing snippets instead of creating new ones", + "category": "Support", + "url": "/docs/support/paywall-editor/7448860745-can-i-delete-or-update-existing-snippets", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/8950966564-ai-image-generation-in-paywalls.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/8950966564-ai-image-generation-in-paywalls.mdx", + "title": "Video: AI Image Generation in Paywalls", + "description": "Learn how to generate AI images for paywalls, banners, and icons with Superwall's new feature.", + "category": "Support", + "url": "/docs/support/paywall-editor/8950966564-ai-image-generation-in-paywalls", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/paywall-editor/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/paywall-editor/index.mdx", + "title": "Paywall Editor", + "description": "Learn how to use the Superwall Paywall Editor to create and manage paywalls.", + "category": "Support", + "url": "/docs/support/paywall-editor", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/3107042948-how-to-setup-sandbox-testing-without-affecting-production-metrics.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/3107042948-how-to-setup-sandbox-testing-without-affecting-production-metrics.mdx", + "title": "How to setup sandbox testing without affecting production metrics", + "description": "Explains how to set up sandbox testing without affecting production metrics in Superwall SDK.", + "category": "Support", + "url": "/docs/support/sdk/3107042948-how-to-setup-sandbox-testing-without-affecting-production-metrics", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/3165338058-how-to-present-a-paywall-from-the-first-touch-in-app.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/3165338058-how-to-present-a-paywall-from-the-first-touch-in-app.mdx", + "title": "Video: How to present a paywall from the first touch in app", + "description": "Demonstrates presenting a paywall on first user touch instead of app launch.", + "category": "Support", + "url": "/docs/support/sdk/3165338058-how-to-present-a-paywall-from-the-first-touch-in-app", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/3422417486-how-to-install-and-configure-the-superwall-sdk-in-flutter-in-under-2-minutes.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/3422417486-how-to-install-and-configure-the-superwall-sdk-in-flutter-in-under-2-minutes.mdx", + "title": "Video: How to Install and Configure the Superwall SDK in Flutter (In Under 2 Minutes!)", + "description": "Adds quick video tutorial for installing and configuring Superwall SDK in Flutter projects.", + "category": "Support", + "url": "/docs/support/sdk/3422417486-how-to-install-and-configure-the-superwall-sdk-in-flutter-in-under-2-minutes", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/3677919065-how-to-setup-web-restoration-alert-options.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/3677919065-how-to-setup-web-restoration-alert-options.mdx", + "title": "How to Setup Web Restoration Alert Options", + "description": "Explains how to control web restoration alert behavior in Superwall SDK configuration.", + "category": "Support", + "url": "/docs/support/sdk/3677919065-how-to-setup-web-restoration-alert-options", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/4341680566-presenting-a-paywall-in-an-ios-app-using-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/4341680566-presenting-a-paywall-in-an-ios-app-using-superwall.mdx", + "title": "Video: Presenting a Paywall in an iOS App Using Superwall", + "description": "Demonstrates how to present paywalls in iOS apps using Superwall's event-driven SDK approach.", + "category": "Support", + "url": "/docs/support/sdk/4341680566-presenting-a-paywall-in-an-ios-app-using-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/4506454639-using-xcode-s-transaction-manager.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/4506454639-using-xcode-s-transaction-manager.mdx", + "title": "Video: Using Xcode's Transaction Manager", + "description": "Added video tutorial on using Xcode's Transaction Manager for testing subscription states.", + "category": "Support", + "url": "/docs/support/sdk/4506454639-using-xcode-s-transaction-manager", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/5896158743-how-do-i-disable-streamlined-purchasing-for-ios-apps.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/5896158743-how-do-i-disable-streamlined-purchasing-for-ios-apps.mdx", + "title": "How do I disable Streamlined Purchasing for iOS apps?", + "description": "Explains how to disable Streamlined Purchasing feature for iOS apps using StoreKit APIs.", + "category": "Support", + "url": "/docs/support/sdk/5896158743-how-do-i-disable-streamlined-purchasing-for-ios-apps", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/6889849185-how-to-install-superwall-s-sdk-into-your-ios-app.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/6889849185-how-to-install-superwall-s-sdk-into-your-ios-app.mdx", + "title": "Video: How to Install Superwall's SDK into your iOS App", + "description": "Added video tutorial for installing Superwall's SDK into iOS apps using Swift Package Manager and Cocoapods.", + "category": "Support", + "url": "/docs/support/sdk/6889849185-how-to-install-superwall-s-sdk-into-your-ios-app", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/8208368408-making-a-purchase-with-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/8208368408-making-a-purchase-with-superwall.mdx", + "title": "Video: Making a Purchase with Superwall", + "description": "Added video tutorial demonstrating how to make first purchase using Superwall in iOS app.", + "category": "Support", + "url": "/docs/support/sdk/8208368408-making-a-purchase-with-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/sdk/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/sdk/index.mdx", + "title": "SDK", + "description": "Added SDK integration overview with comprehensive guide for developers.", + "category": "Support", + "url": "/docs/support/sdk", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/1205343891-why-isn-t-my-free-trial-showing-up-in-my-paywall-preview.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/1205343891-why-isn-t-my-free-trial-showing-up-in-my-paywall-preview.mdx", + "title": "Why isn't my free trial showing up in my paywall?", + "description": "Explains troubleshooting steps for free trial and introductory offer visibility in paywalls.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/1205343891-why-isn-t-my-free-trial-showing-up-in-my-paywall-preview", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/3578026824-troubleshooting-android-sdk.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/3578026824-troubleshooting-android-sdk.mdx", + "title": "Troubleshooting: Android SDK", + "description": "Added troubleshooting guide for common Android SDK integration and support issues.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/3578026824-troubleshooting-android-sdk", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/3920414585-why-aren-t-my-revenuecat-transactions-attributing-to-a-placement-paywall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/3920414585-why-aren-t-my-revenuecat-transactions-attributing-to-a-placement-paywall.mdx", + "title": "Why aren't my transactions attributing to a placement/paywall?", + "description": "Provides troubleshooting steps for RevenueCat transaction attribution issues in Superwall paywalls", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/3920414585-why-aren-t-my-revenuecat-transactions-attributing-to-a-placement-paywall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/4741512872-why-am-i-seeing-a-billing-issue-after-my-free-trial-ends.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/4741512872-why-am-i-seeing-a-billing-issue-after-my-free-trial-ends.mdx", + "title": "Why am I seeing a billing issue after my free trial ends?", + "description": "Explains how to handle billing issues when a free trial ends on App Store platforms.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/4741512872-why-am-i-seeing-a-billing-issue-after-my-free-trial-ends", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/5131096404-why-is-my-webhook-s-originalappuserid-different-from-the-user-id-i-set.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/5131096404-why-is-my-webhook-s-originalappuserid-different-from-the-user-id-i-set.mdx", + "title": "Why is my webhook's originalAppUserId different from the user ID I set?", + "description": "Explains how to correctly set user IDs in webhooks for accurate transaction tracking and attribution.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/5131096404-why-is-my-webhook-s-originalappuserid-different-from-the-user-id-i-set", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/5316844925-why-am-i-not-receiving-webhook-events-when-using-revenuecat.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/5316844925-why-am-i-not-receiving-webhook-events-when-using-revenuecat.mdx", + "title": "Why am I not receiving webhook events?", + "description": "Explains troubleshooting steps for missing webhook events when using RevenueCat with Superwall.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/5316844925-why-am-i-not-receiving-webhook-events-when-using-revenuecat", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/5990752866-why-are-my-webhook-events-not-triggering.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/5990752866-why-are-my-webhook-events-not-triggering.mdx", + "title": "Why are my webhook events not triggering?", + "description": "Troubleshoots webhook event configuration and testing for App Store integrations", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/5990752866-why-are-my-webhook-events-not-triggering", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/6022066375-troubleshooting.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/6022066375-troubleshooting.mdx", + "title": "Troubleshooting", + "description": "Provides troubleshooting guidance for paywall presentation, subscription status, and iOS testing.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/6022066375-troubleshooting", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/6204964383-why-am-i-seeing-sign-in-to-apple-account-when-testing-in-app-purchases.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/6204964383-why-am-i-seeing-sign-in-to-apple-account-when-testing-in-app-purchases.mdx", + "title": "Why am I seeing \"Sign in to Apple Account\" when testing in-app purchases?", + "description": "Explains how to resolve \"Sign in to Apple Account\" alerts when testing in-app purchases.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/6204964383-why-am-i-seeing-sign-in-to-apple-account-when-testing-in-app-purchases", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/6381986971-paywall-not-showing.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/6381986971-paywall-not-showing.mdx", + "title": "Paywall Not Showing", + "description": "Provides comprehensive troubleshooting guide for resolving paywall presentation and configuration issues.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/6381986971-paywall-not-showing", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/6999598520-troubleshooting-flutter-sdk.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/6999598520-troubleshooting-flutter-sdk.mdx", + "title": "Troubleshooting: Flutter SDK", + "description": "Added troubleshooting guide for common Flutter SDK integration issues and support resources.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/6999598520-troubleshooting-flutter-sdk", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/7581794451-why-am-i-seeing-520-errors-from-the-events-api-endpoint.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/7581794451-why-am-i-seeing-520-errors-from-the-events-api-endpoint.mdx", + "title": "Why am I seeing 520 errors from the events API endpoint?", + "description": "Explains 520 errors in Superwall's events API, why they occur, and how to handle them.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/7581794451-why-am-i-seeing-520-errors-from-the-events-api-endpoint", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/8550351416-why-am-i-getting-placementnotfound-errors-for-active-placements-in-expo.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/8550351416-why-am-i-getting-placementnotfound-errors-for-active-placements-in-expo.mdx", + "title": "Why am I getting PlacementNotFound errors for active placements in Expo?", + "description": "Explains how to resolve PlacementNotFound errors when using placements in Expo.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/8550351416-why-am-i-getting-placementnotfound-errors-for-active-placements-in-expo", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/8569105587-why-does-my-subscription-status-remain-inactive-after-successful-purchase.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/8569105587-why-does-my-subscription-status-remain-inactive-after-successful-purchase.mdx", + "title": "Why does my subscription status remain INACTIVE after successful purchase?", + "description": "Added troubleshooting guide for resolving inactive subscription status after purchase.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/8569105587-why-does-my-subscription-status-remain-inactive-after-successful-purchase", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/8881818609-troubleshooting-ios-sdk.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/8881818609-troubleshooting-ios-sdk.mdx", + "title": "Troubleshooting: iOS SDK", + "description": "Added troubleshooting guide for common iOS SDK integration and usage issues.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/8881818609-troubleshooting-ios-sdk", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/9207773532-why-does-my-entitlement-show-missing-app-id-after-connecting-app-store-connect-api.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/9207773532-why-does-my-entitlement-show-missing-app-id-after-connecting-app-store-connect-api.mdx", + "title": "Why does my entitlement show \"Missing App ID\" after connecting App Store Connect API?", + "description": "Explains how to resolve \"Missing App ID\" warning when integrating App Store Connect API with Superwall.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/9207773532-why-does-my-entitlement-show-missing-app-id-after-connecting-app-store-connect-api", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/9558513118-why-are-my-products-showing-unknown-status-in-superwall.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/9558513118-why-are-my-products-showing-unknown-status-in-superwall.mdx", + "title": "Why are my products showing \"Unknown\" status in Superwall?", + "description": "Explains how to resolve \"Unknown\" product status issues in Superwall dashboard.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/9558513118-why-are-my-products-showing-unknown-status-in-superwall", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/9619927130-why-is-my-paywall-not-loading-on-android-with-billing-service-unavailable-error.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/9619927130-why-is-my-paywall-not-loading-on-android-with-billing-service-unavailable-error.mdx", + "title": "Why is my paywall not loading on Android with Billing Service Unavailable?", + "description": "Added troubleshooting guide for Android paywall loading issues with billing service errors.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/9619927130-why-is-my-paywall-not-loading-on-android-with-billing-service-unavailable-error", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/index.mdx", + "title": "Troubleshooting", + "description": "Added troubleshooting support page with automatic listing of support resources.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/1253018505-products-not-loading-ios.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/1253018505-products-not-loading-ios.mdx", + "title": "Products Not Loading: iOS", + "description": "Provides comprehensive troubleshooting steps for resolving iOS product loading issues in-app.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading/1253018505-products-not-loading-ios", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/3716347779-products-not-loading-android.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/3716347779-products-not-loading-android.mdx", + "title": "Products Not Loading: Android", + "description": "Added troubleshooting steps for resolving product loading issues on Android.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading/3716347779-products-not-loading-android", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/4739776203-products-not-loading-ios-simulator.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/4739776203-products-not-loading-ios-simulator.mdx", + "title": "Products Not Loading: iOS Simulator", + "description": "Provides troubleshooting steps for loading products in iOS Simulator using StoreKit config files", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading/4739776203-products-not-loading-ios-simulator", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/4845457144-products-not-loading-ios-device-with-storekit-config-file.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/4845457144-products-not-loading-ios-device-with-storekit-config-file.mdx", + "title": "Products Not Loading: iOS Device with StoreKit config file", + "description": "Provides troubleshooting steps for loading products with StoreKit configuration files on iOS.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading/4845457144-products-not-loading-ios-device-with-storekit-config-file", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/9984011656-products-not-loading-safari-preview.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/9984011656-products-not-loading-safari-preview.mdx", + "title": "Products Not Loading: Browser Preview", + "description": "Added troubleshooting guidance for products not loading in browser previews.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading/9984011656-products-not-loading-safari-preview", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/troubleshooting/products-not-loading/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/troubleshooting/products-not-loading/index.mdx", + "title": "Products Not Loading: Troubleshooting Guide", + "description": "Added troubleshooting guide for resolving products not loading across platforms.", + "category": "Support", + "subcategory": "Troubleshooting", + "url": "/docs/support/troubleshooting/products-not-loading", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/web-checkout/1872595046-web-checkout-tour-on-ios.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/web-checkout/1872595046-web-checkout-tour-on-ios.mdx", + "title": "Video: Web Checkout Tour on iOS", + "description": "Introduces video tutorial demonstrating web checkout flow for iOS using Superwall and Stripe.", + "category": "Support", + "url": "/docs/support/web-checkout/1872595046-web-checkout-tour-on-ios", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/web-checkout/3771535881-why-am-i-seeing-an-error-occurred-while-loading-the-stripe-portal-in-the-manage-subscription-page.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/web-checkout/3771535881-why-am-i-seeing-an-error-occurred-while-loading-the-stripe-portal-in-the-manage-subscription-page.mdx", + "title": "Why am I seeing \"An error occurred while loading the Stripe Portal\" in the manage subscription page?", + "description": "Added troubleshooting guide for resolving Stripe Portal loading errors in web2app environment.", + "category": "Support", + "url": "/docs/support/web-checkout/3771535881-why-am-i-seeing-an-error-occurred-while-loading-the-stripe-portal-in-the-manage-subscription-page", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/support/web-checkout/index.mdx:0f1f809a11f5627eaf38b688be406426b6482722", + "path": "support/web-checkout/index.mdx", + "title": "Web Checkout", + "description": "Added guide for integrating Superwall Web Checkout into applications.", + "category": "Support", + "url": "/docs/support/web-checkout", + "date": "2025-12-10T04:07:13.000Z", + "changeType": "added", + "commitHash": "0f1f809a11f5627eaf38b688be406426b6482722" + }, + { + "key": "content/docs/integrations/firebase.mdx:a22566923c5984918e66c60120826cd16aaae4e8", + "path": "integrations/firebase.mdx", + "title": "Firebase", + "description": "Adds comprehensive guide for integrating Superwall events with Firebase Analytics across platforms.", + "category": "Integrations", + "url": "/docs/integrations/firebase", + "date": "2025-12-09T16:50:29.000Z", + "changeType": "added", + "commitHash": "a22566923c5984918e66c60120826cd16aaae4e8" + }, + { + "key": "content/docs/flutter/sdk-reference/getCustomerInfo.mdx:cdcef4df7d0435bb7a8d6d28841728b80b8e7223", + "path": "flutter/sdk-reference/getCustomerInfo.mdx", + "title": "getCustomerInfo()", + "description": "Adds reference for retrieving customer info, subscriptions, and entitlements in Flutter SDK.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/getCustomerInfo", + "date": "2025-12-09T01:39:26.000Z", + "changeType": "added", + "commitHash": "cdcef4df7d0435bb7a8d6d28841728b80b8e7223" + }, + { + "key": "content/docs/flutter/sdk-reference/getEntitlements.mdx:cdcef4df7d0435bb7a8d6d28841728b80b8e7223", + "path": "flutter/sdk-reference/getEntitlements.mdx", + "title": "getEntitlements()", + "description": "Introduces `getEntitlements()` method for retrieving and filtering user's subscription entitlements.", + "category": "Flutter SDK", + "subcategory": "SDK Reference", + "url": "/docs/flutter/sdk-reference/getEntitlements", + "date": "2025-12-09T01:39:26.000Z", + "changeType": "added", + "commitHash": "cdcef4df7d0435bb7a8d6d28841728b80b8e7223" + }, + { + "key": "content/docs/android/guides/migrations/migrating-to-v2.mdx:57a0dcba8837ea44c928ec81dd858d76b8bc7b93", + "path": "android/guides/migrations/migrating-to-v2.mdx", + "title": "Migrating from v1 to v2 - Android", + "description": "Updates Compose library artifact version to 2.6.5 in migration guide for Android SDK.", + "category": "Android SDK", + "subcategory": "Guides", + "url": "/docs/android/guides/migrations/migrating-to-v2", + "date": "2025-12-09T01:38:40.000Z", + "changeType": "modified", + "commitHash": "57a0dcba8837ea44c928ec81dd858d76b8bc7b93" + }, + { + "key": "content/docs/android/guides/web-checkout/post-checkout-redirecting.mdx:57a0dcba8837ea44c928ec81dd858d76b8bc7b93", + "path": "android/guides/web-checkout/post-checkout-redirecting.mdx", + "title": "Post-Checkout Redirecting", + "description": "Added code example for accessing product identifier after successful redemption.", + "category": "Android SDK", + "subcategory": "Guides", + "url": "/docs/android/guides/web-checkout/post-checkout-redirecting", + "date": "2025-12-09T01:38:40.000Z", + "changeType": "modified", + "commitHash": "57a0dcba8837ea44c928ec81dd858d76b8bc7b93" + }, + { + "key": "content/docs/android/index.mdx:57a0dcba8837ea44c928ec81dd858d76b8bc7b93", + "path": "android/index.mdx", + "title": "Welcome", + "description": "Updates Android SDK version reference to latest release 2.6.5.", + "category": "Android SDK", + "url": "/docs/android", + "date": "2025-12-09T01:38:40.000Z", + "changeType": "modified", + "commitHash": "57a0dcba8837ea44c928ec81dd858d76b8bc7b93" + }, + { + "key": "content/docs/android/sdk-reference/index.mdx:57a0dcba8837ea44c928ec81dd858d76b8bc7b93", + "path": "android/sdk-reference/index.mdx", + "title": "Overview", + "description": "Updated Android SDK version to 2.6.5 in latest version component.", + "category": "Android SDK", + "subcategory": "SDK Reference", + "url": "/docs/android/sdk-reference", + "date": "2025-12-09T01:38:40.000Z", + "changeType": "modified", + "commitHash": "57a0dcba8837ea44c928ec81dd858d76b8bc7b93" + }, + { + "key": "content/docs/ios/sdk-reference/integrationAttributes.mdx:11c1752ed86f96dd9ad7765c7f4d9b1d131c79b2", + "path": "ios/sdk-reference/integrationAttributes.mdx", + "title": "integrationAttributes", + "description": "Demonstrates accessing Firebase installation ID from integration attributes.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/integrationAttributes", + "date": "2025-12-09T01:35:37.000Z", + "changeType": "modified", + "commitHash": "11c1752ed86f96dd9ad7765c7f4d9b1d131c79b2" + }, + { + "key": "content/docs/ios/sdk-reference/confirmAllAssignments.mdx:f96578543e2b33bd28912dc0adf05d662c2518aa", + "path": "ios/sdk-reference/confirmAllAssignments.mdx", + "title": "confirmAllAssignments", + "description": "Adds reference for confirming experiment assignments on iOS with code examples.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/confirmAllAssignments", + "date": "2025-12-02T18:40:52.000Z", + "changeType": "added", + "commitHash": "f96578543e2b33bd28912dc0adf05d662c2518aa" + }, + { + "key": "content/docs/ios/sdk-reference/getCustomerInfo.mdx:f96578543e2b33bd28912dc0adf05d662c2518aa", + "path": "ios/sdk-reference/getCustomerInfo.mdx", + "title": "getCustomerInfo", + "description": "Adds async method for retrieving customer information with examples in Swift.", + "category": "iOS SDK", + "subcategory": "SDK Reference", + "url": "/docs/ios/sdk-reference/getCustomerInfo", + "date": "2025-12-02T18:40:52.000Z", + "changeType": "added", + "commitHash": "f96578543e2b33bd28912dc0adf05d662c2518aa" + }, + { + "key": "content/docs/dashboard/dashboard-campaigns/campaigns-audience.mdx:b74fc8774c1accd1247114be3e61c811f400dd46", + "path": "dashboard/dashboard-campaigns/campaigns-audience.mdx", + "title": "Audiences", + "description": "Expands entitlement matching options to include subscription status and auto-renew settings.", + "category": "Dashboard", + "subcategory": "Campaigns", + "url": "/docs/dashboard/dashboard-campaigns/campaigns-audience", + "date": "2025-12-02T18:36:07.000Z", + "changeType": "modified", + "commitHash": "b74fc8774c1accd1247114be3e61c811f400dd46" + }, + { + "key": "content/docs/dashboard/overview-users.mdx:299cacaeb337a379b97438aa69ff7ee436f5206d", + "path": "dashboard/overview-users.mdx", + "title": "Users", + "description": "Added guide for manually granting and revoking user entitlements in the dashboard.", + "category": "Dashboard", + "url": "/docs/dashboard/overview-users", + "date": "2025-12-02T17:32:15.000Z", + "changeType": "modified", + "commitHash": "299cacaeb337a379b97438aa69ff7ee436f5206d" + } + ] +} \ No newline at end of file diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index 1bfdb35..3ee4fcd 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -13,6 +13,7 @@ import { SdkLatestVersion } from './components/SdkLatestVersion' import { GithubInfo as GithubInfoComponent } from 'fumadocs-ui/components/github-info'; import { WhenLoggedIn, WhenLoggedOut, LoginStatusProvider, BasedOnAuth, LoggedIn, LoggedOut } from './components/LoginStatusContext'; import { TypeTable } from './components/type-table'; +import { ChangelogTimeline } from './components/ChangelogTimeline'; // We'll add custom components here @@ -284,5 +285,6 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { BasedOnAuth, LoggedIn, LoggedOut, + ChangelogTimeline, } as MDXComponents }