diff --git a/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj b/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj index 3cb8578..390e08e 100644 --- a/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj +++ b/apps/mobile/ios/Sauci.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -12,6 +12,7 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; 40F8635692F14680AD9C05F6 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5893339C70CC40EE9637AA25 /* noop-file.swift */; }; + 46CB71592F047A5A008AC4FC /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46CB71582F047A5A008AC4FC /* StoreKit.framework */; }; 74C2F9AED4A51CC5ED9B2167 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E7162336DFF63CDB54C8AFDF /* PrivacyInfo.xcprivacy */; }; 96905EF65AED1B983A6B3ABC /* libPods-Sauci.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Sauci.a */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; @@ -26,13 +27,14 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Sauci/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Sauci/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Sauci/main.m; sourceTree = ""; }; + 46CB71582F047A5A008AC4FC /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 5893339C70CC40EE9637AA25 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "Sauci/noop-file.swift"; sourceTree = ""; }; 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Sauci.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Sauci.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 6C2E3173556A471DD304B334 /* Pods-Sauci.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.debug.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.debug.xcconfig"; sourceTree = ""; }; 7A4D352CD337FB3A3BF06240 /* Pods-Sauci.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sauci.release.xcconfig"; path = "Target Support Files/Pods-Sauci/Pods-Sauci.release.xcconfig"; sourceTree = ""; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = Sauci/SplashScreen.storyboard; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - E7162336DFF63CDB54C8AFDF /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sauci/PrivacyInfo.xcprivacy; sourceTree = ""; }; + E7162336DFF63CDB54C8AFDF /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = Sauci/PrivacyInfo.xcprivacy; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Sauci/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -43,6 +45,7 @@ buildActionMask = 2147483647; files = ( 96905EF65AED1B983A6B3ABC /* libPods-Sauci.a in Frameworks */, + 46CB71592F047A5A008AC4FC /* StoreKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,6 +72,7 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 46CB71582F047A5A008AC4FC /* StoreKit.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Sauci.a */, ); @@ -371,15 +375,20 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Sauci/Sauci.entitlements; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = BXVPBATDZY; ENABLE_BITCODE = NO; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "FB_SONARKIT_ENABLED=1", ); INFOPLIST_FILE = Sauci/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Sauci; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -404,10 +413,15 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Sauci/Sauci.entitlements; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; + DEVELOPMENT_TEAM = BXVPBATDZY; INFOPLIST_FILE = Sauci/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Sauci; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -472,14 +486,14 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; @@ -528,13 +542,13 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; diff --git a/apps/web/public/screenshots/home.png b/apps/web/public/screenshots/home.png index a8c1339..0876dbd 100644 Binary files a/apps/web/public/screenshots/home.png and b/apps/web/public/screenshots/home.png differ diff --git a/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.55.png b/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.55.png deleted file mode 100644 index 2b544d6..0000000 Binary files a/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.55.png and /dev/null differ diff --git a/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.59.png b/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.59.png deleted file mode 100644 index a8c1339..0000000 Binary files a/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 17.15.59.png and /dev/null differ diff --git a/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 21.00.55.png b/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 21.00.55.png new file mode 100644 index 0000000..4043e4e Binary files /dev/null and b/etc/ios_sim/Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 21.00.55.png differ diff --git a/scripts/app-store-screenshots/generate.js b/scripts/app-store-screenshots/generate.js new file mode 100644 index 0000000..0c74c22 --- /dev/null +++ b/scripts/app-store-screenshots/generate.js @@ -0,0 +1,312 @@ +import sharp from "sharp"; +import { createCanvas, loadImage } from "@napi-rs/canvas"; +import fs from "fs/promises"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// App Store screenshot dimensions +const DIMENSIONS = { + "6.7": { width: 1290, height: 2796 }, // iPhone 15 Pro Max, 14 Pro Max + "6.5": { width: 1284, height: 2778 }, // iPhone 14 Plus, 13 Pro Max + "5.5": { width: 1242, height: 2208 }, // iPhone 8 Plus (still required) +}; + +// Screenshot configurations with marketing text +const SCREENSHOTS = [ + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 19.57.14.png", + headline: "Your Couple Dashboard", + subheadline: "Track matches, packs & explore together", + outputName: "01-home", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 20.10.53.png", + headline: "Curated Question Packs", + subheadline: "From first dates to spicy adventures", + outputName: "02-packs", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 19.57.35.png", + headline: "Swipe on Questions", + subheadline: "Answer yes, no, or maybe together", + outputName: "03-swipe", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 21.00.55.png", + headline: "Express Yourself", + subheadline: "Swipe right on what excites you", + outputName: "04-swipe-yes", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 19.57.51.png", + headline: "It's a Match!", + subheadline: "Celebrate when you both say yes", + outputName: "05-match", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 20.02.50.png", + headline: "Discover Your Matches", + subheadline: "See where you both agree", + outputName: "06-home-matches", + }, + { + source: "Simulator Screenshot - iPhone 16 Pro - 2025-12-30 at 20.01.31.png", + headline: "Chat About It", + subheadline: "Every match unlocks a conversation", + outputName: "07-chat", + }, +]; + +// Brand colors (matching app theme) +const COLORS = { + background: { + start: "#0f0f1a", // Dark purple-black + end: "#1a1a2e", // Slightly lighter + }, + accent: { + pink: "#ec4899", + purple: "#8b5cf6", + }, + text: { + primary: "#ffffff", + secondary: "rgba(255, 255, 255, 0.7)", + }, +}; + +async function createGradientBackground(width, height) { + // Create a gradient background using canvas + const canvas = createCanvas(width, height); + const ctx = canvas.getContext("2d"); + + // Create vertical gradient + const gradient = ctx.createLinearGradient(0, 0, 0, height); + gradient.addColorStop(0, COLORS.background.start); + gradient.addColorStop(0.5, COLORS.background.end); + gradient.addColorStop(1, COLORS.background.start); + + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, width, height); + + // Add subtle accent glow at top + const glowGradient = ctx.createRadialGradient( + width / 2, + 0, + 0, + width / 2, + 0, + width * 0.8 + ); + glowGradient.addColorStop(0, "rgba(236, 72, 153, 0.15)"); + glowGradient.addColorStop(0.5, "rgba(139, 92, 246, 0.08)"); + glowGradient.addColorStop(1, "transparent"); + + ctx.fillStyle = glowGradient; + ctx.fillRect(0, 0, width, height * 0.5); + + return canvas.toBuffer("image/png"); +} + +async function addTextOverlay( + backgroundBuffer, + width, + height, + headline, + subheadline +) { + const canvas = createCanvas(width, height); + const ctx = canvas.getContext("2d"); + + // Draw the background first + const img = await sharp(backgroundBuffer).toBuffer(); + const backgroundImage = await loadImage(img); + ctx.drawImage(backgroundImage, 0, 0); + + // Calculate text positions (top area) + const textAreaTop = height * 0.05; + + // Draw headline + const headlineSize = Math.round(width * 0.065); + ctx.font = `bold ${headlineSize}px -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", sans-serif`; + ctx.fillStyle = COLORS.text.primary; + ctx.textAlign = "center"; + ctx.textBaseline = "top"; + + // Add text shadow for better readability + ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; + ctx.shadowBlur = 20; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 4; + + ctx.fillText(headline, width / 2, textAreaTop); + + // Draw subheadline + const subheadlineSize = Math.round(width * 0.035); + ctx.font = `${subheadlineSize}px -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", sans-serif`; + ctx.fillStyle = COLORS.text.secondary; + ctx.shadowBlur = 10; + + ctx.fillText(subheadline, width / 2, textAreaTop + headlineSize + 20); + + return canvas.toBuffer("image/png"); +} + +async function generateScreenshot(config, targetSize, inputDir, outputDir) { + const { width, height } = DIMENSIONS[targetSize]; + const { source, headline, subheadline, outputName } = config; + + console.log( + ` Generating ${outputName} for ${targetSize}" display (${width}x${height})...` + ); + + // Load source screenshot + const sourcePath = path.join(inputDir, source); + const sourceImage = sharp(sourcePath); + const sourceMetadata = await sourceImage.metadata(); + + // Calculate screenshot placement + // Screenshot should take up about 75% of height, centered horizontally + const screenshotMaxHeight = Math.round(height * 0.75); + const screenshotMaxWidth = Math.round(width * 0.85); + + // Calculate scale to fit + const scaleHeight = screenshotMaxHeight / sourceMetadata.height; + const scaleWidth = screenshotMaxWidth / sourceMetadata.width; + const scale = Math.min(scaleHeight, scaleWidth); + + const screenshotWidth = Math.round(sourceMetadata.width * scale); + const screenshotHeight = Math.round(sourceMetadata.height * scale); + + // Position screenshot (centered horizontally, below text area) + const screenshotX = Math.round((width - screenshotWidth) / 2); + const screenshotY = Math.round(height * 0.18); // Start below text + + // Create gradient background + const backgroundBuffer = await createGradientBackground(width, height); + + // Add text overlay + const withText = await addTextOverlay( + backgroundBuffer, + width, + height, + headline, + subheadline + ); + + // Resize source screenshot with rounded corners + const roundedCorners = Math.round(screenshotWidth * 0.06); + const resizedScreenshot = await sourceImage + .resize(screenshotWidth, screenshotHeight, { + fit: "contain", + background: { r: 0, g: 0, b: 0, alpha: 0 }, + }) + .toBuffer(); + + // Create rounded corner mask + const maskCanvas = createCanvas(screenshotWidth, screenshotHeight); + const maskCtx = maskCanvas.getContext("2d"); + maskCtx.beginPath(); + maskCtx.roundRect(0, 0, screenshotWidth, screenshotHeight, roundedCorners); + maskCtx.fillStyle = "white"; + maskCtx.fill(); + + const roundedScreenshot = await sharp(resizedScreenshot) + .composite([ + { + input: await sharp(maskCanvas.toBuffer("image/png")) + .resize(screenshotWidth, screenshotHeight) + .toBuffer(), + blend: "dest-in", + }, + ]) + .toBuffer(); + + // Add drop shadow effect by creating a shadow layer + const shadowOffset = 20; + const shadowBlur = 40; + const shadowCanvas = createCanvas( + screenshotWidth + shadowBlur * 2, + screenshotHeight + shadowBlur * 2 + ); + const shadowCtx = shadowCanvas.getContext("2d"); + shadowCtx.shadowColor = "rgba(0, 0, 0, 0.4)"; + shadowCtx.shadowBlur = shadowBlur; + shadowCtx.shadowOffsetX = 0; + shadowCtx.shadowOffsetY = shadowOffset; + shadowCtx.fillStyle = "black"; + shadowCtx.beginPath(); + shadowCtx.roundRect( + shadowBlur, + shadowBlur, + screenshotWidth, + screenshotHeight, + roundedCorners + ); + shadowCtx.fill(); + + // Composite everything together + const finalImage = await sharp(withText) + .composite([ + { + input: shadowCanvas.toBuffer("image/png"), + left: screenshotX - shadowBlur, + top: screenshotY - shadowBlur, + blend: "multiply", + }, + { + input: roundedScreenshot, + left: screenshotX, + top: screenshotY, + }, + ]) + .png() + .toBuffer(); + + // Save output + const outputPath = path.join(outputDir, `${outputName}-${targetSize}in.png`); + await fs.writeFile(outputPath, finalImage); + console.log(` Saved: ${outputPath}`); +} + +async function main() { + console.log("App Store Screenshot Generator\n"); + + const inputDir = path.resolve(__dirname, "../../etc/ios_sim"); + const outputDir = path.resolve(__dirname, "output"); + + // Create output directory + await fs.mkdir(outputDir, { recursive: true }); + + // Check for source files + console.log("Checking source screenshots..."); + for (const config of SCREENSHOTS) { + const sourcePath = path.join(inputDir, config.source); + try { + await fs.access(sourcePath); + console.log(` Found: ${config.source}`); + } catch { + console.error(` Missing: ${config.source}`); + process.exit(1); + } + } + + console.log("\nGenerating screenshots...\n"); + + // Generate for each size + for (const targetSize of Object.keys(DIMENSIONS)) { + console.log(`\n${targetSize}" Display:`); + for (const config of SCREENSHOTS) { + await generateScreenshot(config, targetSize, inputDir, outputDir); + } + } + + console.log("\n\nDone! Screenshots saved to:", outputDir); + console.log("\nGenerated files:"); + const files = await fs.readdir(outputDir); + for (const file of files.sort()) { + console.log(` - ${file}`); + } +} + +main().catch(console.error); diff --git a/scripts/app-store-screenshots/output/01-home-5.5in.png b/scripts/app-store-screenshots/output/01-home-5.5in.png new file mode 100644 index 0000000..f51867f Binary files /dev/null and b/scripts/app-store-screenshots/output/01-home-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/01-home-6.5in.png b/scripts/app-store-screenshots/output/01-home-6.5in.png new file mode 100644 index 0000000..bae3077 Binary files /dev/null and b/scripts/app-store-screenshots/output/01-home-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/01-home-6.7in.png b/scripts/app-store-screenshots/output/01-home-6.7in.png new file mode 100644 index 0000000..5cec266 Binary files /dev/null and b/scripts/app-store-screenshots/output/01-home-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/02-packs-5.5in.png b/scripts/app-store-screenshots/output/02-packs-5.5in.png new file mode 100644 index 0000000..c823514 Binary files /dev/null and b/scripts/app-store-screenshots/output/02-packs-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/02-packs-6.5in.png b/scripts/app-store-screenshots/output/02-packs-6.5in.png new file mode 100644 index 0000000..4752871 Binary files /dev/null and b/scripts/app-store-screenshots/output/02-packs-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/02-packs-6.7in.png b/scripts/app-store-screenshots/output/02-packs-6.7in.png new file mode 100644 index 0000000..af28892 Binary files /dev/null and b/scripts/app-store-screenshots/output/02-packs-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/03-swipe-5.5in.png b/scripts/app-store-screenshots/output/03-swipe-5.5in.png new file mode 100644 index 0000000..23538e0 Binary files /dev/null and b/scripts/app-store-screenshots/output/03-swipe-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/03-swipe-6.5in.png b/scripts/app-store-screenshots/output/03-swipe-6.5in.png new file mode 100644 index 0000000..403b26d Binary files /dev/null and b/scripts/app-store-screenshots/output/03-swipe-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/03-swipe-6.7in.png b/scripts/app-store-screenshots/output/03-swipe-6.7in.png new file mode 100644 index 0000000..d9012b1 Binary files /dev/null and b/scripts/app-store-screenshots/output/03-swipe-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/04-swipe-yes-5.5in.png b/scripts/app-store-screenshots/output/04-swipe-yes-5.5in.png new file mode 100644 index 0000000..c7d9408 Binary files /dev/null and b/scripts/app-store-screenshots/output/04-swipe-yes-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/04-swipe-yes-6.5in.png b/scripts/app-store-screenshots/output/04-swipe-yes-6.5in.png new file mode 100644 index 0000000..f6b4db6 Binary files /dev/null and b/scripts/app-store-screenshots/output/04-swipe-yes-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/04-swipe-yes-6.7in.png b/scripts/app-store-screenshots/output/04-swipe-yes-6.7in.png new file mode 100644 index 0000000..ec52a80 Binary files /dev/null and b/scripts/app-store-screenshots/output/04-swipe-yes-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/05-match-5.5in.png b/scripts/app-store-screenshots/output/05-match-5.5in.png new file mode 100644 index 0000000..0873c7a Binary files /dev/null and b/scripts/app-store-screenshots/output/05-match-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/05-match-6.5in.png b/scripts/app-store-screenshots/output/05-match-6.5in.png new file mode 100644 index 0000000..6bf0b13 Binary files /dev/null and b/scripts/app-store-screenshots/output/05-match-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/05-match-6.7in.png b/scripts/app-store-screenshots/output/05-match-6.7in.png new file mode 100644 index 0000000..bff4e2f Binary files /dev/null and b/scripts/app-store-screenshots/output/05-match-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/06-home-matches-5.5in.png b/scripts/app-store-screenshots/output/06-home-matches-5.5in.png new file mode 100644 index 0000000..c980d9d Binary files /dev/null and b/scripts/app-store-screenshots/output/06-home-matches-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/06-home-matches-6.5in.png b/scripts/app-store-screenshots/output/06-home-matches-6.5in.png new file mode 100644 index 0000000..6ffd8f1 Binary files /dev/null and b/scripts/app-store-screenshots/output/06-home-matches-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/06-home-matches-6.7in.png b/scripts/app-store-screenshots/output/06-home-matches-6.7in.png new file mode 100644 index 0000000..f30dafc Binary files /dev/null and b/scripts/app-store-screenshots/output/06-home-matches-6.7in.png differ diff --git a/scripts/app-store-screenshots/output/07-chat-5.5in.png b/scripts/app-store-screenshots/output/07-chat-5.5in.png new file mode 100644 index 0000000..b116e84 Binary files /dev/null and b/scripts/app-store-screenshots/output/07-chat-5.5in.png differ diff --git a/scripts/app-store-screenshots/output/07-chat-6.5in.png b/scripts/app-store-screenshots/output/07-chat-6.5in.png new file mode 100644 index 0000000..2e1e79e Binary files /dev/null and b/scripts/app-store-screenshots/output/07-chat-6.5in.png differ diff --git a/scripts/app-store-screenshots/output/07-chat-6.7in.png b/scripts/app-store-screenshots/output/07-chat-6.7in.png new file mode 100644 index 0000000..2bc04b4 Binary files /dev/null and b/scripts/app-store-screenshots/output/07-chat-6.7in.png differ diff --git a/scripts/app-store-screenshots/package-lock.json b/scripts/app-store-screenshots/package-lock.json new file mode 100644 index 0000000..4f18dc2 --- /dev/null +++ b/scripts/app-store-screenshots/package-lock.json @@ -0,0 +1,759 @@ +{ + "name": "app-store-screenshots", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app-store-screenshots", + "version": "1.0.0", + "dependencies": { + "@napi-rs/canvas": "^0.1.52", + "sharp": "^0.33.2" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.88.tgz", + "integrity": "sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==", + "license": "MIT", + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.88", + "@napi-rs/canvas-darwin-arm64": "0.1.88", + "@napi-rs/canvas-darwin-x64": "0.1.88", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.88", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.88", + "@napi-rs/canvas-linux-arm64-musl": "0.1.88", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.88", + "@napi-rs/canvas-linux-x64-gnu": "0.1.88", + "@napi-rs/canvas-linux-x64-musl": "0.1.88", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.88", + "@napi-rs/canvas-win32-x64-msvc": "0.1.88" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.88.tgz", + "integrity": "sha512-KEaClPnZuVxJ8smUWjV1wWFkByBO/D+vy4lN+Dm5DFH514oqwukxKGeck9xcKJhaWJGjfruGmYGiwRe//+/zQQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.88.tgz", + "integrity": "sha512-Xgywz0dDxOKSgx3eZnK85WgGMmGrQEW7ZLA/E7raZdlEE+xXCozobgqz2ZvYigpB6DJFYkqnwHjqCOTSDGlFdg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.88.tgz", + "integrity": "sha512-Yz4wSCIQOUgNucgk+8NFtQxQxZV5NO8VKRl9ePKE6XoNyNVC8JDqtvhh3b3TPqKK8W5p2EQpAr1rjjm0mfBxdg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.88.tgz", + "integrity": "sha512-9gQM2SlTo76hYhxHi2XxWTAqpTOb+JtxMPEIr+H5nAhHhyEtNmTSDRtz93SP7mGd2G3Ojf2oF5tP9OdgtgXyKg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.88.tgz", + "integrity": "sha512-7qgaOBMXuVRk9Fzztzr3BchQKXDxGbY+nwsovD3I/Sx81e+sX0ReEDYHTItNb0Je4NHbAl7D0MKyd4SvUc04sg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.88.tgz", + "integrity": "sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.88.tgz", + "integrity": "sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.88.tgz", + "integrity": "sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.88.tgz", + "integrity": "sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.88.tgz", + "integrity": "sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.88", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.88.tgz", + "integrity": "sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + } + } +} diff --git a/scripts/app-store-screenshots/package.json b/scripts/app-store-screenshots/package.json new file mode 100644 index 0000000..847f40b --- /dev/null +++ b/scripts/app-store-screenshots/package.json @@ -0,0 +1,12 @@ +{ + "name": "app-store-screenshots", + "version": "1.0.0", + "type": "module", + "scripts": { + "generate": "node generate.js" + }, + "dependencies": { + "sharp": "^0.33.2", + "@napi-rs/canvas": "^0.1.52" + } +}