ハンズオン

プラン、上限、エンタイトルメント

Free・Plus・Max の機能、組織上限、Stripe 対応、猶予期間、複数契約、サポート例外を設定します。

starter のコミット 7d452a6 に同期しています。

エンタイトルメントの入口は一つ

ルートやコンポーネントは src/config/plans.ts を import せず、tier === "max" も比較しません。src/services/entitlements.ts に機能や上限を問い合わせます。

await requireEntitlement(orgUuid, "tasks.text_to_video");
await enforceLimit(orgUuid, "storage.totalMb", { current, adding });

そのため、プラン名変更や第四のプラン追加でも散在する条件が壊れません。アーキテクチャテストが境界を強制します。

既定カタログ

機能・上限FreePlusMax
組織メンバー1520
アップロード
最大ファイル5 MB25 MB200 MB
総ストレージ100 MB5,000 MB50,000 MB
テキストから動画不可
月間タスク050無制限
月間クレジット05002,500

null は無制限です。サインアップクレジットは一回限りで、Free の定期付与ジョブはありません。

有効プランの解決

プランは組織に属します。subscriptions が現在状態、orders が不変の財務履歴です。有効かつ rank が最も高い契約を採用します。activetrialing は有効、past_due は七日間の猶予があります。

組織は複数契約を持てます。クレジット付与は加算されますが、機能上限は最上位の有効プランが決めます。課金画面には全契約を表示します。

カスタマイズ

  1. src/types/plan.ts に名前を追加する。
  2. src/config/plans.ts ですべての tier の値を定義する。
  3. 金額、期間、クレジット、通貨、Price 対応は src/config/billing.ts に置く。
  4. requireEntitlement または enforceLimit で保護する。

新規 checkout はサーバー専用 STRIPE_PRICE_* を使います。ダウングレードはデータやメンバーを削除しません。サポートは監査付き席数例外を設定でき、手動 comp は source = "manual" の通常の subscription です。

プラン、上限、エンタイトルメント · Sushi SaaS