{
  "name": "GEO Agent",
  "developer": "8BitConcepts",
  "support_email": "hello@8bitconcepts.com",
  "review_packet_url": "https://geo-agent.fly.dev/app-review",
  "public_urls": {
    "overview": "https://geo-agent.fly.dev/",
    "pricing": "https://geo-agent.fly.dev/pricing",
    "support": "https://geo-agent.fly.dev/support",
    "privacy": "https://geo-agent.fly.dev/privacy",
    "terms": "https://geo-agent.fly.dev/terms",
    "llms": "https://geo-agent.fly.dev/llms.txt",
    "openapi": "https://geo-agent.fly.dev/openapi.yaml",
    "submission_checklist": "https://geo-agent.fly.dev/app-review-submission-checklist.md",
    "media_plan": "https://geo-agent.fly.dev/app-review-media-plan.md",
    "tester_instructions": "https://geo-agent.fly.dev/app-review-tester-instructions.md",
    "app_proxy_verification": "https://geo-agent.fly.dev/app-review-app-proxy-verification.md",
    "billing_verification": "https://geo-agent.fly.dev/app-review-billing-verification.md",
    "data_use": "https://geo-agent.fly.dev/app-review-data-use.md",
    "ai_self_review": "https://geo-agent.fly.dev/app-review-ai-self-review.md",
    "evidence_ledger": "https://geo-agent.fly.dev/app-review-evidence-ledger.md",
    "partner_dashboard_fields": "https://geo-agent.fly.dev/app-review-partner-dashboard-fields.md",
    "final_submission_runbook": "https://geo-agent.fly.dev/app-review-final-submission-runbook.md",
    "response_playbook": "https://geo-agent.fly.dev/app-review-response-playbook.md"
  },
  "shopify_review": {
    "install_path": "Shopify App Store or Shopify Admin install surface",
    "billing": "Shopify Billing subscriptions only",
    "embedded_app_checks": {
      "app_bridge_cdn_script": "https://cdn.shopify.com/shopifycloud/app-bridge.js",
      "server_rendered_api_key_meta": "meta[name='shopify-api-key']",
      "session_token_strategy": "Shopify Remix embedded auth with AppProvider and unstable_newEmbeddedAuthStrategy"
    },
    "app_proxy": {
      "prefix": "apps",
      "subpath": "geo",
      "public_path": "/apps/geo",
      "purpose": "Merchant-controlled llms.txt, UCP, and product-schema outputs"
    },
    "requested_scopes": [
      {
        "scope": "read_products",
        "reason": "Reads product titles, descriptions, images, and metafields for audit and benchmark scoring."
      },
      {
        "scope": "write_products",
        "reason": "Applies AI-generated product-description fixes only after the merchant reviews and approves them."
      },
      {
        "scope": "write_app_proxy",
        "reason": "Configures the /apps/geo app proxy for merchant-controlled storefront metadata outputs."
      }
    ],
    "not_requested_scopes": [
      "read_content",
      "read_themes",
      "read_metaobjects"
    ],
    "compliance_webhooks": [
      {
        "topic": "app/uninstalled",
        "behavior": "Deletes shop-scoped app data."
      },
      {
        "topic": "shop/redact",
        "behavior": "Deletes shop-scoped app data."
      },
      {
        "topic": "customers/data_request",
        "behavior": "Acknowledges the request because GEO Agent does not store customer PII."
      },
      {
        "topic": "customers/redact",
        "behavior": "Acknowledges the request because GEO Agent does not store customer PII."
      }
    ],
    "data_use": {
      "protected_customer_data": "GEO Agent does not collect, store, or process Shopify customer PII.",
      "not_requested_scopes": [
        "read_customers",
        "write_customers",
        "read_orders",
        "write_orders",
        "read_themes",
        "read_content",
        "read_metaobjects"
      ],
      "ai_provider_payload": "Benchmark prompts use product names and buyer-intent query text only; no customer PII, order data, payment data, or buyer account data is sent to the AI provider.",
      "stored_shop_data": [
        "Shopify session records",
        "Shop domain, plan state, and granted-scope string",
        "Product audit results",
        "Benchmark results",
        "Product records",
        "Generated fix drafts"
      ],
      "deletion": "app/uninstalled and shop/redact delete shop-scoped app data through the shared deletion helper."
    },
    "operational_webhooks": [
      {
        "topic": "app/scopes_update",
        "path": "/webhooks/app/scopes_update",
        "behavior": "Updates the stored granted-scope string for the shop."
      },
      {
        "topic": "products/create",
        "path": "/webhooks/products/create",
        "behavior": "Audits newly created products for agent-readable product data gaps."
      },
      {
        "topic": "products/update",
        "path": "/webhooks/products/update",
        "behavior": "Re-audits updated products so merchant-facing recommendations stay current."
      }
    ],
    "reviewer_demo_flow": [
      "Install GEO Agent from the Shopify review or Admin install surface.",
      "Open the embedded dashboard and run a product scan.",
      "Review Products for audit results and recommendations.",
      "Open Fixes, generate a product-description fix, review it, and apply only if appropriate.",
      "Open Benchmark, run the Kimi/OpenRouter visibility benchmark, and wait for progress to complete.",
      "Open Settings to review plan selection, API-key status, and merchant-controlled theme extension guidance."
    ],
    "pre_submission_evidence": [
      {
        "check": "production_routes",
        "evidence": "Production app URL, support, privacy, terms, pricing, OpenAPI, and review packet routes return HTTP 200."
      },
      {
        "check": "oauth_install_redirect",
        "evidence": "Live /auth/login with the review development store redirects to Shopify Admin OAuth install with the submitted app client_id."
      },
      {
        "check": "local_guard_tests",
        "evidence": "Build tests cover requested scopes, Shopify Billing-only checkout, App Bridge tags, operational webhooks, privacy deletion language, and no off-platform payment claims."
      },
      {
        "check": "verification_command",
        "command": "npx -y -p node@20.19.0 -p yarn@1.22.22 -c 'node -v && yarn -v && yarn test && yarn build'"
      },
      {
        "check": "live_app_review_smoke",
        "command": "npm run review:smoke",
        "evidence": "Verifies live review URLs, the static API index, commerce/agent/catalog/quote/checkout surfaces, Shopify Billing-only copy, structured app-review JSON, expected direct-origin app-proxy auth behavior, and unsigned webhook fail-closed responses."
      },
      {
        "check": "source_docs",
        "urls": [
          "https://shopify.dev/docs/apps/launch/app-store-review/pass-app-review",
          "https://shopify.dev/docs/apps/launch/shopify-app-store/app-store-requirements",
          "https://shopify.dev/docs/apps/build/authentication-authorization/session-tokens"
        ]
      },
      {
        "check": "submission_checklist",
        "url": "https://geo-agent.fly.dev/app-review-submission-checklist.md"
      },
      {
        "check": "media_plan",
        "url": "https://geo-agent.fly.dev/app-review-media-plan.md"
      },
      {
        "check": "tester_instructions",
        "url": "https://geo-agent.fly.dev/app-review-tester-instructions.md"
      },
      {
        "check": "app_proxy_verification",
        "url": "https://geo-agent.fly.dev/app-review-app-proxy-verification.md",
        "expected_direct_origin_status": "400 or 401 because signed Shopify app-proxy context is required"
      },
      {
        "check": "billing_verification",
        "url": "https://geo-agent.fly.dev/app-review-billing-verification.md",
        "evidence": "Documents Shopify Billing-only subscription approval, absolute callback URL expectations, and active-subscription confirmation before local plan updates."
      },
      {
        "check": "data_use",
        "url": "https://geo-agent.fly.dev/app-review-data-use.md"
      },
      {
        "check": "ai_self_review",
        "url": "https://geo-agent.fly.dev/app-review-ai-self-review.md",
        "evidence": "Paste-ready App Store AI self-review answers document AI feature scope, merchant approval, provider payload minimization, no customer/order PII, and no guaranteed outcome claims."
      },
      {
        "check": "evidence_ledger",
        "url": "https://geo-agent.fly.dev/app-review-evidence-ledger.md",
        "evidence": "Separates automated proof from Partner Dashboard-only gates so the final submission does not overstate code-backed readiness."
      },
      {
        "check": "partner_dashboard_fields",
        "url": "https://geo-agent.fly.dev/app-review-partner-dashboard-fields.md",
        "evidence": "Paste-ready Partner Dashboard field packet for app name, category, support/privacy/terms URLs, scopes, testing instructions, AI disclosure, billing, app-proxy, protected data, and final proof command."
      },
      {
        "check": "final_submission_runbook",
        "url": "https://geo-agent.fly.dev/app-review-final-submission-runbook.md",
        "evidence": "Last-mile Partner Dashboard sequence for AI self-review, development-store install, Shopify Billing approval, storefront app-proxy verification, tester instructions, metadata paste, screencast attachment, and submit boundary."
      },
      {
        "check": "response_playbook",
        "url": "https://geo-agent.fly.dev/app-review-response-playbook.md",
        "evidence": "Narrow Shopify review feedback response templates tied to live proof URLs, Billing-only constraints, app proxy behavior, protected-data statements, AI disclosure, and smoke commands."
      }
    ],
    "manual_partner_dashboard_gates": [
      "Run Shopify's App Store AI self-review from the Partner Dashboard or Shopify AI Toolkit before final submission using the staged AI self-review answer packet.",
      "Install and open the production app in a development store from Shopify Admin, then interact with embedded routes so Shopify's automated App Bridge and session-token checks can observe live usage.",
      "Approve a Shopify Billing subscription in the development store and confirm the embedded app reflects the approved plan after Shopify reports an active subscription.",
      "Attach the demo screencast from the media plan; the recurring worker has no browser/Computer Use authority and does not submit the app review itself.",
      "Paste the tester instructions into the Partner Dashboard testing instructions field.",
      "Paste remaining app metadata and review fields from the staged Partner Dashboard field packet."
    ]
  },
  "review_guardrails": {
    "off_platform_checkout": false,
    "claims_guaranteed_rankings": false,
    "theme_activation": "Merchant-controlled through the Shopify theme editor and GEO Schema JSON-LD app block.",
    "compliance_payload_logging": false
  }
}
