Communityライティング&編集github.com

timerise-ai/help-center-markdown

エージェントスキル:マークダウンベースのヘルプセンターを構築 — フロントマター記事のカテゴリフォルダ、静的ランディング/カテゴリ/タグ/記事ページ、クライアント側ランキング検索、スラッグIDを持つタグ、hreflangによるロケールフォールバック、JSON-LDとサイトマップ、CIコンテンツバリデーター — Next.js App Router、CMS不要

help-center-markdown とは?

このスキルは、Next.js App Routerを使用して、マークダウンファイルベースのヘルプセンターを構築するためのものです。主な機能として、カテゴリフォルダに整理されたフロントマター記事からの静的ページ生成、クライアント側でのトークン化プレフィックス検索、スラッグIDによるタグのグループ化、hreflangを用いた多言語ロケールフォールバック、JSON-LD構造化データとサイトマップの自動生成、そしてCIパイプラインでのコンテンツバリデーションを提供します。このスキルは、CMSを使用せずに開発者が管理するドキュメントサイトやナレッジベースに最適で、ファイルシステムをスキーマとして直接利用します。また、ランタイムでのエラー寛容性とCIでの厳格な検証を両立し、未翻訳ページの重複処理や検索の堅牢性など、実運用で重要な設計原則が多数含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add timerise-ai/help-center-markdown

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

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

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

ドキュメント

ヘルプセンター — マークダウン記事、検索、i18n

ヘルプセンターは小さな静的サイトであり、すべての記事にアクセス可能であるという1つの厳しい要件があります。サイドバー、検索、まだ翻訳されていないロケールからもアクセスできる必要があります。このモジュールを出荷したエンジニアによって作成されました。以前の実装はマーケティングサイトのヘルプセンターでした。以下のモジュールは、その要件を検証済みのプロパティとして保持しています。サイドバーはすべてのカテゴリのすべての記事を表示し、検索は入力方法に関わらずクエリをランク付けし、関連リンクが解決されるかバリデーターがビルドを失敗させます。ローダー、検索、タグスイートがそれぞれをカバーしています。記録は references/provenance.md にあります。

使用するタイミング

Next.js App Router上で、記事がリポジトリ内のマークダウンファイルであるヘルプセンター、ドキュメントセクション、ナレッジベースを構築または拡張する場合。複数ロケールの有無は問いません。

使用すべきでないタイミング

  • ブログ。 日付と著者が設定され、カバー画像とローカライズされたスラッグを持つ投稿は異なるコンテンツモデルです。ホストのブログモジュールを維持してください。
  • コードから生成されたドキュメント(OpenAPI、TypeDoc) — それぞれのジェネレーターを使用し、出力にリンクしてください。
  • CMSをバックエンドに持つヘルプサイトで、編集者がランタイムで公開する場合。インデックス契約は引き続き適用されますが、ローダー、静的パラメータ、バリデーションが変更されます。extensions.md のCMSに関する注釈を参照してください。
  • たまたまマークダウンであるマーケティングページ。 ホストのレンダラーを再利用してください。このモジュールは、多数の記事を中心としたナビゲーション、検索、ロケールモデルです。

アーキテクチャ

content/help/<[locale]/><category>/<slug>.md
        │  gray-matter + 正規化
        ▼
getHelpIndex(locale)  ── React cache(): リクエストごとに1回パース ──┐
  カテゴリ · 記事 (ソート済み) · byKey · タグ · byTag · スキップ済み│
        │                                                        │
        ├─► ページ: ランディング / カテゴリ / タグ / 記事 ── メタデータ、JSON-LD、canonical/hreflang
        ├─► HelpShell ── toSummary → ナビツリー (サイドバー + ドロワー)
        │             ── toSearchDoc → HelpSearch (クライアント、トークン化プレフィックス検索)
        ├─► helpSitemapEntries()
        └─► validate:help (CI) ── 未解決の関連、順序のタイ、不正な日付、不正なスラッグ、タグのドリフト

すべてはインデックスから読み取られます。ファイルシステムに直接アクセスするものは他にありません。

重要な事実

  1. ファイルシステムがスキーマです。 フォルダ = カテゴリ、ファイル名 = スラッグ、フロントマターはメタデータのみです。フロントマター内の slug/category はパスに対して検証され、使用されることはありません。
  2. サマリーのみがクライアントに渡されます。 toSummary/toSearchDoc は本文を削除します。HelpArticle をクライアントコンポーネントに渡すと、すべてのページに全文が送信されます。
  3. 翻訳されていないページは重複として扱われます。 デフォルトロケールからレンダリングされ、ナビゲーション内の位置を維持し、注意書きを表示し、デフォルトロケールのURLに正規化され、hreflangとサイトマップからは除外されます。
  4. ランタイムは寛容ですが、CIは寛容ではありません。 不正な参照は無視され、欠落した順序は最後にソートされます。そして validate:help は作成者のためにビルドを失敗させます。
  5. 検索は設計上クライアントサイドです。 記事あたり約1KBで、ナビゲーション用にすでにページに含まれており、最初のキーストロークで結果が表示されます。本文検索は拡張機能です。

厳格なルール

決して折りたたみ可能なリストの高さを制限しないでください。 max-h-* + overflow-hidden の組み合わせは、収まらないものをクリップして何も報告しません。hidden または実際の折りたたみ可能なプリミティブを使用して、すべてのリンクまたは何も表示しないようにしてください。

決して order だけでソートしないでください。 同順位は readdir の順序にフォールスルーします。これはファイルシステム間で異なります。タイトル、次にスラッグで同順位を解決してください。

決してバリデーションなしで related を解決しないでください。 削除された参照はページ上で見えなくなります。バリデーターだけが、作成者がスラッグの名前変更を知る場所です。

決してトリミングされていないクエリを検索せず、タイトルだけで検索しないでください。 トリム、トークン化、ダイアクリティクスの折りたたみ、タグと見出しを含め、フィールドごとにランク付けしてください。

決してi18nシステムを持つホストでクロム文字列をハードコードしないでください。 すべての文字列は HelpStrings を通過するため、ヘッダー、フッター、通知が一緒にロケールを切り替えます。

決してタグをそのスペルでキーにしないでください。 大文字小文字、ハイフン、複数形は作成者間で異なります。tagSlug でグループ化して、すべてのバリエーションが1つのページに集まるようにし、バリデーターに変化を報告させてください。

クイックスタート

  1. シームコントラクトを埋め、カテゴリIDを決定してください — adaptation.md。
  2. コンテンツレイアウトを選択し、設定を記述してください — content-model.md。
  3. ローダーとフロントマターパーサーをコピーし、実際のコンテンツで即座にバリデーターを実行してください — content-loader.md。
  4. 文字列とパスをホストのi18nに配線してください — i18n.md。
  5. 3つのページ、SEOヘルパー、サイトマップエントリを追加してください — routes.md — 次にタグページとリンクチップ — tags.md。
  6. シェル、ナビゲーションツリー、ドロワーを構築してください — ui.md — 次にパンくずリスト、カード、リスト、レンダラーをホストのプリミティブ上に — ui-content.md。
  7. 検索とそのフックを導入し、ゼロ結果フックをアナリティクスに配線してください — search.md。
  8. 出荷されたテストを実行し、次に動作契約を確認してください:最長カテゴリが完全に到達可能であること、末尾スペースのクエリ、アクセント付きクエリ、翻訳されていないページの正規URL。

リファレンスディレクトリ

シナリオトリガーキーワードリファレンス
既存アプリへの統合適応、シーム、カテゴリ名変更、ホストプローブ、統合、依存関係adaptation.md
フロントマター、フォルダ、スラッグ、バリデーションフロントマター、スラッグ、カテゴリ、順序、関連、updatedAt、featured、検証、CIcontent-model.md
ファイルのインデックスへの読み込みローダー、gray-matter、キャッシュ、フォールバック、見出し、ソート、インデックス、fscontent-loader.md
検索ボックスとランキング検索、コンボボックス、ランキング、トークン化、ダイアクリティクス、プレフィックス、キーボード、結果なしsearch.md
タグ、タグページ、チップ、タグクラウドタグ、タグ、タグページ、チップ、タグスラッグ、スペル、複数形、タグで閲覧tags.md
ロケール、文字列、日付、正規URLi18n、ロケール、翻訳、フォールバック、hreflang、文字列、複数形、Intli18n.md
ページ、メタデータ、JSON-LD、サイトマップルート、page.tsx、generateStaticParams、dynamicParams、notFound、canonical、TechArticle、sitemaproutes.md
シェル、ヘッダー、サイドバー、ドロワーレイアウト、サイドバー、モバイルメニュー、ドロワー、折りたたみ可能、スティッキー、HelpShellui.md
パンくず、カード、リスト、レンダラー、スタイルフックパンくず、カテゴリカード、記事リスト、react-markdown、data-help、スタイリングui-content.md
出荷モジュールを超えて全文、Pagefind、TOC、フィードバック、git日付、MDX、CMS、リダイレクトextensions.md
テンプレートが以前の実装と異なる理由来歴、監査、台帳、意図的に保持、以前の実装の修正provenance.md

関連スキル