# コロフォン

## 制作思想

### 単一ソース → 二形式配信

このサイトの本体は HTML と Markdown の二形式で配信される。会社情報は `src/data/company.ts` に、技術スタックは `src/data/stack.ts` に集約され、HTML / Markdown / JSON-LD / `/llms.txt` のすべてがそこから派生する。同じ事実を別の場所に書かないことで、片方だけ古びる事態を構造的に防いでいる。

### Accept ヘッダ主導の content negotiation

ブラウザは HTML を、AI クローラと `curl -H "Accept: text/markdown"` は Markdown を、同じ URL から受け取る。Cloudflare Pages の middleware が `Accept` ヘッダを見て本体を切り替える。User-Agent だけで切り替えることはしない（クローキングと見分けがつかなくなる）。AI クローラ向けの補助判定は、UA が AI で **かつ** Accept に `text/html` が明示されていない場合のみ動く。すべてのレスポンスに `Vary: Accept, User-Agent` を付与して CDN キャッシュの整合を保つ。

### 見せる量より作る密度

表に出す情報は最小限にとどめ、edge の middleware・ビルド時のロゴ最適化・型レベルでの単一ソース化に密度を寄せた。

## アーキテクチャ

Astro が静的に書き出した HTML と Markdown を Cloudflare Pages に置き、その前に Cloudflare Pages Functions の middleware を 1 枚挟んでいる。middleware は `/`・`/about`・`/colophon` だけを対象に、`Accept` ヘッダと User-Agent を見て同じ URL から HTML か Markdown かを返す。

```
Browser  ─┐                              ┌─→  index.html / about/index.html / colophon/index.html
          ├→  Cloudflare Pages           │
AI Bot   ─┤    + Pages Functions ───────→│
curl     ─┘    (Accept / UA を判定)       └─→  index.md / about.md / colophon.md
```

## 技術スタック

- **framework** / Astro — 静的書き出し、HTML/Markdown 両形式の出力
- **edge** / Cloudflare Pages — 静的アセットのデプロイ先と CDN
- **edge** / Cloudflare Pages Functions — Accept/UA を見て同一 URL から HTML/Markdown を出し分ける middleware
- **language** / TypeScript — ページ・コンポーネント・middleware・データ層すべて
- **data** / schema.org JSON-LD — Organization 構造化データを <head> に埋め込み
- **build** / SVGO — ロゴ SVG の最適化と presentation 属性化
- **build** / wrangler — ローカルで Pages Functions を含む挙動を検証

## curl で試す

```
curl -sI https://duprass.co/
curl -H "Accept: text/markdown" https://duprass.co/
curl -A "GPTBot/1.0" -sI https://duprass.co/
curl -A "ClaudeBot/1.0" -H "Accept: text/html" -sI https://duprass.co/
curl -sI https://duprass.co/index.md
curl https://duprass.co/llms.txt
curl -sI -H "Accept: text/markdown" https://duprass.co/ | grep -i vary
```

それぞれ、上から順に：HTML 取得 / Accept による Markdown 取得 / AI UA による Markdown 取得 / 明示 Accept が AI UA より優先 / `.md` 直アクセス / `/llms.txt` 取得 / `Vary` ヘッダの確認。

[トップに戻る](/index.md)
