{
  "@context": {
    "@vocab": "https://hackshop.dev/schema#",
    "schema": "https://schema.org/",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "dcterms": "http://purl.org/dc/terms/",
    "hackshop": "https://hackshop.dev/schema#",
    "IntakeAnswers": "hackshop:IntakeAnswers",
    "size": {
      "@id": "hackshop:size",
      "@type": "xsd:string"
    },
    "interaction": {
      "@id": "hackshop:interaction",
      "@type": "xsd:string"
    },
    "sensing": {
      "@id": "hackshop:sensing",
      "@type": "xsd:string"
    },
    "budget": {
      "@id": "hackshop:budget",
      "@type": "xsd:string"
    },
    "PlanRequest": "hackshop:PlanRequest",
    "idea": {
      "@id": "hackshop:idea",
      "@type": "xsd:string"
    },
    "answers": {
      "@id": "hackshop:answers",
      "@type": "@id"
    },
    "platform": {
      "@id": "hackshop:platform",
      "@type": "xsd:string"
    },
    "budget_usd": {
      "@id": "hackshop:budget_usd",
      "@type": "xsd:decimal"
    },
    "owned_device_ids": {
      "@id": "hackshop:owned_device_ids",
      "@container": "@list"
    },
    "needs": {
      "@id": "hackshop:needs",
      "@container": "@list"
    },
    "limit": {
      "@id": "hackshop:limit",
      "@type": "xsd:integer"
    },
    "IntakeQuestion": "hackshop:IntakeQuestion",
    "id": {
      "@id": "hackshop:id",
      "@type": "xsd:string"
    },
    "question": {
      "@id": "hackshop:question",
      "@type": "xsd:string"
    },
    "why": {
      "@id": "hackshop:why",
      "@type": "xsd:string"
    },
    "options": {
      "@id": "hackshop:options",
      "@container": "@list"
    },
    "Pick": "hackshop:Pick",
    "device_id": {
      "@id": "hackshop:device_id",
      "@type": "xsd:string"
    },
    "name": {
      "@id": "hackshop:name",
      "@type": "xsd:string"
    },
    "platform_id": {
      "@id": "hackshop:platform_id",
      "@type": "xsd:string"
    },
    "support": {
      "@id": "hackshop:support",
      "@type": "xsd:string"
    },
    "tier_label": {
      "@id": "hackshop:tier_label",
      "@type": "xsd:string"
    },
    "gaps": {
      "@id": "hackshop:gaps",
      "@container": "@list"
    },
    "needs_met": {
      "@id": "hackshop:needs_met",
      "@container": "@list"
    },
    "est_total_usd": {
      "@id": "hackshop:est_total_usd",
      "@type": "xsd:decimal"
    },
    "within_budget": {
      "@id": "hackshop:within_budget",
      "@type": "xsd:boolean"
    },
    "price_label": {
      "@id": "hackshop:price_label",
      "@type": "xsd:string"
    },
    "difficulty": {
      "@id": "hackshop:difficulty"
    },
    "build_page_url": {
      "@id": "hackshop:build_page_url",
      "@type": "@id"
    },
    "agent_brief_url": {
      "@id": "hackshop:agent_brief_url",
      "@type": "@id"
    },
    "warnings": {
      "@id": "hackshop:warnings",
      "@container": "@list"
    },
    "caveats": {
      "@id": "hackshop:caveats",
      "@container": "@list"
    },
    "Difficulty": "hackshop:Difficulty",
    "level": {
      "@id": "hackshop:level",
      "@type": "xsd:string"
    },
    "label": {
      "@id": "hackshop:label",
      "@type": "xsd:string"
    },
    "short": {
      "@id": "hackshop:short",
      "@type": "xsd:string"
    },
    "PlanResponse": "hackshop:PlanResponse",
    "inferred_needs": {
      "@id": "hackshop:inferred_needs",
      "@container": "@list"
    },
    "inferred_size": {
      "@id": "hackshop:inferred_size",
      "@type": "xsd:string"
    },
    "fit": {
      "@id": "hackshop:fit",
      "@type": "xsd:string"
    },
    "notes": {
      "@id": "hackshop:notes",
      "@container": "@list"
    },
    "difficulty_note": {
      "@id": "hackshop:difficulty_note",
      "@type": "xsd:string"
    },
    "intake": {
      "@id": "hackshop:intake"
    },
    "questions": {
      "@id": "hackshop:questions",
      "@container": "@list"
    },
    "picks": {
      "@id": "hackshop:picks",
      "@container": "@list"
    },
    "terms": {
      "@id": "hackshop:terms",
      "@container": "@list"
    },
    "next_steps": {
      "@id": "hackshop:next_steps",
      "@container": "@list"
    },
    "Error": "hackshop:Error",
    "error": {
      "@id": "hackshop:error",
      "@type": "xsd:string"
    }
  },
  "@type": "schema:Dataset",
  "schema:name": "Hackshop API JSON-LD context",
  "schema:description": "A JSON-LD @context for the objects Hackshop's own API contract declares: one class per component schema, one property per declared field, typed from the contract. Derived by script (derive-json-ld.py, 2026-11-11) from openapi/hackshop-dev-openapi.json.",
  "dcterms:created": "2026-11-11",
  "dcterms:source": [
    "openapi/hackshop-dev-openapi.json"
  ]
}