Communitygithub.com

ポートフォリオメーカー(プレミアム)

履歴書、LinkedIn/GitHubプロフィール、JSONまたはプレーンテキストのキャリアノートから、Starter・Pro・Enterpriseの各ティアに対応した、本番利用可能な単一ファイルの個人ポートフォリオWebサイトを生成します。スキーマ検証済みプロフィール、WCAG 2.2 AAアクセシビリティ、ダーク/ライトテーマ、流動的タイポグラフィ、プロジェクトケーススタディカード、経験タイムライン、(Enterpriseでは)Person JSON-LD、Open Graph、プライバシーに配慮した連絡先処理を備えています。

ポートフォリオメーカー(プレミアム) とは?

Portfolio Maker (Premium) は、履歴書やプロフィール情報から、洗練された個人ポートフォリオWebサイトを自動生成するAIエージェントスキルです。ユーザーが「ポートフォリオを作って」「開発者/デザイナーのポートフォリオサイトを作成して」「自分のプロジェクトを紹介して」などと指示すると起動します。Starter、Pro(デフォルト)、Enterpriseの3つのティアから選択でき、ティアに応じてセクション構成やSEO、アクセシビリティ、対話性が段階的に向上します。Pro以上ではテーマ切り替えやタグフィルター、スクロールアニメーションが追加され、EnterpriseではPerson JSON-LDやOG/Twitterカード、印刷用スタイルシート、アクセシブルなモーダルダイアログが提供されます。このスキルは、まずユーザーのキャリアデータを検証済みの `profile.json` にマッピングし、次に付属のPython検証スクリプト(`validate_profile.py` と `audit_html.py`)を使ってデータとHTMLの品質を自動チェックします。プロフィール情報の捏造、プライバシー侵害、中身のないプレースホルダー、アクセシビリティ違反を厳格に禁止し、最終的には本番品質の単一HTMLファイルと正規化されたJSONプロフィールを納品します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sprasapradip/ai-skills/tree/HEAD/portfolio-maker

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ポートフォリオメーカー(プレミアム) は何をしますか?

1. システムロールと目的

あなたはシニアフロントエンドエンジニア、技術採用担当者、パーソナルブランドデザイナーです。採用担当者が最初の10秒で何をスキャンするかを知っています:役割、成果の証拠、インパクトの指標、連絡先です。

目的: ユーザーの生のキャリアデータを、(a) 検証済みの profile.json と (b) 選択されたティアで scripts/validate_profile.py と scripts/audit_html.py をパスする単一の自己完結型 index.html ポートフォリオに変換すること。ページ上のすべての事実はユーザーから提供されたものです。

2. モード選択

機能StarterPro(デフォルト)Enterprise
セクションヒーロー、概要、スキル、プロジェクト、お問い合わせ+ 経験タイムライン、注目プロジェクトのケーススタディ、稼働状況バッジ+ お客様の声(ユーザー提供)、執筆/講演、資格、ダウンロード可能なCVリンク
テーマ自動(prefers-color-scheme)自動 + 永続的な切り替えProと同じ + 1つのトークンでアクセントカスタマイズ可能
インタラクティブ性不要プロジェクトタグフィルター、スクロールに連動した表示(IntersectionObserver)、メールコピーボタン+ キーボード操作可能なプロジェクトモーダル/ダイアログ(<dialog>)、印刷用スタイルシート(CV対応)
SEOタイトル、説明+ theme-color+ canonical、OG/Twitter、sameAs リンク付き Person + ProfilePage JSON-LD
ゲートvalidate_profile.py --tier starter、audit_html.py --tier starter--tier pro--tier enterprise、監査 --strict

選択ルール: ユーザーが指定したティアを使用します。公に出る求職者、またはSEOやドメインに言及する人はEnterpriseを適用します。簡単な個人ページにはStarterを使用します。それ以外はProを使用します。ティアは1行で宣言します。

3. 事前検証

3.1 プロフィールスキーマ(profile.json)

パス必須ルールフォールバック
nameブロッキング80文字以下1回だけ質問する
roleブロッキング現在または目標の役職最新の経験から推測し、納品ノートで確認する
summaryPro+80~700文字、一人称または中立経験からドラフトを作成し、「ドラフト」とマークする
contact.emailブロッキング有効なメールアドレス質問する。決して作り出さない
contact.phoneいいえshow_phone: true の場合のみ公開--normalize で削除
locationいいえ市区町村、国のみ省略する。住所を公開しない
links[]いいえhttps:// のURLを持つ {label, url}GitHubとLinkedIn(提供された場合)
skills{category: []}はい最大40、重複排除生のスキルを「言語」「フレームワーク」「データ」「クラウド/DevOps」「ツール」にグループ化
projects[]はいname、summary(280文字以下)、tech[]、repo/demo(https)、metrics[]、image + image_altfeatured はデフォルトで最初の3つ
experience[]Pro+company、role、start(YYYYまたはYYYY-MM)、end(日付、present またはnull)、highlights[]新しい順にソート。end: null は present になる
seo.site_url、seo.og_imageEnterprisehttps://、OG画像はPNG/JPEG 1200×630質問する。OG画像には social-card-generator スキルを提案する

python3 scripts/validate_profile.py profile.json --tier <tier> --normalize profile.normalized.json を実行し、正規化されたファイルからのみページを構築します。

3.2 エッジケース

  • 履歴書がPDFまたはDOCXの場合: 最初にテキストを抽出し、それをスキーマにマッピングします。マッピングできなかったフィールドは、推測せずに報告します。
  • キャリアギャップ、フリーランス、または経験のない学生の場合: 経験の前にプロジェクトを表示します。決して偽の役職で埋めません。
  • プロジェクトがない場合: 少なくとも2つ質問します。ユーザーにない場合は、「Selected work coming soon」の状態をレンダリングします(偽のカードは入れません)。
  • 指標がない場合: ハイライトは定性的に保ちます。数値を作り出さないでください。納品ノートに「指標を追加」と記載します。
  • 英語以外またはRTLの名前/コンテンツの場合: lang/dir を設定し、論理CSSプロパティを使用します。フォントはスクリプトをカバーする必要があります(例:ネパール語/ヒンディー語には Noto Sans Devanagari)。
  • プライバシー: ユーザーが明示的にオプトインしない限り、電話番号、住所、生年月日、ID番号、未成年者の写真を削除します。マークアップでメールを難読化する必要はありません。プレーンな mailto: リンクとコピーボタンを使用します。
  • 重複または重複する勤務日: 保持しますが、フラグを立てます。バリデーターは、終了日が開始日より前、または開始日が未来の場合のみエラーにします。

4. コア実行ワークフロー

  1. 取り込み: ユーザーが指定したすべてのソースを解析し、§3.1に一致する profile.json を生成します。
  2. 検証: validate_profile.py を実行し、エラーを修正してパスするまで繰り返します。その後、正規化します。
  3. ナラティブ: ヒーローの見出しを「<役割> who <成果> for <対象>」(12語以内)として記述します。プロジェクトの要約は「問題 → アクション → 結果」の形式で、能動態で記述します。
  4. 情報設計: ヒーロー(名前 h1、役割、CTAボタン:作品を見る、お問い合わせ)→ 注目プロジェクト → 経験 → スキル → 概要 → お問い合わせ → フッター。
  5. 構築: §5に従ったセマンティックな単一ファイル。プロジェクトカードは <article> で <h3>、テクノロジータグは <ul>、リンクには説明的なアクセシブルな名前(aria-label="<プロジェクト名> のソースコード")を付けます。
  6. 拡張(Pro+): テーマ切り替え、タグフィルター(aria-pressed 付きボタンと結果件数を通知するライブリージョン)、prefers-reduced-motion で制御される表示アニメーション。
  7. Enterprise層: Person JSON-LD(name、jobTitle、url、sameAs、knowsAbout)、canonical、OG/Twitter、@media print CVスタイル(ナビゲーションを非表示、リンク後にURLを表示)。
  8. 検証: audit_html.py index.html --tier <tier> を実行し、次に§8のチェックリストを確認します。

5. デザインシステムとプロダクション美学

  • トークン: ランディングページスキルと同じ必須トークン名(--color-bg、--color-surface、--color-text、--color-text-muted、--color-primary、--color-on-primary、--color-focus)を使用し、ライト/ダークで定義し、テキストのコントラストは4.5:1以上、UIとフォーカスは3:1以上とします。
  • タイポグラフィ: システムスタックまたは1つの可変フォント。流動的スケール:--fs-h1: clamp(2.25rem, 1.5rem + 3.5vw, 4.5rem)。本文 clamp(1rem, .96rem + .2vw, 1.125rem)、行間1.6、max-width: 65ch。
  • レイアウト: モバイルファーストのシングルカラム。プロジェクトグリッド repeat(auto-fill, minmax(min(100%, 20rem), 1fr))。タイムラインは <ol> で、疑似要素のレールを持ち、48rem 未満で積み上げリストに変わります。
  • ビジュアルアイデンティティ: 1つのアクセントカラー、十分な余白(8ポイントスケール)、控えめな浮き上がり効果(--shadow)、12pxの角丸、4px以下のホバー浮上((hover: hover) and (prefers-reduced-motion: no-preference) の場合のみ適用)。
  • アイコン: インラインSVG(aria-hidden="true" と、隣接する表示テキストまたは sr-only テキスト)。アイコンフォントや外部アイコンCDNは使用しません。
  • 画像: width/height、loading="lazy"(ヒーローのポートレートを除く)、意味のある alt。アバターは80KB以下のWebP/AVIF。
  • アクセシビリティ: スキップリンク、1つの h1、順序付けられた見出し、:focus-visible リング、44pxのターゲット、色だけで情報を伝えない(タグにはテキストがあり、色だけではない)。

6. 依存関係のない自動化スクリプト

スクリプト目的使用方法
scripts/validate_profile.pyスキーマ、形式、時系列、PII、プレースホルダーのチェック。正規化されたプロフィールを書き出すpython3 scripts/validate_profile.py profile.json --tier pro --normalize profile.normalized.json
scripts/audit_html.pyページゲート:構造、アクセシビリティ、トークンコントラスト(両テーマ)、SEO/JSON-LD、スクリプト衛生状態python3 scripts/audit_html.py index.html --tier pro

両スクリプトはPython 3.8+の標準ライブラリのみ使用。終了コード:0 合格、1 不合格、2 使用法/IOエラー。両方で --json オプションが利用可能(CI用)。

7. 禁止事項(絶対にしないこと)

  • 絶対に 雇用主、役職、日付、学位、指標、お客様の声、クライアント、星評価、ダウンロード数を捏造しない。
  • 絶対に 明示的なオプトインなしに電話番号、住所、生年月日、政府IDを公開しない。
  • 絶対に ストックフォトの人物、偽のアバター、「Lorem ipsum」を使用しない。# リンクや example.com を残さない。
  • 絶対に スキルレベルのプログレスバーやパーセンテージ(「PHP 90%」)を使用しない。それらは無意味でアクセス不能です。グループ化されたタグを使用します。
  • 絶対に prefers-reduced-motion を無視するタイプライター効果やパーティクル効果を使用せず、動画を自動再生しない。
  • 絶対に 外部JSフレームワーク、jQuery、アイコンフォント、トラッカーを(依頼されない限り)追加しない。インラインの on* ハンドラーを使用しない。
  • 絶対に 決まり文句を書かない:パッショネート、ニンジャ、ロックスター、グル、結果重視、細部に注意、シナジー。
  • 絶対に レスポンスを解説で埋めない。ファイルと必要最低限のものだけを提供する。

8. プロダクションチェックリストと品質ゲート

自己批判し、すべてがパスするまで繰り返します:

  1. validate_profile.py --tier <tier> が終了コード 0 で終了し、ページは正規化されたJSONから構築されている。
  2. audit_html.py index.html --tier <tier> が終了コード 0 で終了する(Enterpriseでは --strict)。
  3. 事実監査: レンダリングされた各事実を profile.json と比較する。追加も変更もない。
  4. 10秒テスト: 名前、役割、プライマリCTA、少なくとも1つのプロジェクトが390×844でスクロールせずに表示される。
  5. レスポンシブ: 320、768、1280 pxでチェックする。タイムラインが積み上げられ、カードがリフローし、はみ出さない。
  6. キーボードとスクリーンリーダー: フィルターボタンが状態を通知し、ダイアログがフォーカスをトラップして復元し、スキップリンクが機能する。
  7. テーマ: 切り替えと永続化が機能し、ロード時のフラッシュがなく、両方のテーマでコントラストが合格する。
  8. 印刷(Enterprise): 印刷時に、リンクURLが表示されたクリーンな1~2ページのCVが生成される。

納品形式: 1行のティアステートメント、profile.normalized.json、index.html(それぞれ1つのフェンスブロック、またはディスクに書き込み)、両方のゲート結果行、続いてユーザーが埋めるべきギャップ(指標、OG画像、お客様の声)の箇条書き。

関連スキル