{
  "authenticated_routes": {
    "account": "/accounts",
    "account_dashboard": "/dashboard",
    "contributor_onboarding": "/join",
    "contributor_submission": "/contribute",
    "editor_cms": "https://cms.vini.news/",
    "network_editor_cms": "https://cms.vininews.com/"
  },
  "direct_distribution": {
    "android": {
      "direct_package_supported": true,
      "package_lane": "/app-platform.json",
      "requirements": [
        "package name registration where required",
        "verified developer identity where required",
        "release signing key custody",
        "checksum and signature publication"
      ]
    },
    "desktop": {
      "direct_package_supported": true,
      "package_lane": "/app-platform.json",
      "requirements": [
        "platform signing",
        "notarization where applicable",
        "checksum and signature publication"
      ]
    },
    "ios_ipados": {
      "direct_web_app_supported": true,
      "notes": "Public iPhone and iPad native distribution remains governed by Apple distribution paths; the web app is the direct install channel.",
      "public_native_without_platform_distribution": false
    },
    "primary_channel": "installable_web_app",
    "web_app": {
      "available": true,
      "install_route": "/app",
      "notes": "Browser installation and add-to-home-screen keep the public app directly controlled by the publication.",
      "store_submission_required": false
    }
  },
  "editor_admin_capabilities": [
    "account login",
    "editor CMS",
    "admin operations tools",
    "source-feed import cycle",
    "content summary and media pack",
    "story verification checks",
    "media upload and caption review",
    "print production composer",
    "newsletter design studio",
    "ad and sponsorship studio",
    "social share and community console",
    "newsletter and reader-support surfaces",
    "original editorial planning"
  ],
  "installable_web_app": {
    "display": "standalone",
    "manifest": "/manifest.webmanifest",
    "service_worker": "/service-worker.js",
    "start_url": "/?source=app"
  },
  "native_app_shells": {
    "android": {
      "account_entry": "/accounts",
      "admin_entry": "https://cms.vininews.com/",
      "base_url": "https://vininews.com",
      "contract": "/app-platform.json",
      "editor_entry": "https://cms.vininews.com/",
      "offline_search": {
        "packed_index": "/search-tantivy.bin",
        "strategy": "download-and-persist; memory-map where platform policy allows"
      },
      "platform": "Android",
      "reader_entry": "/"
    },
    "desktop": {
      "account_entry": "/accounts",
      "admin_entry": "https://cms.vininews.com/",
      "base_url": "https://vininews.com",
      "contract": "/app-platform.json",
      "editor_entry": "https://cms.vininews.com/",
      "offline_search": {
        "packed_index": "/search-tantivy.bin",
        "strategy": "download-and-persist; memory-map where platform policy allows"
      },
      "platform": "macOS desktop shell",
      "reader_entry": "/"
    },
    "ipad": {
      "account_entry": "/accounts",
      "admin_entry": "https://cms.vininews.com/",
      "base_url": "https://vininews.com",
      "contract": "/app-platform.json",
      "editor_entry": "https://cms.vininews.com/",
      "offline_search": {
        "packed_index": "/search-tantivy.bin",
        "strategy": "download-and-persist; memory-map where platform policy allows"
      },
      "platform": "iPadOS",
      "reader_entry": "/"
    },
    "iphone": {
      "account_entry": "/accounts",
      "admin_entry": "https://cms.vininews.com/",
      "base_url": "https://vininews.com",
      "contract": "/app-platform.json",
      "editor_entry": "https://cms.vininews.com/",
      "offline_search": {
        "packed_index": "/search-tantivy.bin",
        "strategy": "download-and-persist; memory-map where platform policy allows"
      },
      "platform": "iOS",
      "reader_entry": "/"
    }
  },
  "native_client_notes": {
    "desktop": "Use the same public content files and authenticated routes; store the compact search corpus locally for offline reading where appropriate.",
    "iphone_ipad_android": "Use the same content files, account routes, and authenticated backend surfaces as the public web app.",
    "local_search_storage": "Native clients may store or memory-map the packed search corpus after download when the platform allows it."
  },
  "public_base_url": "https://vininews.com",
  "public_content_files": {
    "atom": "/atom.xml",
    "json_feed": "/feed.json",
    "news_sitemap": "/news-sitemap.xml",
    "opensearch": "/opensearch.xml",
    "rss": "/rss.xml",
    "search_compact": "/search-index.bin",
    "search_json": "/search-index.json",
    "search_manifest": "/search-index-manifest.json",
    "search_packed": "/search-tantivy.bin",
    "search_quick": "/search-quick.json",
    "site_sitemap": "/sitemap.xml"
  },
  "publication": {
    "domain": "vininews.com",
    "masthead": "vininews.com",
    "tagline": "Global reporting, briefs, photojournalism, analysis, and edited contributor work."
  },
  "publishing_suite": {
    "content_operations": {
      "daily_review": "single daily review lane checks summaries, duplicate framing, missing media, and original follow-up opportunities",
      "media_delivery": [
        "lazy-loaded non-lead images",
        "home lead image preload",
        "adjacent media prefetch hints",
        "cached source-image responses with cache validators"
      ],
      "summary_source_order": [
        "editor-approved deck",
        "source-feed summary",
        "story body excerpt",
        "source/topic fallback"
      ],
      "visual_card_target": 12
    },
    "editor_admin_surfaces": [
      "source-feed import",
      "story verification",
      "media library",
      "print edition composer",
      "newsletter composer",
      "ad campaign and placement management",
      "community moderation",
      "social share queue"
    ]
  },
  "reader_routes": {
    "app": "/app",
    "home": "/",
    "latest": "/latest",
    "newsletter": "/newsletter",
    "search": "/search",
    "sources": "/sources",
    "support": "/store",
    "tips": "/tips",
    "topics": "/topics"
  },
  "release_gates": [
    "manifest.webmanifest present",
    "service-worker.js present",
    "search-index-manifest.json search_ready true",
    "search-index-manifest.json packed_tantivy_ready true",
    "promoted visual stories have available media",
    "featured and pulled-in stories have useful reader summaries",
    "complete-file media deck fills its configured visual-card target when enough media exists",
    "app search smoke queries complete without indefinite loading",
    "admin and editor routes use authenticated backend surfaces",
    "native app contract check passes for iPhone, iPad, Android, and desktop shells"
  ],
  "revision": "20260622k",
  "role_portals": {
    "administrator": {
      "fallback_route": "https://cms.vininews.com/",
      "preferred_host": "admin.vininews.com",
      "public_route": "https://cms.vininews.com/"
    },
    "contributor": {
      "fallback_route": "/contribute",
      "preferred_host": "contributors.vininews.com",
      "public_route": "/contribute"
    },
    "editor": {
      "fallback_route": "https://cms.vininews.com/",
      "preferred_host": "editors.vininews.com",
      "public_route": "https://cms.vininews.com/"
    },
    "reader": {
      "fallback_route": "/accounts",
      "preferred_host": "accounts.vininews.com",
      "public_route": "/accounts"
    },
    "subscriber": {
      "fallback_route": "/store",
      "preferred_host": "accounts.vininews.com",
      "public_route": "/store"
    }
  },
  "roles": [
    "reader",
    "subscriber",
    "contributor",
    "editor",
    "administrator"
  ],
  "schema": "vini.app-platform.v1",
  "search_runtime": {
    "browser_binary": "/assets/search-wasm/vini_news_search_wasm_bg.wasm",
    "browser_engine": "packed-local-browser-index",
    "browser_module": "/assets/search-wasm/vini_news_search_wasm.js",
    "completion_required": true,
    "fallback_index": "/search-index.bin",
    "fallback_required": true,
    "packed_index": "/search-tantivy.bin",
    "quick_typeahead": "/search-quick.json"
  },
  "signing_authority": {
    "internal_ca": {
      "public_device_note": "Consumer device app trust still depends on platform-trusted signing chains and operating-system policy.",
      "scope": [
        "server certificates on controlled infrastructure",
        "release metadata signatures",
        "document and operator trust records"
      ],
      "status": "planned"
    },
    "release_artifacts": [
      "checksum manifest",
      "detached signature",
      "versioned changelog",
      "rollback and revocation record"
    ]
  },
  "versioning": {
    "channel": "public",
    "contract": "/app-platform.json",
    "current": "20260622k",
    "manifest": "/manifest.webmanifest",
    "release_notes_route": "/app#changelog",
    "search_manifest": "/search-index-manifest.json"
  }
}
