mcpField
S
substack-ui-skills

substack-ui-skills

github.com/ihlamuryデザイン・UI102242 回インストール37 週間前に更新
リポジトリ

substack-ui-skills について

substack-ui-skillsは、Substack風のインターフェースを構築するAIエージェント向けの設計制約です。色、タイポグラフィ、レイアウト、操作、アニメーション、パフォーマンスの指針をまとめています。

主な機能

  1. 01Substack風インターフェースの指針
  2. 02色とコントラストのルール
  3. 03Interのタイポグラフィ仕様
  4. 044px間隔とボーダーの尺度
  5. 05操作性とアクセシビリティ要件
  6. 06アニメーションと性能の制約

活用シーン

  1. 01Substack風デザインシステムの構築
  2. 02ライトモードの画面ルールの適用
  3. 03UIのアクセシビリティと操作性の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ihlamury/design-skills --skill substack-ui-skills

インストール後、Claude Code で/substack-ui-skillsを入力して読み込まれたか確認します。

同梱ファイルmetadata.json

詳細

Substack UI スキル

AI エージェントで Substack スタイルのインターフェースを構築するための、独自の制約です。

適用するタイミング

以下の場合に、これらのガイドラインを参照してください。

  • ライトモードのインターフェースを構築する場合
  • Substack に着想を得たデザインシステムを作成する場合
  • Inter フォントと 4px グリッドを使った UI を実装する場合

色

  • 主なサーフェスには明るい背景を使用することを推奨します
  • ページの背景(surface-base)には #FFFFFF を使用する必要があります
  • カラーパレットを絞ることを推奨します(現在、15 色が検出されています)
  • アクセシビリティのため、テキストのコントラスト比を少なくとも 4.5:1 に保つ必要があります
セマンティックトークン
トークンHEXRGB用途
surface-base#FFFFFFrgb(255,255,255)ページの背景
surface-raised#FC5013rgb(252,80,19)カード、モーダル、浮き上がったサーフェス
surface-overlay#E9E9E9rgb(233,233,233)オーバーレイ、ツールチップ、ドロップダウン
text-primary#999999rgb(153,153,153)見出し、本文テキスト
text-2#515151rgb(81,81,81)追加テキスト
text-secondary#717171rgb(113,113,113)補助テキスト、控えめなテキスト
border-default#E7E7E7rgb(231,231,231)控えめな境界線、区切り線
destructive#E26739rgb(226,103,57)エラー状態、削除アクション

タイポグラフィ

  • 基本のフォントファミリーには Inter を使用する必要があります
  • 一貫性を保つため、フォントファミリーを1種類にすることを推奨します
  • 主見出しには 36px / semi_bold を使用する必要があります
  • 本文テキストには 17px / 500 を使用する必要があります
  • フォントウェイトを絞ることを推奨します(現在、4種類が検出されています)
  • 見出しには text-balance、本文テキストには text-pretty を使用する必要があります
  • 数値データには tabular-nums を使用することを推奨します
  • 明示的な依頼がない限り、字間を変更しないでください
テキストスタイル
スタイルフォントサイズウェイト色件数
heading-1Inter36pxsemi_bold#BCDBD71
text-19pxInter19pxsemi_bold#4C4D4D1
bodyInter17px500#5353531
body-secondaryInter16px400#7171711
body-secondaryInter16px400#6E6E6F1
body-secondaryInter16px400#F5C0A31
body-secondaryInter15px400#9696962
body-secondaryInter15px500#5151511
body-secondaryInter15px400#6F6F6F1
body-secondaryInter15px500#5D5D5D1
タイポグラフィの参照

フォントファミリー:

  • Inter(43回使用)

フォントサイズ: 5px, 9px, 10px, 11px, 12px, 13px, 14px, 15px, 16px, 17px, 19px, 36px

余白

  • 余白には 4px グリッドを使用する必要があります
  • スケールの値(1px, 3px, 4px, 5px, 8px, 9px, 10px, 13px)を使用することを推奨します
  • 要素間のデフォルトの間隔には 4px を使用することを推奨します
  • 任意の余白値を使用しないでください(デザインスケールを使用してください)
  • コンテナー内のパディングを一貫させることを推奨します

境界線

  • スケールの border-radius(3px, 4px, 6px, 7px, 8px, 9px, 16px, 18px)を使用する必要があります
  • 境界線の幅には一貫して 1px を使用する必要があります
  • デフォルトの border-radius には 9px を使用することを推奨します
  • 任意の border-radius 値を使用しないでください(デザインスケールを使用してください)
  • 要素の分離には控えめな境界線(1px)を使用することを推奨します
Border Radius の参照

スケール: 3px, 4px, 6px, 7px, 8px, 9px, 16px, 18px

レイアウト

  • 基準ビューポート幅 1920px 向けにデザインする必要があります
  • 一貫した要素幅(12px, 16px, 18px, 17px, 22px)を使用することを推奨します
  • 明確な階層を持つ、テキスト中心のレイアウトを維持することを推奨します
  • h-screen は使用せず、ビューポート全体の高さには h-dvh を使用してください
  • 固定要素では safe-area-inset を考慮する必要があります
  • 正方形の要素には w-* + h-* の代わりに size-* を使用することを推奨します
検出されたレイアウトパターン
  • メインコンテンツ:幅:1920px、高さ:1080px

コンポーネント

  • 入力フィールドの高さには 0px を使用する必要があります
ボタン
バリアント背景テキスト境界線高さ角丸
ゴーストtransparent#515151なし--
入力
  • 高さ:0px

インタラクティブ状態

フォーカス
  • アクセントカラー(#5E6AD2)を使った 2px のアウトラインを使用する必要があります
  • 2px の outline-offset を使用する必要があります
  • フォーカスインジケーターを削除しないでください
ホバー時
  • ボタン(プライマリ):背景を10%明るくします
  • ボタン(セカンダリ):背景に #FC5013 を使用します
  • リスト項目:背景に #FC5013 を使用します
無効状態
  • 必ず opacity: 0.5 を使用します
  • 必ず cursor: not-allowed を使用します

インタラクション

  • 破壊的または取り消し不能な操作には、必ず AlertDialog を使用します
  • ローディング状態には、構造が分かるスケルトンを使用することが望ましいです
  • エラーは操作が発生する場所の近くに必ず表示します
  • input 要素や textarea 要素への貼り付けを決してブロックしません
  • アイコンのみのボタンには、必ず aria-label を追加します

アニメーション

  • 明示的に要求されていない限り、アニメーションを追加しません
  • コンポジターのプロパティ(transform、opacity)のみをアニメーションさせます
  • レイアウトプロパティ(width、height、top、left、margin、padding)をアニメーションさせません
  • 入場アニメーションには ease-out を使用することが望ましいです
  • インタラクションのフィードバックは 200ms を超えないようにします
  • prefers-reduced-motion を尊重することが望ましいです

パフォーマンス

  • 大きな blur() や backdrop-filter の領域をアニメーションさせません
  • アニメーションがアクティブな間以外は will-change を適用しません
  • レンダリングロジックで表現できる処理に useEffect を使用しません

コメント