Making-of Guide
奥箱根・一日八組の湯宿「月白」のウェブサイトを、コンセプト設計からコピーライティング、コーディング、画像生成まで一貫してClaude(Fable 5)が制作した記録です。
「一泊、月と湯とともに。」──月あかりを含んでほのかに白く光る湯けむり。その色の名「月白(げっぱく)」を宿名に借り、サイト全体を「日没後の奥箱根」の一枚の絵として設計しました。
デザイン原則は三つ。間(ま)を構造として使うこと。動きは湯けむりのように遅く、決して弾まないこと。そして装飾ではなく精度(ヘアライン罫、揃ったグリッド、小さなラベル組版)で高級を語ること。
日本の伝統色から五色。すべてCSSカスタムプロパティとして定義しています。
四季モードに応じて差し色--seasonが変わります:春=桜鼠 #C9A9B4/夏=苔 #7C9070/秋=柿渋 #C1693C/冬=月白鼠 #A9BCCB。
font-feature-settings:"palt"で詰め組み。ヒーローの宿名(ルビ付き<ruby>月白<rt>つきしろ</rt></ruby>)、各章の側面ラベル(序・部屋・湯・料理・四季・予約)、献立の品書きにwriting-mode:vertical-rl; text-orientation:uprightを使用。品書きは右から左へ読む本物の会席のお品書きの組み方です。
全7点をGPT Image 2(quality: high)で生成。日本文化の正確さ(露天風呂は石と檜、会席は余白の多い盛り付け、庭は苔と灯籠)をプロンプトで指定し、生成後は一枚ずつ目視検品しました。文字入り画像は不採用の方針です。実際のプロンプト(原文・英語):







ヒーローの露天風呂の上を、26個の「湯けむりの房」がゆっくり立ちのぼります。放射状グラデーションのスプライトを一度だけ事前描画し、各房は二層のサイン波(低周波の揺らぎ+高周波のさざめき)で横に揺れながら上昇。mix-blend-mode:screenで写真に溶け込ませています。
const sway = Math.sin(t*p.w1+p.phase)*p.a1
+ Math.sin(t*p.w2+p.phase*1.7)*p.a2; // 二層の揺らぎ
const env = Math.sin(Math.PI*k)**1.4; // 生滅のエンベロープ
ctx.globalAlpha = p.alpha * env;
ctx.drawImage(sprite, x-r, y-r*.72, r*2, r*1.44);
IntersectionObserverでヒーローが画面外に出ると停止、prefers-reduced-motionでは描画しません。
画面右下の月が、頁の進みに合わせて新月から満月へ。SVGマスク内の「影の円」をスクロール率に応じて横に滑らせるだけの、軽い仕掛けです。
<mask id="moonMask">
<circle cx="16" cy="16" r="11" fill="#fff"/>
<circle id="moonShadow" cx="16" cy="16" r="11" fill="#000"/> <!-- 影 -->
</mask>
// scroll: 影をずらす → 新月(p=0) … 満月(p=1)
moonShadow.setAttribute("cx", 16 + 23*p);
春・夏・秋・冬の切り替えで、庭の写真がクロスフェードし、俳句調の一行と説明文が入れ替わり、差し色--seasonが全站で変わります。選択はsessionStorageに保存し、初期値は実際の今月から判定(7月なら夏)。画像は先読みしてから交代させるのでちらつきません。
Lenisの慣性スクロールにScrollTriggerを同期。すべての出現はpower2.out・1.3〜1.6秒の長い緩急で、写真は額装の中で±8%だけ視差移動します。献立の品書きは右の列から順に、一列ずつ静かに立ち上がります。
会席の献立はwriting-mode:vertical-rlの縦書き列。flex-direction:row-reverseで右端=先付から始まり、モバイルでは横スクロール(実際の巻物のように)で読めます。
flex:none)。品書きは読み始めの「先付」が右端に来るよう、読み込み時に右端へスクロール。<noscript>フォールバック(全コンテンツ表示)を追加。ビルド工程はありません。静的ファイルのままCloudflare Pagesへ:
npx wrangler pages deploy . --project-name tsukishiro