{
  "name": "culturepass-app",
  "description": "CulturePass — Expo app and web (cultural events & diaspora communities). Product site: https://culturepass.app",
  "main": "expo-router/entry",
  "version": "1.1.0",
  "private": true,
  "expo": {
    "install": {
      "exclude": [
        "@shopify/flash-list"
      ]
    },
    "doctor": {
      "appConfigFieldsNotSyncedCheck": {
        "enabled": false
      }
    }
  },
  "scripts": {
    "start": "npx expo start",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "postinstall": "patch-package && node scripts/fix-metro-core.js",
    "expo:dev": "EXPO_PACKAGER_PROXY_URL=https://$REPLIT_DEV_DOMAIN REACT_NATIVE_PACKAGER_HOSTNAME=$REPLIT_DEV_DOMAIN EXPO_PUBLIC_DOMAIN=$REPLIT_DEV_DOMAIN:5000 npx expo start --localhost",
    "expo:start:static:build": "npx expo start --no-dev --minify --localhost",
    "build": "npm run expo:static:build",
    "expo:static:build": "node scripts/build.js",
    "functions:build": "cd functions && npm run build",
    "emulator:seed:cap": "cd functions && npm run seed:emulator:cap",
    "cleanup:third-party-events:dry": "cd functions && npm run cleanup:third-party-events:dry",
    "cleanup:third-party-events": "cd functions && npm run cleanup:third-party-events",
    "stripe:smoke": "node scripts/stripe-webhook-smoke.mjs",
    "server:dev": "tsx scripts/server-dev.ts",
    "lint": "npx expo lint",
    "lint:fix": "npx expo lint --fix",
    "typecheck": "tsc --noEmit",
    "test:native-intent": "tsx scripts/test-native-intent.ts",
    "test:unit": "tsx scripts/tests/unit-services-middleware.ts && tsx scripts/tests/unit-locations.ts && tsx scripts/tests/unit-functions-authz-policy.ts && tsx scripts/tests/unit-profiles-create-schema.ts && tsx scripts/tests/unit-security-fixes.ts",
    "test:integration": "tsx scripts/tests/integration-api-routes.ts",
    "test:web:route-hygiene": "tsx scripts/tests/validate-web-route-hygiene.ts",
    "test:e2e:smoke": "tsx scripts/tests/e2e-critical-smoke.ts",
    "qa:all": "npm run test:package-json && npx tsx scripts/tests/test-deeplinks.ts && npm run test:unit && npm run test:integration && npm run test:e2e:smoke",
    "qa:solid": "npm run lint && npm run typecheck && npm run qa:all && npm run functions:build && npm run build-web:with-mock-firebase && npm run test:web:route-hygiene",
    "test:package-json": "tsx scripts/tests/validate-package-json.ts",
    "guard:legacy-components": "node scripts/guard-legacy-components.js",
    "generate:splash": "node scripts/generate-native-splash.mjs",
    "generate:app-images": "node scripts/generate-app-images.mjs",
    "generate:brand-assets": "npm run generate:app-images && npm run generate:splash",
    "build-web": "npx expo export --platform web",
    "build-web:with-mock-firebase": "EXPO_PUBLIC_FIREBASE_API_KEY=${EXPO_PUBLIC_FIREBASE_API_KEY:-mock_api_key} EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=${EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN:-mock_auth_domain} EXPO_PUBLIC_FIREBASE_PROJECT_ID=${EXPO_PUBLIC_FIREBASE_PROJECT_ID:-mock_project_id} EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=${EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET:-mock_storage_bucket} EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=${EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID:-mock_sender_id} EXPO_PUBLIC_FIREBASE_APP_ID=${EXPO_PUBLIC_FIREBASE_APP_ID:-mock_app_id} npx expo export --platform web",
    "deploy-web": "node scripts/assert-firebase-web-export.mjs && npm run build-web && firebase deploy --only hosting",
    "deploy": "npm run typecheck && npm run functions:build && node scripts/assert-firebase-web-export.mjs && npm run build-web && firebase deploy --non-interactive",
    "emulators": "firebase emulators:start --only auth,functions,firestore,storage,hosting,ui",
    "backup": "git add . && git diff --cached --quiet || git commit -m 'Auto-deploy backup'",
    "deploy-all": "npm run typecheck && npm run backup && git push origin main && npm run functions:build && firebase deploy --only functions,hosting",
    "deploy:guarded": "npm run qa:solid && npm run deploy-all",
    "build:ios:device": "eas build --platform ios --profile device",
    "build:ios:preview": "eas build --platform ios --profile preview",
    "build:android:preview": "eas build --platform android --profile preview",
    "build:ios:production": "eas build --platform ios --profile production",
    "build:android:production": "eas build --platform android --profile production",
    "submit:ios:production": "eas submit --platform ios --profile production",
    "submit:android:production": "eas submit --platform android --profile production",
    "update:preview": "eas update --branch preview",
    "update:production": "eas update --branch production"
  },
  "dependencies": {
    "@expo-google-fonts/inter": "^0.4.2",
    "@expo-google-fonts/manrope": "^0.4.2",
    "@expo-google-fonts/newsreader": "^0.4.1",
    "@expo-google-fonts/poppins": "^0.4.1",
    "@expo/ui": "~55.0.15",
    "@expo/vector-icons": "^15.1.1",
    "@react-native-async-storage/async-storage": "2.2.0",
    "@react-native-google-signin/google-signin": "^16.1.2",
    "@react-navigation/bottom-tabs": "^7.15.12",
    "@shopify/flash-list": "^2.3.1",
    "@tanstack/query-async-storage-persister": "^5.100.9",
    "@tanstack/react-query": "^5.100.9",
    "@tanstack/react-query-persist-client": "^5.100.9",
    "@types/qrcode": "^1.5.6",
    "buffer": "^6.0.3",
    "date-fns": "^4.1.0",
    "expo": "^55.0.23",
    "expo-apple-authentication": "~55.0.13",
    "expo-application": "~55.0.14",
    "expo-blur": "~55.0.14",
    "expo-build-properties": "~55.0.13",
    "expo-calendar": "~55.0.14",
    "expo-camera": "~55.0.18",
    "expo-clipboard": "~55.0.13",
    "expo-constants": "~55.0.16",
    "expo-contacts": "~55.0.14",
    "expo-crypto": "~55.0.14",
    "expo-dev-client": "~55.0.32",
    "expo-device": "~55.0.16",
    "expo-file-system": "~55.0.19",
    "expo-font": "~55.0.7",
    "expo-glass-effect": "~55.0.11",
    "expo-haptics": "~55.0.14",
    "expo-image": "~55.0.10",
    "expo-image-manipulator": "~55.0.16",
    "expo-image-picker": "~55.0.20",
    "expo-linear-gradient": "~55.0.13",
    "expo-linking": "~55.0.15",
    "expo-local-authentication": "~55.0.13",
    "expo-localization": "~55.0.13",
    "expo-location": "~55.1.9",
    "expo-modules-core": "55.0.25",
    "expo-notifications": "~55.0.22",
    "expo-router": "~55.0.14",
    "expo-secure-store": "~55.0.13",
    "expo-splash-screen": "~55.0.20",
    "expo-status-bar": "~55.0.6",
    "expo-symbols": "~55.0.8",
    "expo-system-ui": "~55.0.17",
    "expo-updates": "~55.0.21",
    "expo-web-browser": "~55.0.15",
    "expo-widgets": "~55.0.17",
    "fbjs": "^3.0.5",
    "firebase": "^12.13.0",
    "metro-core": "^0.84.4",
    "patch-package": "^8.0.1",
    "posthog-react-native": "^4.44.4",
    "react": "19.2.0",
    "react-dom": "19.2.0",
    "react-native": "0.83.6",
    "react-native-gesture-handler": "~2.31.2",
    "react-native-keyboard-controller": "1.21.7",
    "react-native-maps": "1.27.2",
    "react-native-qrcode-svg": "^6.3.21",
    "react-native-reanimated": "4.3.1",
    "react-native-safe-area-context": "~5.7.0",
    "react-native-screens": "~4.24.0",
    "react-native-svg": "15.15.4",
    "react-native-web": "^0.21.2",
    "react-native-worklets": "0.8.3",
    "zod": "^4.4.3",
    "zod-validation-error": "^5.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.29.0",
    "@bacons/apple-targets": "^4.0.6",
    "@expo/ngrok": "^4.1.3",
    "@faker-js/faker": "^10.4.0",
    "@react-native-community/cli": "^20.1.3",
    "@testing-library/react-native": "^13.3.3",
    "@types/express": "^5.0.6",
    "@types/jest": "30.0.0",
    "@types/react": "~19.2.14",
    "@typescript-eslint/eslint-plugin": "^8.59.2",
    "@typescript-eslint/parser": "^8.59.2",
    "@yarnpkg/lockfile": "^1.1.0",
    "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250117",
    "babel-plugin-transform-remove-console": "^6.9.4",
    "babel-preset-expo": "^55.0.21",
    "dotenv": "^17.4.2",
    "eslint": "^9.39.0",
    "eslint-config-expo": "~55.0.0",
    "eslint-config-prettier": "^10.1.8",
    "eslint-import-resolver-typescript": "^4.4.4",
    "eslint-plugin-import": "^2.32.0",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^7.1.1",
    "eslint-plugin-react-native": "^5.0.0",
    "express": "^5.2.1",
    "fbjs-scripts": "^3.0.1",
    "firebase-tools": "^15.17.0",
    "jest": "~30.4.0",
    "jest-environment-jsdom": "~30.4.0",
    "jest-expo": "^55.0.17",
    "jest-junit": "^17.0.0",
    "prettier": "^3.8.3",
    "qrcode": "^1.5.4",
    "react-test-renderer": "19.2.0",
    "terser": "^5.47.1",
    "ts-jest": "^29.4.9",
    "ts-node": "^10.9.2",
    "tsx": "^4.21.0",
    "typescript": "~6.0.3",
    "typescript-eslint": "^8.59.2"
  },
  "overrides": {
    "@isaacs/brace-expansion": "5.0.1",
    "@xmldom/xmldom": "^0.8.13",
    "tar": "7.5.13",
    "minimatch": "10.2.3",
    "@tootallnate/once": "3.0.1",
    "basic-ftp": "5.2.2",
    "hosted-git-info": {
      "lru-cache": "^10.4.0"
    },
    "micromatch": {
      "picomatch": "^2.3.1"
    }
  }
}
