{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "title": "$schema"
    },
    "output": {
      "type": "object",
      "properties": {
        "privacyFilePath": {
          "type": "string",
          "title": "privacyFilePath"
        },
        "termsFilePath": {
          "type": "string",
          "title": "termsFilePath"
        },
        "fileType": {
          "$ref": "#/definitions/FileType",
          "title": "fileType"
        },
        "cssFramework": {
          "$ref": "#/definitions/CSSFramework",
          "title": "cssFramework"
        },
        "locales": {
          "type": "array",
          "items": {
            "type": "string",
            "const": "en"
          },
          "title": "locales"
        },
        "astroLayout": {
          "description": "Astro layout configuration (only used when fileType is \"astro\").\nIf not provided, generates a standalone HTML page.",
          "type": "object",
          "properties": {
            "path": {
              "description": "Path to the Layout component (e.g., \"~/layouts/Layout.astro\")",
              "type": "string",
              "title": "path"
            },
            "props": {
              "$ref": "#/definitions/AstroLayoutProps",
              "description": "Props to pass to the Layout component",
              "title": "props"
            }
          },
          "additionalProperties": false,
          "required": [
            "path"
          ],
          "title": "astroLayout"
        },
        "astroShell": {
          "description": "Optional inner shell wrapper rendered inside the Astro Layout.\nUseful when the marketing chrome (nav/footer) lives in a separate\ncomponent from the page Layout.",
          "type": "object",
          "properties": {
            "path": {
              "description": "Path to the shell component (e.g., \"~/components/MarketingShell.astro\")",
              "type": "string",
              "title": "path"
            },
            "props": {
              "$ref": "#/definitions/AstroLayoutProps",
              "description": "Props to pass to the shell component",
              "title": "props"
            }
          },
          "additionalProperties": false,
          "required": [
            "path"
          ],
          "title": "astroShell"
        }
      },
      "additionalProperties": false,
      "required": [
        "cssFramework",
        "fileType",
        "locales"
      ],
      "title": "output"
    },
    "entity": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "title": "name"
        },
        "website": {
          "type": "string",
          "title": "website"
        },
        "address": {
          "type": "string",
          "title": "address"
        }
      },
      "additionalProperties": false,
      "required": [
        "address",
        "name",
        "website"
      ],
      "title": "entity"
    },
    "privacy": {
      "description": "Privacy policy configuration.",
      "type": "object",
      "properties": {
        "privacyEmail": {
          "description": "Contact email for privacy-related questions and requests",
          "type": "string",
          "title": "privacyEmail"
        },
        "platforms": {
          "description": "Platforms where your service operates (web, mobile, desktop, browserExtension)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Platforms"
          },
          "title": "platforms"
        },
        "locations": {
          "description": "Geographic regions where you operate (affects which laws apply)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Locations"
          },
          "title": "locations"
        },
        "socialSignIn": {
          "description": "Whether you offer social sign-in (Google, Facebook, etc.)",
          "type": "boolean",
          "title": "socialSignIn"
        },
        "personalInformation": {
          "description": "Types of personal information you collect",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PersonalInformation"
          },
          "title": "personalInformation"
        },
        "sensitiveInformation": {
          "description": "Types of sensitive information you collect (health, biometric, etc.)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/SensitiveInformation"
          },
          "title": "sensitiveInformation"
        },
        "thirdPartyData": {
          "description": "Types of data received from third parties",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ThirdPartyData"
          },
          "title": "thirdPartyData"
        },
        "paymentData": {
          "description": "Whether you collect payment/billing information",
          "type": "boolean",
          "title": "paymentData"
        },
        "paymentProcessors": {
          "description": "URLs to payment processor privacy policies (e.g., Stripe, PayPal)",
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "paymentProcessors"
        },
        "appUsageData": {
          "description": "Whether you collect app usage data and logs",
          "type": "boolean",
          "title": "appUsageData"
        },
        "thirdPartyDisclosure": {
          "description": "Whether you share data with third-party service providers",
          "type": "boolean",
          "title": "thirdPartyDisclosure"
        },
        "thirdPartyDisclosureEntities": {
          "description": "Categories of third parties you disclose data to",
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "thirdPartyDisclosureEntities"
        },
        "thirdPartySharing": {
          "description": "Whether you sell or share data for advertising/marketing",
          "type": "boolean",
          "title": "thirdPartySharing"
        },
        "thirdPartySharingEntities": {
          "description": "Categories of third parties you share/sell data to",
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "thirdPartySharingEntities"
        },
        "securityMeasures": {
          "description": "Whether you implement security measures (encryption, access controls)",
          "type": "boolean",
          "title": "securityMeasures"
        },
        "webTracking": {
          "description": "Whether you use cookies and web tracking technologies",
          "type": "boolean",
          "title": "webTracking"
        },
        "thirdPartyAnalytics": {
          "description": "Whether you use third-party analytics (Google Analytics, etc.)",
          "type": "boolean",
          "title": "thirdPartyAnalytics"
        },
        "serviceRequirements": {
          "description": "Purposes for which you process data",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ServiceRequirements"
          },
          "title": "serviceRequirements"
        },
        "legalBasis": {
          "description": "Legal bases for data processing under GDPR",
          "type": "array",
          "items": {
            "$ref": "#/definitions/LegalBasis"
          },
          "title": "legalBasis"
        },
        "dataRetentionPeriod": {
          "description": "How long you retain user data (e.g., \"1 year\", \"until account deletion\")",
          "type": "string",
          "title": "dataRetentionPeriod"
        },
        "usStatePrivacyLaws": {
          "description": "Whether you comply with US state privacy laws (CCPA, etc.)",
          "type": "boolean",
          "title": "usStatePrivacyLaws"
        },
        "privacyPage": {
          "description": "URL where users can manage their privacy settings",
          "type": "string",
          "title": "privacyPage"
        },
        "dpo": {
          "description": "Whether you have a Data Protection Officer",
          "type": "boolean",
          "title": "dpo"
        },
        "dpoName": {
          "description": "Name of your Data Protection Officer",
          "type": "string",
          "title": "dpoName"
        },
        "dpoEmail": {
          "description": "Contact email for your DPO",
          "type": "string",
          "title": "dpoEmail"
        },
        "dpoPhone": {
          "description": "Contact phone for your DPO",
          "type": "string",
          "title": "dpoPhone"
        },
        "browserExtension": {
          "description": "Configuration for browser extension privacy disclosures",
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "title": "name"
            },
            "permissions": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/BrowserExtensionPermission"
              },
              "title": "permissions"
            },
            "hostPermissions": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "title": "hostPermissions"
            },
            "dataCollected": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/BrowserExtensionDataType"
              },
              "title": "dataCollected"
            },
            "dataSentTo": {
              "type": "string",
              "title": "dataSentTo"
            },
            "runsLocally": {
              "type": "boolean",
              "title": "runsLocally"
            },
            "storeListingUrl": {
              "type": "string",
              "title": "storeListingUrl"
            },
            "dataHandling": {
              "description": "Plain-text replacement for the extension Data Handling paragraph.",
              "type": "string",
              "title": "dataHandling"
            },
            "dataSharing": {
              "description": "Plain-text replacement for the extension Data Sharing paragraph.",
              "type": "string",
              "title": "dataSharing"
            },
            "dataHandlingSent": {
              "description": "Plain-text replacement for the paragraph describing data sent to the server.",
              "type": "string",
              "title": "dataHandlingSent"
            },
            "dataHandlingLocal": {
              "description": "Plain-text replacement for the local-processing paragraph.",
              "type": "string",
              "title": "dataHandlingLocal"
            },
            "dataStorageServer": {
              "description": "Plain-text replacement for the server-storage paragraph.",
              "type": "string",
              "title": "dataStorageServer"
            }
          },
          "additionalProperties": false,
          "required": [
            "dataCollected",
            "hostPermissions",
            "name",
            "permissions",
            "runsLocally"
          ],
          "title": "browserExtension"
        },
        "aiUsage": {
          "description": "AI usage disclosure. When set, renders a dedicated AI section listing\nproviders user data may flow to, what AI is used for, and operator-supplied\ndata-handling and automated-decision disclosures.",
          "type": "object",
          "properties": {
            "providers": {
              "description": "AI providers user data may flow to",
              "type": "array",
              "items": {
                "$ref": "#/definitions/AiProvider"
              },
              "title": "providers"
            },
            "usedFor": {
              "description": "Free-text bullets for what AI is used for (e.g. \"summarizing user inputs\")",
              "type": "array",
              "items": {
                "type": "string"
              },
              "title": "usedFor"
            },
            "dataHandling": {
              "description": "Factual description of data sent, retained, or used for training",
              "type": "string",
              "title": "dataHandling"
            },
            "automatedDecisions": {
              "description": "Factual description of consequential automated decisions, when applicable",
              "type": "string",
              "title": "automatedDecisions"
            }
          },
          "additionalProperties": false,
          "required": [
            "dataHandling",
            "providers",
            "usedFor"
          ],
          "title": "aiUsage"
        },
        "cpraCompliance": {
          "description": "CPRA (California Privacy Rights Act) compliance.\nAdds California-specific rights: right to correct data, limit sensitive data use,\nand opt-out of automated decision-making. Required if you have CA users and\nmeet CPRA thresholds.",
          "default": false,
          "type": "boolean",
          "title": "cpraCompliance"
        },
        "vcdpaCompliance": {
          "description": "VCDPA (Virginia Consumer Data Protection Act) compliance.\nAdds Virginia-specific consumer rights disclosures. Required if you process\ndata of 100,000+ VA consumers or derive 50%+ revenue from selling VA consumer data.",
          "default": false,
          "type": "boolean",
          "title": "vcdpaCompliance"
        },
        "cookieConsent": {
          "description": "Whether you implement cookie consent mechanisms.\nAdds a cookie policy section explaining consent, preferences, and management.",
          "default": false,
          "type": "boolean",
          "title": "cookieConsent"
        },
        "cookieConsentProvider": {
          "description": "Name of your cookie consent provider (e.g., \"OneTrust\", \"CookieYes\", \"Termly\").\nDisplayed in the cookie consent section.",
          "type": "string",
          "title": "cookieConsentProvider"
        },
        "dataBreachNotification": {
          "description": "Whether you have data breach notification procedures.\nAdds section explaining how users will be notified in case of a breach.",
          "default": false,
          "type": "boolean",
          "title": "dataBreachNotification"
        },
        "dataBreachTimeframe": {
          "description": "Timeframe for breach notification (e.g., \"72 hours\").\nGDPR requires notification within 72 hours.",
          "type": "string",
          "title": "dataBreachTimeframe"
        },
        "crossBorderTransfers": {
          "description": "Whether you transfer data across international borders.\nAdds section explaining transfer safeguards (SCCs, BCRs, adequacy decisions).",
          "default": false,
          "type": "boolean",
          "title": "crossBorderTransfers"
        },
        "transferMechanisms": {
          "description": "Legal mechanisms used for cross-border data transfers.\n- scc: Standard Contractual Clauses\n- bcr: Binding Corporate Rules\n- adequacy: Adequacy decisions (e.g., EU-US Data Privacy Framework)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/TransferMechanism"
          },
          "title": "transferMechanisms"
        },
        "coppaCompliance": {
          "description": "COPPA (Children's Online Privacy Protection Act) compliance.\nRequired if you knowingly collect data from children under 13 in the US.\nAdds parental consent requirements and children's privacy disclosures.",
          "default": false,
          "type": "boolean",
          "title": "coppaCompliance"
        },
        "childrenMinAge": {
          "description": "Minimum age for users (typically 13 for COPPA, 16 for some EU countries).\nUsed in COPPA compliance section.",
          "type": "number",
          "title": "childrenMinAge"
        }
      },
      "additionalProperties": false,
      "required": [
        "appUsageData",
        "dpo",
        "legalBasis",
        "locations",
        "paymentData",
        "paymentProcessors",
        "personalInformation",
        "platforms",
        "privacyEmail",
        "securityMeasures",
        "sensitiveInformation",
        "serviceRequirements",
        "socialSignIn",
        "thirdPartyAnalytics",
        "thirdPartyData",
        "thirdPartyDisclosure",
        "thirdPartyDisclosureEntities",
        "thirdPartySharing",
        "thirdPartySharingEntities",
        "usStatePrivacyLaws",
        "webTracking"
      ],
      "title": "privacy"
    },
    "terms": {
      "description": "Terms of service configuration.",
      "type": "object",
      "properties": {
        "underEighteen": {
          "description": "Whether users under 18 can use your service",
          "type": "boolean",
          "title": "underEighteen"
        },
        "underThirteen": {
          "description": "Whether users under 13 can use your service (COPPA implications)",
          "type": "boolean",
          "title": "underThirteen"
        },
        "purchasableGoods": {
          "description": "Whether you sell one-time purchasable goods/products",
          "type": "boolean",
          "title": "purchasableGoods"
        },
        "subscription": {
          "description": "Whether you offer subscription-based services",
          "type": "boolean",
          "title": "subscription"
        },
        "freeTrial": {
          "description": "Whether you offer free trial periods",
          "type": "boolean",
          "title": "freeTrial"
        },
        "autoRenew": {
          "description": "Whether subscriptions auto-renew",
          "type": "boolean",
          "title": "autoRenew"
        },
        "refundPolicy": {
          "$ref": "#/definitions/RefundPolicy",
          "description": "Your refund policy (none, full, prorata)",
          "title": "refundPolicy"
        },
        "userContent": {
          "description": "Whether users can submit/upload content",
          "type": "boolean",
          "title": "userContent"
        },
        "userContentLicense": {
          "description": "Whether you claim a license to user-generated content",
          "type": "boolean",
          "title": "userContentLicense"
        },
        "userAccounts": {
          "description": "Whether user accounts are required",
          "type": "boolean",
          "title": "userAccounts"
        },
        "governingLaw": {
          "description": "Jurisdiction for governing law (e.g., \"California\", \"Delaware\")",
          "type": "string",
          "title": "governingLaw"
        },
        "disputeResolution": {
          "$ref": "#/definitions/DisputeResolution",
          "description": "How disputes are resolved (arbitration or litigation)",
          "title": "disputeResolution"
        },
        "arbitrationProvider": {
          "description": "The body that administers arbitration, e.g. \"the American Arbitration\nAssociation (AAA)\" or \"JAMS\". Only used with arbitration; when unset, the\nclause names no institution.",
          "type": "string",
          "title": "arbitrationProvider"
        },
        "mediation": {
          "description": "Whether mediation is required before formal disputes",
          "type": "boolean",
          "title": "mediation"
        },
        "prohibitedUses": {
          "description": "List of prohibited uses of your service",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ProhibitedUses"
          },
          "title": "prohibitedUses"
        },
        "serviceSLA": {
          "description": "Whether you offer a Service Level Agreement",
          "type": "boolean",
          "title": "serviceSLA"
        },
        "serviceSLAAmount": {
          "description": "SLA uptime percentage (e.g., 99.9)",
          "type": "number",
          "title": "serviceSLAAmount"
        },
        "serviceSLATimeframe": {
          "description": "SLA measurement timeframe (e.g., \"30 days\", \"monthly\")",
          "type": "string",
          "title": "serviceSLATimeframe"
        },
        "serviceSLARefund": {
          "description": "Whether SLA violations result in refunds/credits",
          "type": "boolean",
          "title": "serviceSLARefund"
        },
        "serviceSLARefundType": {
          "$ref": "#/definitions/RefundType",
          "description": "Type of SLA refund (full or prorated)",
          "title": "serviceSLARefundType"
        },
        "serviceSLACustom": {
          "description": "Custom SLA terms (overrides default SLA text)",
          "type": "string",
          "title": "serviceSLACustom"
        },
        "liabilityLimitation": {
          "description": "Whether you limit liability",
          "type": "boolean",
          "title": "liabilityLimitation"
        },
        "liabilityLimitationType": {
          "$ref": "#/definitions/LiabilityLimitationType",
          "description": "How liability is calculated",
          "title": "liabilityLimitationType"
        },
        "liabilityLimitationTimeframe": {
          "description": "Timeframe for liability calculation (e.g., \"6 months\")",
          "type": "string",
          "title": "liabilityLimitationTimeframe"
        },
        "liabilityLimitationAmount": {
          "description": "Fixed dollar amount for liability cap",
          "type": "number",
          "title": "liabilityLimitationAmount"
        },
        "supportEmail": {
          "description": "Contact email for support questions",
          "type": "string",
          "title": "supportEmail"
        },
        "forceMajeure": {
          "description": "Force majeure clause.\nProtects against liability for failures due to events beyond your control\n(natural disasters, wars, pandemics, government actions, etc.).\nRecommended for most services.",
          "default": true,
          "type": "boolean",
          "title": "forceMajeure"
        },
        "dmcaTakedown": {
          "description": "DMCA takedown procedure.\nRequired if you host user-generated content in the US and want safe harbor\nprotection under 17 U.S.C. § 512. Adds section explaining how copyright\nholders can submit takedown notices.",
          "default": false,
          "type": "boolean",
          "title": "dmcaTakedown"
        },
        "dmcaEmail": {
          "description": "Designated email for DMCA takedown notices.\nShould be monitored and responded to promptly.",
          "type": "string",
          "title": "dmcaEmail"
        },
        "taxLiability": {
          "description": "Tax liability disclaimer.\nClarifies that users are responsible for applicable taxes on purchases.\nImportant for international services.",
          "default": false,
          "type": "boolean",
          "title": "taxLiability"
        },
        "taxJurisdiction": {
          "description": "Tax jurisdiction (e.g., \"United States\", \"European Union\").\nUsed in tax liability section.",
          "type": "string",
          "title": "taxJurisdiction"
        }
      },
      "additionalProperties": false,
      "required": [
        "autoRenew",
        "disputeResolution",
        "freeTrial",
        "governingLaw",
        "liabilityLimitation",
        "liabilityLimitationAmount",
        "mediation",
        "prohibitedUses",
        "purchasableGoods",
        "refundPolicy",
        "serviceSLA",
        "serviceSLAAmount",
        "serviceSLARefund",
        "subscription",
        "supportEmail",
        "underEighteen",
        "underThirteen",
        "userAccounts",
        "userContent",
        "userContentLicense"
      ],
      "title": "terms"
    }
  },
  "additionalProperties": false,
  "required": [
    "entity",
    "output"
  ],
  "definitions": {
    "FileType": {
      "title": "FileType",
      "type": "string",
      "enum": [
        "html",
        "astro"
      ]
    },
    "CSSFramework": {
      "title": "CSSFramework",
      "type": "string",
      "enum": [
        "tailwind",
        "daisyui",
        "classes"
      ]
    },
    "AstroLayoutProps": {
      "description": "Props to pass to the Astro Layout component.\nAllows any string/number/boolean/object values.",
      "additionalProperties": true,
      "title": "AstroLayoutProps",
      "type": "object"
    },
    "Platforms": {
      "title": "Platforms",
      "type": "string",
      "enum": [
        "web",
        "mobile",
        "desktop",
        "browserExtension"
      ]
    },
    "Locations": {
      "title": "Locations",
      "type": "string",
      "enum": [
        "us",
        "eu",
        "uk",
        "other"
      ]
    },
    "PersonalInformation": {
      "title": "PersonalInformation",
      "type": "string",
      "enum": [
        "name",
        "email",
        "phone",
        "address",
        "password",
        "ipAddress",
        "deviceId",
        "creditCard",
        "locationData",
        "anonymizedUsageData"
      ]
    },
    "SensitiveInformation": {
      "title": "SensitiveInformation",
      "type": "string",
      "enum": [
        "ssn",
        "financial",
        "health",
        "biometric",
        "genetic",
        "political",
        "sexualOrientation",
        "criminalHistory",
        "religion"
      ]
    },
    "ThirdPartyData": {
      "title": "ThirdPartyData",
      "type": "string",
      "enum": [
        "advertising",
        "analytics",
        "socialMedia",
        "purchase",
        "email",
        "support",
        "crm",
        "job",
        "address",
        "behavior"
      ]
    },
    "ServiceRequirements": {
      "title": "ServiceRequirements",
      "type": "string",
      "enum": [
        "accounts",
        "communication",
        "orders"
      ]
    },
    "LegalBasis": {
      "title": "LegalBasis",
      "type": "string",
      "enum": [
        "advertising",
        "marketing",
        "analytics",
        "security",
        "fraudPrevention"
      ]
    },
    "BrowserExtensionPermission": {
      "title": "BrowserExtensionPermission",
      "type": "string",
      "enum": [
        "activeTab",
        "tabs",
        "storage",
        "cookies",
        "history",
        "bookmarks",
        "downloads",
        "notifications",
        "clipboardRead",
        "clipboardWrite",
        "geolocation",
        "identity",
        "webRequest",
        "declarativeNetRequest",
        "scripting",
        "contextMenus",
        "alarms"
      ]
    },
    "BrowserExtensionDataType": {
      "title": "BrowserExtensionDataType",
      "type": "string",
      "enum": [
        "currentTabUrl",
        "browsingHistory",
        "bookmarks",
        "formInput",
        "pageContent",
        "cookies",
        "localStorage",
        "credentials"
      ]
    },
    "AiProvider": {
      "description": "AI / LLM provider used by the product. Values are stable identifiers\nresolved against translation strings to render provider name + URL +\ndescription. Add new providers here as they're adopted.",
      "title": "AiProvider",
      "type": "string",
      "enum": [
        "anthropic",
        "awsBedrock",
        "openai",
        "azureOpenAi",
        "googleAi",
        "vertexAi",
        "cohere",
        "mistral",
        "ollama"
      ]
    },
    "TransferMechanism": {
      "description": "Cross-border data transfer mechanisms for GDPR compliance.\n- scc: Standard Contractual Clauses - EU-approved contract terms for data transfers\n- bcr: Binding Corporate Rules - internal rules for multinational companies\n- adequacy: Adequacy Decision - transfers to countries deemed adequate by EU Commission",
      "title": "TransferMechanism",
      "type": "string",
      "enum": [
        "scc",
        "bcr",
        "adequacy"
      ]
    },
    "RefundPolicy": {
      "title": "RefundPolicy",
      "type": "string",
      "enum": [
        "none",
        "full",
        "prorata"
      ]
    },
    "DisputeResolution": {
      "title": "DisputeResolution",
      "type": "string",
      "enum": [
        "arbitration",
        "litigation"
      ]
    },
    "ProhibitedUses": {
      "title": "ProhibitedUses",
      "type": "string",
      "enum": [
        "crawling",
        "illegal",
        "harmful",
        "infringing",
        "abusive",
        "spam",
        "advertising",
        "impersonation",
        "accountTransfer"
      ]
    },
    "RefundType": {
      "title": "RefundType",
      "type": "string",
      "enum": [
        "full",
        "prorata"
      ]
    },
    "LiabilityLimitationType": {
      "title": "LiabilityLimitationType",
      "type": "string",
      "enum": [
        "amount_paid",
        "amount",
        "minAmountPaidOrAmount"
      ]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "allOf": [
    {
      "if": {
        "properties": {
          "output": {
            "type": "object",
            "properties": {
              "privacyFilePath": {
                "type": "string"
              }
            },
            "required": [
              "privacyFilePath"
            ]
          }
        }
      },
      "then": {
        "required": [
          "privacy"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "output": {
            "type": "object",
            "properties": {
              "termsFilePath": {
                "type": "string"
              }
            },
            "required": [
              "termsFilePath"
            ]
          }
        }
      },
      "then": {
        "required": [
          "terms"
        ]
      }
    }
  ]
}