Files
Andrew Yim ba88247496 Implement ourdigital-presales-seo skill
SKILL.md orchestration (8 gated stages), references (rate_card.yaml,
findings_to_service rubric, competitor sets), findings.schema.json contract,
and scripts: kg_query.py (generalized KG examination), estimate.py
(findings→rate-card 견적 md/xlsx/json), build_deck.py (9-slide branded PPTX),
render_pdf.sh (Korean PDF via headless Chrome), plus client_brief.html template.

Validated on Sono Hotels & Resorts findings: estimate OD-2026-001
(23-47M KRW) and a 9-slide deck generated cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 23:10:53 +09:00

100 lines
3.4 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ourdigital-presales-seo findings contract",
"description": "Shared artifact populated by analysis stages 1-4 and consumed by estimate.py (5) and build_deck.py (6). Generators must never re-crawl; they read this file.",
"type": "object",
"required": ["prospect", "discovery", "technical", "entity", "findings"],
"properties": {
"prospect": {
"type": "object",
"required": ["name", "domain"],
"properties": {
"name": {"type": "string"},
"domain": {"type": "string"},
"aliases": {"type": "array", "items": {"type": "string"}},
"vertical": {"type": "string"},
"audit_date": {"type": "string", "description": "YYYY-MM-DD"},
"account_code": {"type": "string"}
}
},
"discovery": {
"type": "object",
"properties": {
"sitemap_status": {"type": "integer"},
"robots_sitemap_declared": {"type": "boolean"},
"discoverable_urls": {"type": "integer"},
"estimated_pages": {"type": "string"},
"url_hygiene": {"type": "array", "items": {"type": "string"}}
}
},
"technical": {
"type": "object",
"properties": {
"cwv": {
"type": "object",
"properties": {
"lcp_ms": {"type": "number"}, "cls": {"type": "number"},
"ttfb_ms": {"type": "number"}, "perf": {"type": "number"}
}
},
"schema": {
"type": "object",
"properties": {
"org": {"type": "string", "enum": ["bare", "complete", "none"]},
"hotel_on_property": {"type": "boolean"}
}
},
"meta_dupe": {"type": "boolean"},
"title_i18n_mismatch": {"type": "boolean"},
"hreflang": {"type": "string", "enum": ["complete", "incomplete", "none"]}
}
},
"entity": {
"type": "object",
"properties": {
"panel": {"type": "string", "enum": ["company", "hotel", "none"]},
"name_split": {"type": "boolean"},
"legacy_contamination": {"type": "boolean"},
"subbrands_with_entity": {"type": "integer"},
"subbrands_total": {"type": "integer"},
"properties_with_entity": {"type": "integer"},
"properties_total": {"type": "integer"},
"wikipedia": {"type": "boolean"},
"competitor_benchmark": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"}, "score": {"type": "number"},
"type": {"type": "string"}, "wikipedia": {"type": "boolean"}
}
}
}
}
},
"measurement": {
"type": "object",
"properties": {
"gsc_access": {"type": "boolean"},
"ga4_access": {"type": "boolean"},
"tag_gaps": {"type": "boolean"}
}
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "class", "severity"],
"properties": {
"id": {"type": "string"},
"class": {"type": "string", "description": "crawlability|cwv|schema_entity|subbrand_entity|local|measurement|onpage"},
"severity": {"type": "string", "enum": ["critical", "high", "medium", "low"]},
"title_ko": {"type": "string"},
"evidence": {"type": "string"},
"recommended_services": {"type": "array", "items": {"type": "string"}}
}
}
}
}
}