type: feature-spec
status: draft
created: 2026-03-02
tags:
- spec
- phase2


機能仕様書

  • ユーザーストーリー
    • ストーリー1
      • SNSクリエイターとして、プロフィールに貼る1つのリンクから自分の全商品・サービスを見せたい。なぜならフォロワーを複数のURLに誘導すると離脱率が上がり、販売機会を損失するから。
    • ストーリー2
      • デジタル商品販売者として、PDFや動画ファイルをアップロードして即座に販売・自動配信を開始したい。なぜならエンジニアに頼まず当日中に収益を得たいから。
    • ストーリー3
      • 個人コーチとして、カレンダーを公開してコーチングセッションの予約と決済を同時に受け付けたい。なぜならCalendly+Stripeの二重管理を排除してセッション準備に集中したいから。
  • 機能一覧
    • 必須(MVP)
      • 機能1: リンクインバイオ公開ストアページ(/[username])
        • 対応ストーリー: 1
      • 機能2: デジタル商品登録・ファイルアップロード(PDF/ZIP/MP4・最大100MB)
        • 対応ストーリー: 2
      • 機能3: Stripe Checkoutによる商品購入・ダウンロードURL自動メール配信
        • 対応ストーリー: 2
      • 機能4: クリエイター認証(メール登録・ログイン)とダッシュボード
        • 対応ストーリー: 1, 2, 3
    • 重要
      • 機能5: 売上・注文履歴ダッシュボード(累計売上・注文件数・直近10件)
        • 対応ストーリー: 2
      • 機能6: ストアページのテーマカラー・プロフィールカスタマイズ(6色プリセット・アバター画像・bio)
        • 対応ストーリー: 1
      • 機能7: サービス自体の月額サブスクリプション課金(スタータープラン¥2,980/月)
        • 対応ストーリー: 1, 2
    • あれば良い
      • 機能8: コーチング予約カレンダー(日時選択+Stripe決済一体型)
        • 対応ストーリー: 3
      • 機能9: メールアドレス収集フォーム・リードマグネット(無料PDF配布と引き換えにメール取得)
        • 対応ストーリー: 1
  • 機能詳細
    • 機能1: リンクインバイオ公開ストアページ
      • 画面
        • 公開ストアURL: /[username](SSRレンダリング・OGP対応)
        • ダッシュボード内ストアエディタ: /dashboard/store
      • 操作
        • プロフィール画像・表示名・bio文(最大160文字)の編集と即時プレビュー
        • 商品ブロックの表示/非表示切替(トグルスイッチ)
        • テーマカラー選択(6色プリセット: ブラック・ホワイト・パープル・ピンク・グリーン・ブルー)
        • ストアURLのワンクリックコピーボタン
      • データ
        • usersテーブル: id(uuid), username(text・unique), display_name(text), bio(text・max160), avatar_url(text), theme_color(text・default '#000000'), stripe_account_id(text・nullable), created_at(timestamptz)
        • productsテーブル: id(uuid), user_id(uuid・FK), title(text), description(text), price_jpy(int), file_url(text), file_name(text), file_size_mb(numeric), is_published(bool・default false), created_at(timestamptz)
    • 機能2: デジタル商品登録・ファイルアップロード
      • 画面
        • 商品追加モーダル: タイトル・説明・価格(円)入力フォーム+ファイルドロップゾーン
        • 商品管理一覧: /dashboard/products(公開状態・価格・タイトル一覧)
      • 操作
        • PDF/ZIP/MP4をドラッグ&ドロップ or クリックでSupabase Storageにアップロード(進捗バー表示)
        • 価格を日本円(¥100〜¥1,000,000)で設定
        • 公開/非公開トグルで即座にストアへの表示を切替
        • 商品の削除(確認ダイアログ表示後に実行)
      • データ
        • Supabase Storage バケット名: digital-products(プライベート設定・署名付きURL経由でのみアクセス可)
        • ファイルパス形式: {user_id}/{product_id}/{filename}
    • 機能3: Stripe Checkout購入・ダウンロードURL配信
      • 画面
        • 商品詳細モーダル(公開ストアから「購入する」ボタン押下で表示)
        • Stripe Checkoutページ(Stripeホスト型・カード決済対応)
        • 購入完了サンクスページ: /thank-you
        • ダウンロードページ: /download/[token]
      • 操作
        • 「購入する」→Stripe Checkoutにリダイレクト→決済完了→Webhookでorders更新→ダウンロードURLをResendでメール送信→/download/[token]でファイルDL
        • /download/[token]: 有効期限72時間・DL上限3回・超過時に「リンクが無効です。購入者サポートへご連絡ください」を表示
      • データ
        • ordersテーブル: id(uuid), product_id(uuid・FK), buyer_email(text), stripe_payment_intent_id(text・unique), download_token(uuid・unique), download_count(int・default 0), expires_at(timestamptz), created_at(timestamptz)
        • Stripe Webhookイベント: checkout.session.completed