#!/usr/bin/env python3 from __future__ import annotations from pathlib import Path from PIL import Image, ImageDraw, ImageFont WIDTH = 1280 HEIGHT = 640 BACKGROUND = "#FFFFFF" INK = "#111111" MUTED = "#4B5563" ACCENT = "#D9DDE3" ROOT = Path(__file__).resolve().parents[1] OUT_DIR = ROOT / "docs" / "assets" PNG_PATH = OUT_DIR / "social-preview.png" SVG_PATH = OUT_DIR / "social-preview.svg" def font(path: str, size: int) -> ImageFont.FreeTypeFont: return ImageFont.truetype(path, size) SERIF = "/System/Library/Fonts/Supplemental/Georgia.ttf" SANS = "/System/Library/Fonts/SFNS.ttf" def draw_png() -> None: OUT_DIR.mkdir(parents=True, exist_ok=True) image = Image.new("RGB", (WIDTH, HEIGHT), BACKGROUND) draw = ImageDraw.Draw(image) title_font = font(SERIF, 74) headline_font = font(SANS, 34) body_font = font(SANS, 21) stat_font = font(SANS, 18) small_font = font(SANS, 16) x = 92 y = 82 draw.text((x, y), "YAO", fill=INK, font=title_font) y += 90 draw.text((x, y), "Yielding AI Outcomes", fill=INK, font=headline_font) y += 60 draw.text( (x, y), "A rigorous engineering, evaluation, governance, and portability system", fill=INK, font=body_font, ) y += 34 draw.text( (x, y), "for reusable agent skills.", fill=INK, font=body_font, ) y += 62 draw.line((x, y, WIDTH - 92, y), fill=ACCENT, width=2) y += 34 score_box_w = 250 score_box_h = 118 draw.rounded_rectangle( (x, y, x + score_box_w, y + score_box_h), radius=18, outline=ACCENT, width=2, fill=BACKGROUND, ) draw.text((x + 22, y + 18), "Weighted Score", fill=MUTED, font=stat_font) draw.text((x + 22, y + 48), "91.5", fill=INK, font=font(SERIF, 42)) draw.text((x + 124, y + 62), "/ 100", fill=MUTED, font=stat_font) draw.text( (x + 22, y + 88), "Method 9.5 · Eval 9.5 · Governance 9.5", fill=MUTED, font=small_font, ) pillar_x = x + score_box_w + 36 pillar_y = y + 4 pillars = [ ("Engineering", "Unified CLI, CI, validation, reporting, and packaging."), ("Evaluation", "Holdouts, route confusion, judge-backed blind evals."), ("Governance", "Lifecycle, maturity, promotion, and review evidence."), ("Portability", "Neutral metadata, adapters, contracts, and degradation."), ] box_w = 400 box_h = 68 gap_x = 24 gap_y = 18 for idx, (label, desc) in enumerate(pillars): col = idx % 2 row = idx // 2 bx = pillar_x + col * (box_w + gap_x) by = pillar_y + row * (box_h + gap_y) draw.rounded_rectangle( (bx, by, bx + box_w, by + box_h), radius=16, outline=ACCENT, width=2, fill=BACKGROUND, ) draw.text((bx + 18, by + 14), label, fill=INK, font=stat_font) draw.text((bx + 18, by + 38), desc, fill=MUTED, font=small_font) footer_y = HEIGHT - 84 draw.line((x, footer_y - 26, WIDTH - 92, footer_y - 26), fill=ACCENT, width=2) draw.text( (x, footer_y), "Reusable agent skills with explicit boundaries, strict evaluation, visible governance, and local reliability.", fill=MUTED, font=small_font, ) image.save(PNG_PATH) def draw_svg() -> None: svg = f""" YAO Yielding AI Outcomes A rigorous engineering, evaluation, governance, and portability system for reusable agent skills. Weighted Score 91.5 / 100 Method 9.5 · Eval 9.5 · Governance 9.5 Engineering Unified CLI, CI, validation, reporting, and packaging. Evaluation Holdouts, route confusion, judge-backed blind evals. Governance Lifecycle, maturity, promotion, and review evidence. Portability Neutral metadata, adapters, contracts, and degradation. Reusable agent skills with explicit boundaries, strict evaluation, visible governance, and local reliability. """ SVG_PATH.write_text(svg, encoding="utf-8") def main() -> None: draw_png() draw_svg() print(f"Wrote {PNG_PATH}") print(f"Wrote {SVG_PATH}") if __name__ == "__main__": main()