From 6a46d57cef80abf82147866ad35ff4083beb032b Mon Sep 17 00:00:00 2001 From: yaojingang Date: Thu, 23 Apr 2026 17:03:37 +0800 Subject: [PATCH] feat: add social preview asset --- docs/assets/social-preview.png | Bin 0 -> 48266 bytes docs/assets/social-preview.svg | 33 ++++++ scripts/render_social_preview.py | 171 +++++++++++++++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 docs/assets/social-preview.png create mode 100644 docs/assets/social-preview.svg create mode 100644 scripts/render_social_preview.py diff --git a/docs/assets/social-preview.png b/docs/assets/social-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..3d65afa532ac464e2c2c19fe8435b3726c6081e7 GIT binary patch literal 48266 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 R(?9J4repX=+3ow!{vDHc%b@@O literal 0 HcmV?d00001 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()