{
  "version": "2026-05-28",
  "phase": "public_beta",
  "hosts": {
    "marketing": "https://blueprint.tube",
    "api": "https://api.blueprint.tube",
    "app": "https://app.blueprint.tube"
  },
  "routing": {
    "apex_serves": "landing",
    "api_tier_routed": true,
    "note": "api.blueprint.tube routes to blueprint-harvester-api. make smoke-prod, make smoke-prod-one-model, make smoke-prod-catalog, and deterministic CC0 seed catalog upload passed after the 2026-05-28 ca52672 GitOps sync. Storage-backed upload, provenance metadata, and geometry similarity are beta; the public catalog now has a small verified seed set.\n"
  },
  "evidence": {
    "verified_at": "2026-05-28",
    "repo_head": "main",
    "public_smoke": {
      "smoke_landing": "pass",
      "smoke_prod": "pass",
      "smoke_prod_one_model": "pass",
      "smoke_prod_catalog": "pass",
      "seed_prod_catalog": "pass",
      "gitops_sync": "Argo app blueprint-harvester-services is Healthy/Synced at 910003f after the 2026-05-28 bounded harvest-planner ingestion rollout; API digest sha256:8e60927487ca68bece15c854b10598db54018a079ce5e63f1f69b90abb4c582e and ingestion digest sha256:0dff8ab0c6381c89b8c63f0203e811466ab4474b7aaee5da16a79c5978f4c3b7",
      "health": "GET https://api.blueprint.tube/health -> service api-gateway",
      "readiness": "GET https://api.blueprint.tube/ready -> database ok",
      "search": "POST https://api.blueprint.tube/api/v1/search/ -> 200 JSON; geometry seed catalog is available through /api/v1/geometry",
      "upload": "POST https://api.blueprint.tube/api/v1/geometry/upload returned 200 for tests/fixtures/smoke/sample_cube.stl after the ccef832 API digest sync. The 96a8935 API digest also re-enriched duplicate uploads that lacked an embedding.\n",
      "stored_upload_searchable": "make smoke-prod-catalog passed after the ca52672 GitOps sync: tests/fixtures/smoke/sample_cube.stl uploaded as object ecd0226a-1134-4f0e-997b-f08f444bf0cf, reached completed with an embedding, and POST /api/v1/geometry/search/by-id returned HTTP 200.\n",
      "seed_catalog": "make seed-prod-catalog uploaded 8 deterministic CC0-1.0 procedural STL models on 2026-05-28. Each object reached completed with an embedding and by-id search returned results. Verified seed IDs: 1eea108a-90fa-4e1a-a4b3-419924a4f0f2, b60cf619-a08a-4626-87b6-a034ab942f15, 88e25f31-2da9-4381-b0e0-fab8f5cc5b3a, 34888208-3b9c-4b89-80c1-f675b75fec66, 1326ef90-e143-412d-9b1e-76510adfe198, f97e0227-e733-4916-9b1d-f26ab8b704ce, 25abdc68-b49a-4eb8-832d-da0179eeaae8, and 41022460-aeb6-44cd-b87a-dbc7c85b0233.\n",
      "provenance_metadata": "GET /api/v1/geometry/1eea108a-90fa-4e1a-a4b3-419924a4f0f2 returned metadata.license=CC0-1.0, metadata.source_name=blueprint-seed, commercial_use_allowed=true, and ml.has_embedding=true. POST /api/v1/geometry/search/by-id for that object returned result items with license=CC0-1.0, source_name=blueprint-seed, attribution, and similarity.\n",
      "source_policy_gate": "The ingestion service image at 910003f includes a source registry, robots/TOS/API-terms evidence hashing, conservative Thingiverse license gates, provenance metadata propagation, and internal operator endpoints at /api/v1/sources, /api/v1/sources/thingiverse/policy, and /api/v1/sources/thingiverse/harvest-plan. Enclii verified the ingestion pod Running/Ready with zero restarts after the digest rollout.\n",
      "upload_similarity": "POST https://api.blueprint.tube/api/v1/geometry/search/upload returned HTTP 200 after the 6b6af945 ML hotfix and 11a2140 API pgvector serialization fix rolled. The smoke STL produced a valid response envelope with zero matches, consistent with the current sparse catalog.\n",
      "api_platform_status": "GET https://api.blueprint.tube/api/v1/platform/status returns the same generated platform status payload as blueprint.tube/platform-status.json.\n"
    },
    "codebase_observations": {
      "gitops_active": "landing, api, search, ml, ingestion, minio, opensearch",
      "gitops_omitted": "processing, web, auth, compliance, slicing",
      "storage_config_gap": "Remediated in production by the ccef832 API digest: StorageClient accepts both S3_* and MINIO_* aliases, the production secret template includes S3_* aliases, and make smoke-prod-one-model passed.\n",
      "ml_embedding_gap": "Production showed upload-to-embedding failing inside PointNet++ set abstraction. Repo fix now preserves [B, N, C] layout through grouping, converts only grouped tensors to Conv2d layout, and fixes API ML-client error logging. The ML image built successfully at 6b6af945, was copied to the canonical Blueprint package, and is live in production.\n",
      "api_pgvector_gap": "Production then exposed a second upload-similarity failure: the API passed a NumPy ndarray into asyncpg for a pgvector query. The 11a2140 API digest serializes embeddings as pgvector text and casts the bind as vector.\n",
      "api_catalog_enrichment": "The 96a8935 API digest moved stored upload enrichment into the API background task while the standalone processing overlay remains quarantined. Stored uploads now persist geometry metadata, a 512-dimensional embedding, and a ProcessingJob result before by-id similarity search.\n",
      "api_provenance_catalog": "The ca52672 API digest accepts provenance fields on geometry upload, stores sanitized license/source/author/attribution/commercial-use metadata, merges provenance onto duplicate uploads, and returns selected provenance fields from similarity search results. scripts/seed_catalog.py provides a deterministic CC0-1.0 seed catalog path with unit coverage.\n",
      "platform_status_mirror": "The production API deployment mounts the same Kustomize-generated blueprint-harvester-platform-status ConfigMap as the landing deployment, so /api/v1/platform/status updates with GitOps status commits instead of requiring an API image rebuild.\n",
      "source_ingestion_policy_gate": "The 910003f ingestion digest adds reusable source policy contracts, source-policy evidence hashes, per-asset license decisions, bounded harvest planning, provenance metadata propagation, and tests for policy, planner, endpoint, and worker skip behavior. The default Thingiverse posture requires API credentials, explicit operator approval, and current robots/TOS/API-terms snapshots before discovery or fetch.\n",
      "ml_build_gap": "Roundhouse ML builds for 7947c57 and df433ea failed. Enclii ops.pods.diagnose on namespace enclii-builds showed the df433ea Kaniko build pod OOMKilled with exit code 137. A build-only Enclii mirror of the deployed ML base let Roundhouse build 6b6af945 successfully; the image was copied to ghcr.io/madfam-org/blueprint-harvester/ml:6b6af945 with digest sha256:b206dd57bbdaebe18fe7bb95a9e2c4a486cb45b2bbecb89b2f86d146da89ff3d.\n"
    },
    "enclii_observations": {
      "gitops_sync": "blueprint-harvester-services Healthy/Synced at 910003f; ingestion digest sha256:0dff8ab0c6381c89b8c63f0203e811466ab4474b7aaee5da16a79c5978f4c3b7 is live with API, landing, search, and ML pods Ready",
      "project_services": "blueprint-harvester-landing, blueprint-harvester-api, blueprint-harvester-ingestion, blueprint-harvester-ml, blueprint-harvester-search, blueprint-harvester-minio, blueprint-harvester-opensearch\n",
      "short_name_specs": "api, landing, search, ml, ingestion, processing were registered by make enclii-sync; image destination still drifts to ghcr.io/madfam-org/enclii",
      "junctions": "api.blueprint.tube -> / via Enclii junction created 2026-05-23",
      "direct_deploy_gap": "Direct Enclii deploy for the API produced a wrong-prefix image (ghcr.io/madfam-org/enclii/blueprint-harvester-api:4ae5242a) and a transient API ReplicaSet conflict; use the Roundhouse/GitOps path after registry destination reconciliation.\n"
    }
  },
  "messaging": {
    "hero_headline": "Stop guessing from roadmap decks.",
    "hero_headline_accent": "See what blueprint.tube proves today.",
    "hero_subhead": "Blueprint Harvester is a public beta for 3D-printable catalog intelligence. The live matrix below separates routed API/search/upload capabilities from processing work that still needs a green production smoke.\n",
    "pain_section_title": "What's costing you time and filament",
    "pain_section_lede": "These are the problems makers and catalog teams hit every week. We built Blueprint Harvester as the cure\u2014labeled honestly by what is live, beta, or still on the roadmap.\n",
    "superpowers_title": "Platform superpowers",
    "superpowers_lede": "Each capability is tied to our production matrix. Beta means invite access and evolving limits.\n",
    "compare_title": "Without us vs with us (today)",
    "proof_title": "Proof, not promises"
  },
  "pains": [
    {
      "id": "wrong_shape",
      "headline": "Keyword search returns the wrong shape",
      "agitation": "You open dozens of models that look nothing like the part you need.",
      "cure_capability": "geometry_similarity",
      "cure_line": "Upload-based shape search now returns a valid production response; catalog depth is the next limit."
    },
    {
      "id": "broken_mesh",
      "headline": "Downloads fail mid-print",
      "agitation": "Non-manifold meshes and bad units waste hours and filament.",
      "cure_capability": "processing_pipeline",
      "cure_line": "Processing workers are in the repo, but the production overlay keeps them quarantined until the build is healthy."
    },
    {
      "id": "print_guess",
      "headline": "You can't tell if it will print on your setup",
      "agitation": "Trial-and-error slicing burns material before you know a model is viable.",
      "cure_capability": "geometry_similarity",
      "cure_line": "Embeddings are live for upload search; printability scoring still waits on the processing rollout."
    },
    {
      "id": "scattered_sources",
      "headline": "Models are scattered across sites",
      "agitation": "No unified catalog, no consistent metadata, no single API.",
      "cure_capability": "thingiverse_ingestion",
      "cure_line": "Policy-aware harvest into one searchable catalog (Thingiverse first)."
    },
    {
      "id": "license_anxiety",
      "headline": "License and attribution are unclear",
      "agitation": "Teams fear DMCA exposure and makers lose credit when files spread.",
      "cure_capability": "compliance_dmca",
      "cure_line": "Provenance on ingest today; full DMCA workflow on the roadmap\u2014talk to us as a design partner."
    },
    {
      "id": "vendor_vaporware",
      "headline": "Vendor decks don't match production",
      "agitation": "You ship integrations against features that were never live.",
      "cure_capability": "marketing_site",
      "cure_line": "Public capability matrix synced to platform-status\u2014see the panel on this page."
    }
  ],
  "superpowers": [
    {
      "id": "geometry_dna",
      "title": "Geometry DNA",
      "blurb": "Upload-based embeddings, pgvector similarity, and a small CC0 seed catalog return valid production responses.",
      "capability": "geometry_similarity",
      "icon": "helix"
    },
    {
      "id": "mesh_intelligence",
      "title": "Mesh intelligence",
      "blurb": "Processing workers normalize units, metrics, and repair signals; rollout is held out of the active overlay.",
      "capability": "processing_pipeline",
      "icon": "mesh"
    },
    {
      "id": "printability",
      "title": "Printability signals",
      "blurb": "Embedding proof is green; public printability scoring still waits on processing pipeline rollout.",
      "capability": "geometry_similarity",
      "icon": "gauge"
    },
    {
      "id": "smart_search",
      "title": "Smart search",
      "blurb": "API search routes plus geometry filters as the beta catalog and indexing path mature.",
      "capability": "text_search",
      "icon": "search"
    },
    {
      "id": "policy_harvest",
      "title": "Policy-aware harvest",
      "blurb": "Ingest from Thingiverse with rate limits, robots respect, and provenance metadata.",
      "capability": "thingiverse_ingestion",
      "icon": "harvest"
    },
    {
      "id": "catalog_api",
      "title": "Catalog API",
      "blurb": "REST gateway routing, health, readiness, text search, and one-model upload are green in production.",
      "capability": "api_gateway",
      "icon": "api"
    },
    {
      "id": "truth_panel",
      "title": "Live truth panel",
      "blurb": "This page and /platform-status.json show exactly what is live, beta, or roadmap.",
      "capability": "marketing_site",
      "icon": "shield"
    }
  ],
  "pipeline_steps": [
    {
      "id": "ingest",
      "title": "Ingest",
      "description": "Harvest from sources with policy checks and provenance.",
      "capability": "thingiverse_ingestion"
    },
    {
      "id": "normalize",
      "title": "Normalize",
      "description": "Repair meshes, metrics, previews, and storage once processing returns to the active overlay.",
      "capability": "processing_pipeline"
    },
    {
      "id": "enrich",
      "title": "Enrich",
      "description": "Embeddings and pgvector search are green; printability signals and index depth mature with processing and ingestion.",
      "capability": "geometry_similarity"
    },
    {
      "id": "search",
      "title": "Search",
      "description": "Text and geometry similarity APIs for apps and integrators.",
      "capability": "text_search"
    }
  ],
  "personas": {
    "makers": {
      "headline": "For makers tired of wrong parts and failed prints",
      "lede": "Follow the public beta while we harden upload, shape search, and processing against production smokes.",
      "bullets": [
        "Public API health/readiness are green on api.blueprint.tube",
        "Text search route responds with JSON in production",
        "One-model upload and upload-based shape search return HTTP 200 in production",
        "Thingiverse harvest with license metadata (beta)"
      ],
      "cta_label": "Join the maker beta",
      "cta_subject": "Blueprint maker beta",
      "footnote": "Self-serve app at app.blueprint.tube is Phase 2\u2014beta is invite-only via email."
    },
    "teams": {
      "headline": "For teams building catalogs, marketplaces, and fab pipelines",
      "lede": "A routed beta API for catalog search, storage-backed upload, and upload-based shape search, with explicit blockers for processing.",
      "bullets": [
        "REST API health/readiness/search on api.blueprint.tube (beta)",
        "Geometry catalog has 8 verified CC0 seed objects with provenance metadata",
        "One-model upload and upload-based shape search are green; processing is not in active GitOps overlay"
      ],
      "cta_label": "Talk to us about API access",
      "cta_subject": "Blueprint API access",
      "footnote": "DMCA workflows, bulk sources, and API keys are roadmap\u2014partner with us early."
    }
  },
  "compare": {
    "without": [
      "Keyword-only search",
      "Unknown mesh quality before download",
      "Opaque product claims in slide decks",
      "One-off scrapers per source"
    ],
    "with": [
      {
        "text": "Geometry similarity search",
        "capability": "geometry_similarity"
      },
      {
        "text": "Processing pipeline with geometry metrics",
        "capability": "processing_pipeline"
      },
      {
        "text": "Live public capability matrix",
        "capability": "marketing_site"
      },
      {
        "text": "Policy-aware ingestion (Thingiverse first)",
        "capability": "thingiverse_ingestion"
      }
    ]
  },
  "capabilities": {
    "marketing_site": {
      "tier": "live",
      "summary": "Honest public beta landing with pain \u2192 cure narrative and live capability matrix"
    },
    "api_gateway": {
      "tier": "beta",
      "summary": "API host routed; health, readiness, geometry 404, and search smoke passed on 2026-05-27"
    },
    "geometry_upload": {
      "tier": "beta",
      "summary": "Production one-model upload returns 200 and stored uploads become searchable after API background enrichment"
    },
    "text_search": {
      "tier": "beta",
      "summary": "Search route returns 200 JSON on api.blueprint.tube; geometry catalog has a small verified seed set while indexing depth remains beta"
    },
    "geometry_similarity": {
      "tier": "beta",
      "summary": "Upload-to-embedding and stored-object by-id pgvector similarity return HTTP 200 in production; 8 CC0 seed objects have embeddings and provenance"
    },
    "thingiverse_ingestion": {
      "tier": "beta",
      "summary": "Connector has rate limits, source policy evidence gates, a bounded harvest-plan endpoint, conservative license skips, and provenance metadata; approved production harvest still pending"
    },
    "processing_pipeline": {
      "tier": "roadmap",
      "summary": "Processing code and manifests exist, but processing is quarantined from the active production overlay"
    },
    "auth_accounts": {
      "tier": "roadmap",
      "summary": "Auth service exists; Janua-aligned prod auth not wired on app host"
    },
    "compliance_dmca": {
      "tier": "roadmap",
      "summary": "Compliance service in repo; full DMCA workflow not in production overlay"
    },
    "slicing_sandbox": {
      "tier": "roadmap",
      "summary": "Slicing service in repo; not production-proven"
    },
    "multi_source_ingestion": {
      "tier": "roadmap",
      "summary": "Source registry and dozens of connectors planned"
    },
    "graphql_ingest_mutations": {
      "tier": "roadmap",
      "summary": "trigger_ingestion and process_asset return stubs"
    },
    "python_sdk": {
      "tier": "roadmap",
      "summary": "packages/sdk-python not published"
    }
  },
  "metrics": {
    "catalog_objects": 8,
    "sources_active": 1,
    "display_catalog": "Public beta \u2014 routed API/search/upload/shape-search plus 8 verified CC0 seed objects"
  },
  "conversion": {
    "primary_cta": "join_beta",
    "demo_url": "#superpowers",
    "developers_url": "#start",
    "contact_email": "hello@madfam.io"
  },
  "status_panel_rows": [
    {
      "label": "Marketing site",
      "capability": "marketing_site"
    },
    {
      "label": "API gateway",
      "capability": "api_gateway"
    },
    {
      "label": "Text search",
      "capability": "text_search"
    },
    {
      "label": "Upload",
      "capability": "geometry_upload"
    },
    {
      "label": "Processing",
      "capability": "processing_pipeline"
    },
    {
      "label": "Ingestion",
      "capability": "thingiverse_ingestion"
    }
  ]
}
