diff --git a/docs/assets/social-preview.png b/docs/assets/social-preview.png new file mode 100644 index 0000000..3d65afa Binary files /dev/null and b/docs/assets/social-preview.png differ diff --git a/docs/assets/social-preview.svg b/docs/assets/social-preview.svg new file mode 100644 index 0000000..efcda6b --- /dev/null +++ b/docs/assets/social-preview.svg @@ -0,0 +1,33 @@ + + + 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. + diff --git a/scripts/render_social_preview.py b/scripts/render_social_preview.py new file mode 100644 index 0000000..237b113 --- /dev/null +++ b/scripts/render_social_preview.py @@ -0,0 +1,171 @@ +#!/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()