Procedure
- 実態調査(コピペ防止の起点)
- ルート構成:
find src/app -name page.tsx。トップがLPかログイン即か。既存の privacy/terms/contact 有無。 - 認証: middleware/proxy か、クライアント
AuthRequired方式か。NEXT_PUBLIC_AUTH_MODE等。 - 取得データ: prisma schema の User / DB のテーブル / OAuth scope(Gmail/Calendar/AI送信の有無)。→ これがプラポリの中身。
- デザイントークン:
globals.cssの:rootか Tailwind v4@theme。LP/法務はこのトークンに合わせる。
- ルート構成:
- LP: 未ログインの入口を作る。ヒーロー+実機能(コードから抽出)+使い方+CTA。
- middlewareガード型 → ダッシュボードを
/dashboardに退避し/をLPに。ログイン済は/→/dashboardリダイレクトで保険。/参照(href/redirect/callbackUrl)を grep で全張り替え。 - クライアント認証型 → 未ログイン時に出る共通コンポーネント(
AuthRequired等)自体をLP化すれば全経路でLPが出る(ルート変更不要=低リスク)。
- middlewareガード型 → ダッシュボードを
- 法務ページ:
/privacy/termsを新設。取得データ・第三者送信先(Google/Vercel/Turso/Anthropic等)を実態どおり列挙。決済が無ければ特商法は不要。大学/第三者の非公式ツールなら「公式で確認」免責を入れる。 - 問い合わせ:
/contactフォーム +POST /api/feedback→ 既存DB(Turso)に Feedback テーブル保存。外部サービスは足さない。匿名可・任意メール。 - 到達性: middlewareがあれば公開パスに
/(完全一致)/privacy/terms/contact/api/feedbackを追加。設定ページとフッターに法務・問い合わせリンクを置きログイン後からも到達可能に。 - ゲーム/ログイン無しアプリ: 最低限「開発者へのお問い合わせ」をホームかポーズ/設定に出す。
- ビルド → commit → push →
vercel --prod --yes→ ライブ疎通。
Pitfalls
- プラポリのテンプレ流用は危険。決済しないのに特商法、AI使わないのにAI送信、などズレると逆効果。必ずコードで実態確認。
- Tursoへのスキーマ反映手段はプロジェクト差:
prisma.config.tsがfile:./dev.db固定だとprisma db pushはローカルのみ。本番は@libsql/client直CREATE か、起動時ensureInitにCREATE TABLE IF NOT EXISTSを足す(後者が手動マイグレ不要で楽)。 - proxyの公開パス:
startsWithに/を足すと全パス公開になる。ルートはpathname === "/"の完全一致で別扱い。 - ルート移動時の張り替え漏れ: ログイン済が
/に来たら/dashboardへリダイレクトする保険を入れると、参照漏れがあっても事故らない。 - pre-pushレイアウトゲート(hosei等):
grid+レスポンシブ列で basegrid-cols-*無しは弾かれる。base にgrid-cols-1を足す(CSS Grid暗黙auto列の横溢れ対策)。 - dotenv未導入のプロジェクト:
-r dotenv/configが preload失敗。export $(grep '^TURSO_' .env.local | xargs)で env注入してから tsx 実行。接続変数名はプロジェクト差(DATABASE_URLvsTURSO_DATABASE_URL)。 vercel project removeにyesをパイプすると (y/N) を無限ループさせ巨大出力になる。--non-interactiveを使う。
Verification
- 全公開ページが本番で 200。LP本文の想定テキストが出る(クライアント描画LPは curl に出ないのでブラウザ/スクショで確認)。
- 本番で
POST /api/feedback→{"success":true}を確認し、__CLAUDE_VERIFY__検証行を即削除(ダミー残存ゼロ)。 - ログイン後の設定ページ・フッターから問い合わせ/法務に到達できる。
/dashboard等の保護ページは未ログインで signin にリダイレクトされる(認証ガード健在)。