デザイン&モーション · nexu-io/html-anything

social-x-post-card

リアルなX(旧Twitter)ポストカード+エンゲージメント指標(いいね/リポスト/インプレッション)、動画オーバーレイや画像カード共有に最適化

L3 ネットワーク · ドメインとキー範囲を宣言V1 コミット固定ネットワーク通信Dual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(仓库根 LICENSE = Apache License 2.0;GitHub API spdx_id=Apache-2.0)Commit 553ed98c28
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

本テンプレートは「フォルダ=テンプレート」構造における純粋なデータです。SKILL.mdはセレクター用のYAML frontmatterを備え、本文はエージェント向けのレイアウト指示で構成されています。リポジトリは個々のテンプレート用コードを一切持たず、テンプレートの追加はフォルダの新規作成のみで完了します。

next/src/lib/templates/loader.ts
SKILL.md — frontmatter (id, scenario, tags, …) + prompt body
loader.tsのファイル先頭コメントにディレクトリ規約が明記されています。frontmatterはプロセス内正規表現でパースされ(YAML依存関係なし)、本文はプロンプト本文としてそのまま抽出されます。フロントエンドには送信されません(「Body is excluded so we can return the entire registry in one cheap fetch without shipping prompt text to the browser.」)。

実行時はホスト側が本テンプレートの本文を共有デザイン指示とユーザーコンテンツの間に挟み込み、1つのプロンプトとして結合します。テンプレートの「インテリジェンス」はすべてこの自然言語にあり、実行可能コードは含まれません。

next/src/lib/templates/shared.ts
return `${SHARED_DESIGN_DIRECTIVES} ${opts.body.trim()}
assemblePromptの戻り値は「共有デザイン指示 + テンプレート本文 + 【入力形式】 + 【ユーザーコンテンツ】」となります。共有セクション(同一ファイル内のSHARED_DESIGN_DIRECTIVES)は、単一ファイルHTML、Tailwind/フォントCDN、コンテンツ駆動型の数量、ファイルシステムツールの使用禁止などの厳格な要件を担当し、全テンプレート共通であり本テンプレート固有のものではありません。

ホストの/api/convertが本テンプレートをロード後、これらのテキストをローカルでログイン済みのcoding-agent CLIに渡し、stdoutのみをHTMLとしてストリーミング回収します。テンプレート自体は通信を行わず、認証情報を読み取らず、ファイル書き込みもしません。

next/src/app/api/convert/route.ts
prompt = assemblePrompt({ body: skill.body, content, format });
同じルートがその後invokeAgent({ … })を呼び出してCLI(ホストのPATHから検出されたclaude / codex / cursor-agentなど)を起動します。これに伴う共有指示にも「**Write / Edit / MultiEdit / Bash / Create / いかなるファイルシステムツールの使用も禁止**」と明記されています。

テンプレートに付属するexample.htmlは「事前レンダリングされたサンプル」であり、プレビューAPIからそのまま返され、セレクターやギャラリーのiframeに読み込まれます。テンプレートカードに視覚的なプレビューが存在するかどうかを決定するもので、コンテンツ生成には関与しません。

next/src/app/api/templates/[id]/preview/route.ts
Returns the skill's `example.html` verbatim so it can be loaded into an
プレビューはskill idごとにキャッシュされます(Cache-Control: public, max-age=300)。フロントエンドはプレビューパネルのiframeにsandbox="allow-scripts allow-same-origin"を付与しています(ホスト側の実装であり、本テンプレートからは制御不能)。

frontmatterのフィールドはセレクターのメタデータへと順次マッピングされ(featuredは全体ソート順、recommendedは上部「★ おすすめ」グループへの登録、example_*はサンプルカードの文面生成)、カテゴリやシナリオフィルターでの表示位置を決定します。

next/src/lib/templates/loader.ts
if (typeof fm.featured === "number") meta.featured = fm.featured;
fmToMetaはcategory/scenario/aspectHint/tagsを直接SkillMetaに転送します。exampleブロックはexample_idまたはexample.{md,html}が存在する場合に生成されます(id/name/format/tagline/desc + 任意のsource)。これらのフィールドは表示とソートにのみ影響し、生成の動作には影響しません。

本テンプレートの生成能力はすべて自身の本文によって実現されています。social-x-post-card/SKILL.mdはレイアウト、配色、フォント、コンテンツ規律のみを記述しており、エージェントにツールの実行、API取得、外部データの読み取りを促す指示は一行もありません。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
【模板: X (Twitter) 帖子卡】
skillディレクトリには計2〜3個のファイル(SKILL.md + example.html [+ example.md])のみが存在し、scripts/references/データファイルはありません。example.htmlは同一テンプレートの手動サンプル生成物にすぎません(internal_assetsを参照)。

ツイートやユーザーのキラーフレーズを極めて再現度の高いXポストカードとしてレンダリングすることを意図しており、hyperframesのx-postから着想を得た旨が明記されています。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
【意图】把一段推文内容 (或用户的金句) 渲染成一张拟真度极高的 X 帖子卡片, 用于视频叠加、推特发图、知识沉淀。Inspired by hyperframes x-post。

カード構成はアイコン + ユーザー名 + handle + 認証ブルーバッジ + 投稿時間で構成され、アイコンにはCSSグラデーションのプレースホルダーを使用することが明確に要求されています。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
- 顶部 row: 头像 (48×48 圆形, 用 CSS gradient 占位) + 用户名 + handle `@username` + verified 蓝勾 + 时间 (mono, 12px, 灰)。

エンゲージメント指標はプラットフォームの慣習に沿ってフォーマットすることが求められ、生の整数の表示は禁止されています。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
- 数字格式化: 1.2K / 4.5M (不要原始 1234)。

コンテンツ規律:必ずユーザー入力に基づく必要があり、ツイートの捏造は禁止されています。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
- 内容必须来自用户输入, 不能编造推文。

ツイート以外の入力は自動的にキラーフレーズに変換され、Xの280文字制限が適用されます。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
- 若用户输入是数据 → 自动总结成一句"金句"推文 (≤ 280 字符)。

アセット制約:単一ファイルHTML、インラインSVGアイコン、外部画像URLの完全禁止。

next/src/lib/templates/skills/social-x-post-card/SKILL.md
- 单文件 HTML; icon 内联 SVG; 不要任何外部图片 URL。

サンプル成果物ではインラインSVGを用いてXのブルーバッジやエンゲージメントアイコンを再現し、エンゲージメント数値にはK表記のフォーマットが施されています。

next/src/lib/templates/skills/social-x-post-card/example.html
<span style="color:#f91880">12.3K</span>

2コア機能

01リアルなXポストカード(アイコン / handle / ブルーバッジ / 投稿時間の上部行)
02エンゲージメント指標行(返信 / リポスト / 引用 / いいね、公式スタイルのインラインSVGアイコン)
03数値のフォーマット(1.2K / 4.5M表記、生の整数値は非表示)
04ライト・ダークのデュアル配色(ダークは動画オーバーレイに推奨)
05オプションの引用カードおよび16:9画像プレースホルダー(CSSグラデーション、外部リンク不使用)
06データ入力 → 280文字以下のキラーフレーズポスト
07サンプル成果物:キラーフレーズポスト + 12.3Kいいね / 482返信 / 2.1Mインプレッション

3外部依存関係

KindDependency / Endpoint
networkTailwind CDN(仅出现在产物示例 example.html,运行时不要求)
networkGoogle Fonts(仅出现在产物示例 example.html)
network灵感出处标注(frontmatter example_source_url,非运行时调用)
cli本地 coding-agent CLI(宿主提供,模板自身不调用)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
アクセス可能ドメインとキー範囲を宣言
管理者向け
最小権限のキー、リクエストログを保持
判定根拠(ファイルパスと抜粋)
  • 网络端点: 外部ネットワークアクセスの宣言: cdn.tailwindcss.com(example.htmlの<script src>、セレクターのプレビューやサンプルのローカル表示時にブラウザからリクエスト)
監査ノート: 判定対象=本skillディレクトリ(SKILL.md + example.html [+ example.md]):組み込みスクリプトなし、認証情報読み取りなし、ディスク書き込み指示なし、実行時の外部エンドポイント要求なし。本文はレイアウト/配色/フォントファミリー名およびコンテンツ規律のみを規定しており、フォント名はリクエストを構成しません。ディレクトリ内に実際に現れる外部リンクはすべて「成果物サンプル」の性質を持つものであり、cdn.tailwindcss.com(example.html 6行目 <script src>)、fonts.googleapis.com(example.html 7行目 <link>、Inter + Noto Sans SC)、hyperframes.heygen.com(frontmatterの出典表記)と自己証明されています。第4バッチの判定基準(エンドポイントが成果物サンプル/出典表記にのみ現れる場合はgreen)に基づき、安全区分に影響しません。ホスト側の挙動(loader.tsによるディスク読み込み、assemblePromptによるプロンプト構築、agents/invoke.tsによるローカルCLI起動、プレビューiframeのsandbox="allow-scripts allow-same-origin")はverdict.risksに記載されており、判定の根拠とはなりません。

5二重目の独立検証

  • [ok] skill 目录的脚本 / 网络 / 凭证 / 写盘面 — 目录仅 SKILL.md / example.html / example.md 3 个文件,无 scripts/references/数据目录;token 扫描(curl / wget / fetch / exec / spawn / process.env / API_KEY / token / secret / write / save / delete)在该目录的 SKILL.md 中零命中;无自带可执行脚本。
  • [ok] 运行时链路复核 — 重读 loader.ts / shared.ts / app/api/convert/route.ts / app/api/templates/[id]/preview/route.ts:模板正文只作为 prompt body 被 assemblePrompt 拼装,宿主 spawn 本地 CLI 并捕获 stdout;模板不参与任何执行。
  • [ok] commit 与元数据 — 工作副本 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(=任务表 pin 的 full 40 位);GitHub API nexu-io/html-anything:stars 8827、license spdx Apache-2.0、pushed_at 2026-09-15T03:36:24Z(与本地 HEAD 提交时间 2026-09-15 11:36:24 +0800 一致)。
  • [discrepancy] README 与源码的 frontmatter schema 漂移(仓库级) — README 第 213 / 217 / 468 行称模板 frontmatter 必须含 mode · scenario · surface · preview · design_system;但在 next/src/lib/templates/skills/ 下 '^mode:'、'^surface:'、'^design_system:' 全部零命中,实际字段是 category / scenario / aspect_hint / featured / recommended + example_*(loader.ts 的 SkillFrontmatter)。文档滞后于代码,不影响本模板运行,但照 README 新写模板会踩空。
  • [ok] frontmatter 元数据映射 — loader.ts fmToMeta 逐字段映射 zhName / enName / emoji / description / category / scenario / aspectHint / tags + featured / recommended + example 卡;本模板取自 SKILL.md 的实际取值与之相符。
  • [ok] example.html 与 SKILL.md 的一致性 — 蓝勾与四个互动图标均为内联 SVG(fill="#1d9bf0" 等),互动数字已格式化(12.3K / 482 / 2.1M),符合正文「数字格式化」与「icon 内联 SVG」两条。
  • [ok] 端点扫描(目录内) — 3 处:cdn.tailwindcss.com、fonts.googleapis.com(均在 example.html)+ frontmatter 的 hyperframes.heygen.com 出处标注;SKILL.md 正文与 example.md 无其它 URL。
  • [ok] 「不要任何外部图片 URL」自证 — example.html 内无 img/图片 URL:头像与图片位按正文用 CSS 渐变占位,图标为内联 SVG。

6結論

  • プラットフォーム規約をテンプレートに組み込み(280文字制限、1.2K/4.5M表記)、本物のツイートに近い仕上がりを実現
  • 明確なコンテンツ規律:ユーザー入力に基づくことが必須で、ポストの捏造を防止
  • 高い入力互換性:生データであっても280文字以下のキラーフレーズに要約可能
  • 自己完結型の成果物:ブルーバッジや操作アイコンはインラインSVG、画像枠はCSSグラデーションで外部画像不使用
  • READMEにて連携スクレイピングツールの推奨フロー(TweetClawでデータ取得 → 本テンプレートで描画)を提示し、責務境界が明確
  • 最適な用途: 名言や意見をX風画像カード化してSNS共有や動画オーバーレイに活用したい場合や、公開済みポストを画像として保存したい場合に最適です。また、「データ → キラーフレーズ」の自動要約を伴うコンテンツ運用にも適しています。
    不向きな用途: リアルタイムのツイートデータ取得を求める用途(本テンプレートはXのスクレイピングやAPI呼び出しを行いません。READMEでは外部ツールの利用を推奨)、公式ブランド素材の作成(ブルーバッジやエンゲージメント数値はシミュレーション要素)、長文コンテンツ(ポスト形式のため280文字の制約あり)には適していません。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload social-x-post-card.tar.gz
    sha256: d347f9e7707442ba…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.