Practice Website Kit — Astro + PagesCMS + Cloudflare Pages
スタックとその理由
| レイヤー | 選択肢 | 理由 |
|---|---|---|
| サイトフレームワーク | Astro | デフォルトで静的HTMLを最小のJavaScriptとともに配信 — スマートフォンでも高速、パッチ不要、コンテンツは型付きフロントマターのMarkdown |
| コンテンツ編集 | PagesCMS (app.pagescms.org) | 無料、オープンソース、Gitベース:スタッフはWebフォームで編集、保存ごとにGitコミット。データベース不要、CMSサーバーの管理不要 |
| ホスティング | Cloudflare Pages | 無料枠で開業サイトに十分(豊富なビルド時間と帯域幅、多数のカスタムドメイン)、ブランディングなし、商用利用可能、グローバルCDN、自動HTTPS。デプロイ = Gitリポジトリを接続するだけ |
| リポジトリ | GitHub(開業者所有) | サイトの単一の本拠地:Astroが読み取り、PagesCMSが書き込み、Cloudflareがビルド |
これを機能させるアーキテクチャのルール:ウェブサイトは「アプリケーション」ではなく「出版物」である。 ページ、プロフィール、投稿はコンテンツ。予約、支払い、メッセージング、ディレクトリにはすでにシステムがある — サイトはそれらを埋め込み、リンクするだけで、再実装もデータ受信もしない。
エージェントへの指示
- 成果物 = 開業者が所有する動作するリポジトリ + 3つの接続(PagesCMS → リポジトリ、Cloudflare Pages → リポジトリ + ドメイン) + CMSを介したエンドツーエンドの編集の1回の確認。アカウントにアクセスできない場合は、完全なリポジトリと、所有者向けのクリックごとの接続チェックリストを作成すること。
- 最初にセットアップインタビューを実施すること。開業に関する事実(資格、免許、保険パネル、料金、言語、実務年数)を決して捏造しないこと。 プレースホルダーを使用し、所有者が提供するまでフラグを立てておくこと。
- 各プラットフォームの動作は、記憶ではなく実際の設定から確認すること:
references/pagescms-config.mdの PagesCMS filename-template ルールは、実際のサイトで最初の保存を失敗させた — CMSの保存テストを「設定完了」の定義とみなすこと。
セットアップインタビュー(構築前に一度だけ質問)
- 開業情報 — 開業名、ドメイン(DNSの管理先 — DNSもCloudflareにあると最もスムーズ)、ロゴ/カラー(あれば)、表示する電話番号/メール
- 形態 — 個人開業かグループか;プロバイダーリスト(名前、資格、免許州、写真の有無)プロフィールページ用
- ページ —
references/site-blueprint.mdの設計図を確認(追加/削除:例:サービスごとに専用ページ?リソース/ブログセクション?紹介ディレクトリの埋め込み?) - 言語 — 単一言語か、ミラーツリー(例:英語を
/、中国語を/zh/)か?ミラーの場合、人間が翻訳した高品質なページにそれぞれ独自のスラッグが必要 — 翻訳予算を確保し、臨床関連コンテンツを機械翻訳して未読のまま公開してはならない - 動的埋め込み — サイトに表示する既存システム(予約ページ、問い合わせフォームアプリ、紹介ディレクトリ、セキュアメッセージのエントリポイント)とそのURL。これらはiframe埋め込み + フォールバックリンクになる
- 編集者 — 公開後に誰がコンテンツを更新するか(所有者のみ?管理者?プロバイダーが投稿を書く?) — これによりPagesCMSのアクセス権と、CMS管理 vs コード管理の範囲が決まる
- 既存アセット — 移行する現在のサイトコンテンツ、写真(およびその権利)、Googleビジネスプロフィールやディレクトリ掲載情報(サイトと一致させる必要あり)
厳格なルール
- 開業者がすべてのアカウントを所有する — ドメインレジストラ、GitHub、Cloudflare。開業者のログインで設定し、復旧オプションは開業者が管理すること
- コンテンツはデータであり、コードではない。 編集者が変更する可能性のあるもの(プロバイダーの経歴、サービス、料金、FAQ、投稿)は、Markdown/フロントマターのコンテンツスキーマの背後に置く —
.astroテンプレートにハードコードしてはならない - PagesCMSのfilenameテンプレートは
{fields.slug}(またはコレクションの実際のフィールドパス)を使用すること。 単なる{slug}は無効であり、すべての CMS保存が不透明なエラーで失敗する。設定修正後、CMSをリロードすること — CMSはセッションごとに設定をキャッシュする - サイトは臨床情報を一切収集しない。 症状のテキストボックスや「どのような状況ですか」といったフォームは設置しない。連絡先 = 予約リンク/埋め込み、電話番号、必要に応じてルーティングされたフォームアプリ — さらに危機対応窓口(米国では988、緊急時は911)を連絡先ページおよび連絡を促すすべてのページに、サイトの言語で表示すること
- 埋め込みにはフォールバックリンクを付けること。 すべてのiframe(予約、ディレクトリ)には、同じシステムへのプレーンなリンクを併記し、フレームがブロックされてもクライアントが行き詰まらないようにすること
- 記述の正確性: サイト上のパネル、料金、資格、空き状況は、開業者の唯一の情報源(名簿/記録)と一致していなければならない。ウェブサイトは事実を編集する最後の場所であるべき — 数字が2か所にある場合は、どちらが優先されるかを明示すること
- パフォーマンスは治療サイトでは重要な機能である — 人々は不安な気持ちで、スマートフォンから、ディレクトリプロフィール経由で訪れる。リポジトリに取り込む前に画像を圧縮すること;2MBのヒーロー写真はバグであり、資産ではない
構築順序
- リポジトリ + Astroスキャフォールド +
references/astro-setup.mdに基づくコンテンツモデル、references/site-blueprint.mdに基づくページ - ローカルビルドが成功;コンテンツプレースホルダーにフラグを立て、所有者にリストを提示
references/pagescms-config.mdに基づくPagesCMS設定 + 実際の保存テストreferences/cloudflare-pages-deploy.mdに基づくCloudflare Pages接続 + カスタムドメインreferences/seo-and-performance.mdに基づくSEO/パフォーマンスパスreferences/maintenance-and-handoff.mdに基づくハンドオフ;references/test-checklist.mdに基づく確認
参考ファイル
references/architecture-and-stack.md— 3つのレイヤー、データフロー、静的サイトが開業にとって何を意味するかreferences/site-blueprint.md— ページ構成、各ページに必要な内容、治療サイト特有の必須事項references/astro-setup.md— プロジェクトレイアウト、コンテンツコレクション + スキーマ、多言語ツリーreferences/pagescms-config.md—.pages.yml、コレクション、メディア、filename-templateルールreferences/cloudflare-pages-deploy.md— プロジェクト設定、ビルド設定、カスタムドメイン、プレビューreferences/seo-and-performance.md— メタデータ、構造化データ、サイトマップ/RSS、llms.txt、画像references/maintenance-and-handoff.md— 編集ワークフロー、アップデート、バックアップ、所有権references/test-checklist.md— 受け入れテスト、CMS保存テストを最初に