{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://staging.digitalcanaries.com/schema.json",
  "title": "Digital Canaries — Public Site Schema Registry",
  "version": "1.0.0",
  "updated": "2026-05-04",
  "description": "Machine-readable registry of every public surface on staging.digitalcanaries.com. Lists URLs, page types, CMS slugs, block shapes, external service references, brand metadata. AI tools and agents should treat this as canonical for content discovery on this site.",

  "site": {
    "name": "Digital Canaries",
    "legal_name": "Digital Canaries Studios",
    "tagline": "A working film studio in Toronto.",
    "url": "https://staging.digitalcanaries.com/",
    "note": "URL is labelled `staging` but is treated as production for DC.",
    "contact": {
      "general": "info@digitalcanaries.com",
      "wtf_program": "wtf@digitalcanaries.com"
    },
    "location": {
      "city": "Toronto",
      "region": "ON",
      "country": "CA"
    }
  },

  "brand": {
    "palette": {
      "ink": "#0a0a0a",
      "paper": "#f4f1ea",
      "canary": "#F5D90A",
      "moss": "#7BAE3F",
      "grit": "#1a1a1a",
      "steel": "#2a2a2a",
      "dust": "#9a958a"
    },
    "typography": {
      "display": "Stardos Stencil (Google Fonts)",
      "marker":  "Permanent Marker (Google Fonts)",
      "body":    "Inter (Google Fonts)",
      "mono":    "JetBrains Mono (Google Fonts)"
    },
    "mantra": "REUSE · REPURPOSE · SUSTAIN",
    "voice": "Stark, confident, slightly cheeky. Trust = transparency. Quantify everything (kg, hours, days). Sustainability framed as math, not vibes."
  },

  "sections": {
    "wtf": {
      "label": "WTF! — Work To Film",
      "url":   "/wtf/",
      "type":  "ProgramService",
      "schema_org_type": "EducationalOrganization",
      "description": "Trade hours of set-build labour for hours of film studio time. $40/hour earned credit, $4,000/day soundstage. 100h = 1 free shoot day.",
      "audience": ["Film students", "Indie directors", "Content creators", "Writers"],
      "subpages": [
        { "slug": "wtf",                "url": "/wtf/",                  "cms": null,             "type": "Service",     "label": "Overview" },
        { "slug": "wtf-about",          "url": "/wtf/about.html",        "cms": "wtf-about",       "type": "AboutPage",   "label": "About" },
        { "slug": "wtf-get-involved",   "url": "/wtf/get-involved.html", "cms": "wtf-get-involved","type": "HowTo",       "label": "How can I get involved" },
        { "slug": "wtf-work",           "url": "/wtf/work.html",         "cms": "wtf-work",        "type": "WebPage",     "label": "What will I be doing" },
        { "slug": "wtf-apply",          "url": "/wtf/apply.html",        "cms": "wtf-apply",       "type": "WebPage",     "label": "Apply" },
        { "slug": "wtf-faq-page",       "url": "/wtf/faq.html",          "cms": "wtf-faq-page",    "type": "FAQPage",     "label": "FAQ" },
        { "slug": "wtf-contact",        "url": "/wtf/contact.html",      "cms": "wtf-contact",     "type": "ContactPage", "label": "Contact" },
        { "slug": "wtf-launch-kit",     "url": "/wtf/launch-kit.html",   "cms": null,              "type": "WebPage",     "label": "Launch kit (internal)", "noindex": true }
      ],
      "actions": [
        { "name": "Apply", "type": "ApplyAction", "target": "/wtf/apply.html" },
        { "name": "Contact", "type": "ContactAction", "target": "/wtf/contact.html" }
      ]
    },

    "marketplace": {
      "label": "The Marketplace",
      "url":   "/marketplace/",
      "type":  "CollectionPage",
      "schema_org_type": "CollectionPage",
      "description": "Unified public storefront for the full multi-vendor catalog (HPH props + DC set pieces), rent or buy, plus surplus for-sale listings. Rental catalog iframes cart-dev; surplus listings come from DC Admin Marketplace tab via /wp-json/dc/v1/marketplace.",
      "subpages": [
        { "slug": "marketplace", "url": "/marketplace/", "cms": null, "type": "CollectionPage", "label": "Marketplace",
          "data_source": "external+rest",
          "external": { "service": "ecommerce-cart", "embed_url": "https://cart-dev.digitalcanaries.com/embed/?mode=public", "description": "Rental catalog (both vendors)." },
          "rest": { "endpoint": "/wp-json/dc/v1/marketplace", "description": "Live on-site surplus/for-sale listings from DC Admin." }
        }
      ],
      "actions": [
        { "name": "Browse everything", "type": "ViewAction", "target": "/marketplace/" }
      ]
    },
    "build-a-set": {
      "label": "Build A Set",
      "url":   "/build-a-set/",
      "type":  "Service",
      "schema_org_type": "Service",
      "description": "Set-piece rental catalog (DC + HPH) plus build, install, and circular set-recovery services.",
      "subpages": [
        { "slug": "bas",                  "url": "/build-a-set/",                                            "cms": null,                "type": "Service",        "label": "Overview" },
        { "slug": "bas-space",            "url": "/build-a-set/space.html",                                  "cms": "bas-space",          "type": "Service",        "label": "Space to build your set" },
        { "slug": "bas-pieces",           "url": "/build-a-set/pieces.html",                                 "cms": null,                 "type": "CollectionPage", "label": "Set pieces (catalog)",
          "data_source": "external",
          "external": {
            "service": "ecommerce-cart",
            "embed_url": "https://cart-dev.digitalcanaries.com/embed/?vendor=dc&mode=public",
            "description": "Iframed multi-vendor catalog (DC set pieces + HPH props)."
          }
        },
        { "slug": "bas-construction",     "url": "/build-a-set/construction.html",                           "cms": "bas-construction",   "type": "Service",        "label": "Set construction" },
        { "slug": "bas-installations",    "url": "/build-a-set/installations.html",                          "cms": "bas-installations",  "type": "Service",        "label": "Installations" },
        { "slug": "bas-repurpose",        "url": "/build-a-set/repurpose.html",                              "cms": "bas-repurpose",      "type": "DonateAction",   "label": "Repurpose your set" },
        { "slug": "bas-piece-detail",     "url": "/build-a-set/pieces/{slug}.html",                          "cms": null,                 "type": "Product",        "label": "Piece detail (template)",
          "example_url": "/build-a-set/pieces/victorian-writing-desk.html",
          "data_source": "external",
          "note": "One demo page exists; production detail pages will be served by cart-dev."
        }
      ],
      "actions": [
        { "name": "Browse catalog", "type": "ViewAction", "target": "/build-a-set/pieces.html" },
        { "name": "Get a quote",     "type": "ContactAction", "target": "/build-a-set/construction.html#quote" },
        { "name": "Repurpose a set", "type": "DonateAction",  "target": "/build-a-set/repurpose.html#repurpose-form" }
      ]
    }
  },

  "content_types": {
    "text":  { "description": "Single-line plain text. No HTML.", "max_length": 500 },
    "html":  { "description": "Rich HTML. Allowed: p, br, strong, em, a, ul, ol, li.", "max_length": 20000 },
    "image": { "description": "Image asset (URL or uploaded attachment).", "fields": ["url", "alt", "width", "height"] },
    "link":  { "description": "Hyperlink with label.", "fields": ["label", "url", "external"] },
    "json":  { "description": "Structured JSON. Use when content is repeating/typed (e.g. faq rows, comparison rows).", "validated_against": "block-specific schema" }
  },

  "cms": {
    "engine": "DC Admin (WordPress plugin) — DC_CMS class",
    "store":  "wp_options table + dc_cms_content table",
    "admin_url": "/admin/?tab=wtf&section=pages or /admin/?tab=buildset&section=pages",
    "rest_endpoint": "https://staging.digitalcanaries.com/wp-json/dc/v1/schema",
    "rest_endpoints": {
      "full_registry":   "https://staging.digitalcanaries.com/wp-json/dc/v1/schema",
      "single_page":     "https://staging.digitalcanaries.com/wp-json/dc/v1/schema/{slug}",
      "section_wtf":     "https://staging.digitalcanaries.com/wp-json/dc/v1/schema/sections/wtf",
      "section_bas":     "https://staging.digitalcanaries.com/wp-json/dc/v1/schema/sections/bas"
    },
    "page_registry": "Defined in includes/class-dc-cms-extra-pages.php (PHP) and exposed via the REST endpoints above.",
    "block_lookup": "Each subpage in `sections.*.subpages[]` with non-null `cms` field maps to a CMS page slug. Query /wp-json/dc/v1/schema/{slug} for that page's block definitions plus current published values."
  },

  "external_services": {
    "catalog": {
      "name": "Multi-vendor rental catalog (DC set pieces + HPH props)",
      "owner_repo": "digitalcanaries/ecommerce-cart",
      "url": "https://cart-dev.digitalcanaries.com/",
      "embed_url": "https://cart-dev.digitalcanaries.com/embed/",
      "vendors": ["dc", "hph"],
      "modes": ["public", "staff"],
      "rest_api": "https://cart-dev.digitalcanaries.com/api/ (TBD — confirm with ecommerce-cart session)",
      "consumed_by": [
        "/build-a-set/pieces.html (vendor=dc, mode=public)",
        "DC Admin Cart tab (vendor=dc, mode=staff)",
        "HPH Admin (planned)"
      ]
    },
    "documents": {
      "name": "DC Documents",
      "owner_repo": "digitalcanaries/dc-admin",
      "admin_url": "/admin/?tab=documents",
      "table": "dc_documents",
      "categories": ["general","capability","contract","form","press","sustainability","spec","rate","policy"],
      "visibilities": ["staff","public"],
      "public_listing": "TBD — public /resources/ page planned.",
      "rest_endpoint": "TBD — /wp-json/dc/v1/documents (public-only) planned."
    },
    "marketplace_surplus": {
      "name": "DC Marketplace — surplus / for-sale listings",
      "owner_repo": "digitalcanaries/dc-admin",
      "admin_url": "/admin/?tab=marketplace",
      "table": "dc_marketplace_listings",
      "channels": ["onsite", "facebook", "kijiji"],
      "statuses": ["draft", "live", "pending", "sold", "archived"],
      "public_rest_endpoint": "/wp-json/dc/v1/marketplace",
      "description": "Surplus/for-sale listings (separate from the rental catalog). Push to on-site /marketplace/, Facebook Marketplace, and Kijiji. External posting is prepare-and-track (API automation gated)."
    }
  },

  "documents_referencing_this": [
    "/wtf-page/PLAN.md (handoff doc for next-session admin work)",
    "/dc-admin/includes/class-dc-cms-extra-pages.php (PHP source of truth for sub-page block defs)"
  ],

  "ai_readability": {
    "json_ld_on_pages": true,
    "json_ld_types": ["Organization", "WebSite", "BreadcrumbList", "Service", "FAQPage", "AboutPage", "ContactPage", "HowTo", "CollectionPage", "Product", "ItemList"],
    "open_graph": true,
    "twitter_cards": true,
    "og_images": { "default": "/og/dc.svg", "wtf": "/og/wtf.svg", "build_a_set": "/og/build-a-set.svg" },
    "favicon": "/icons/favicon.svg",
    "humans_txt": "/humans.txt",
    "llms_txt": "/llms.txt",
    "sitemap": "/sitemap.xml",
    "robots": "/robots.txt",
    "ai_crawlers_allowed": ["GPTBot", "ChatGPT-User", "ClaudeBot", "Claude-Web", "anthropic-ai", "PerplexityBot", "Google-Extended", "CCBot", "cohere-ai", "Applebot-Extended"],
    "machine_readable_registry": "/schema.json (this file)",
    "entity": {
      "name": "Digital Canaries",
      "type": "Organization",
      "same_as": ["https://github.com/digitalcanaries"],
      "social_profiles": "TBD — add Instagram, LinkedIn, etc. to strengthen entity recognition"
    }
  }
}
