# 通知設計書 10-リマインダー

## 概要

本ドキュメントは、Giselleプラットフォームにおけるリマインダーメール通知の設計仕様を定義するものである。ワークスペースを作成したがエージェントをまだ作成していないユーザーへのリマインダーメールの送信仕様、テンプレート構造、処理フローを記載する。

### 本通知の処理概要

本通知は、オンボーディングプロセスを開始したが完了していないユーザーに対して、サービス利用の継続を促すリマインダーを送信する機能である。オンボーディングメールシリーズの第3通目。

**業務上の目的・背景**：ユーザーがサインアップ後にサービス利用を中断してしまうことを防ぎ、エンゲージメントを維持することを目的とする。最初のエージェント作成という重要なマイルストーンに到達していないユーザーに対して、簡単に始められることを強調し、行動を促す。ユーザーのドロップオフを減少させ、アクティブユーザー化を推進する。

**通知の送信タイミング**：ワークスペース作成案内メール送信後、一定期間経過後（例：48-72時間後）に自動送信される。または、ワークスペースを作成したがエージェントを作成していないユーザーに対してトリガーされる。

**通知の受信者**：サインアップ完了済みで、Giselleの利用を開始したが最初のエージェントをまだ作成していないユーザー。マーケティングメール受信可のユーザーに限定。

**通知内容の概要**：ユーザー名への挨拶、エージェント作成の再案内、Stage/ワークスペースでの開始方法、エグザンプルギャラリーへのリンク、サポート連絡先、Giselleチームからの署名が含まれる。

**期待されるアクション**：受信者は「Create your first agent」ボタンをクリックし、Giselleに戻ってエージェント作成を開始する。サービスの価値を体験することが期待される。

## 通知種別

メール（マーケティングメール / オンボーディング）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 非同期（スケジュール送信） |
| 優先度 | 中 |
| リトライ | アプリケーション設定に依存 |

### 送信先決定ロジック

以下の条件を満たすユーザーに対して送信される：
- サインアップ完了・メール確認済み
- ワークスペース作成案内メール送信から一定期間経過
- まだエージェントを作成していない
- マーケティングメール受信可

## 通知テンプレート

### メール通知の場合

| 項目 | 内容 |
|-----|------|
| 送信元アドレス | noreply@giselles.ai（アプリケーション設定に依存） |
| 送信元名称 | Giselle |
| 件名 | Your workspace is waiting |
| 形式 | HTML |

### 本文テンプレート

```
[Giselleロゴ]
Your workspace is waiting.
Create your first agent and start building.
---
Hi {ユーザー名},

You started setting up Giselle but haven't created your first agent yet.

Your workspace is ready — it only takes a few minutes to build your first agent. Try Stage to test agents instantly, or create your first workspace to start building visually.

Pick up right where you left off and start creating.

[Create your first agent ボタン]

Need help getting started? Check out our examples gallery or reach out anytime at support@giselles.ai.

—
The Giselle Team
https://giselles.ai
---
[フッター：Product / Blog / Documentation リンク、SNSアイコン、著作権表示]
```

### 添付ファイル

| ファイル名 | 形式 | 条件 | 説明 |
|----------|------|------|------|
| なし | - | - | 本通知には添付ファイルなし |

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| userName | ユーザー名（デフォルト: "there"） | ユーザープロファイル | No |
| returnToGiselleUrl | Giselle復帰用URL | アプリケーション設定 | No |
| examplesGalleryUrl | エグザンプルギャラリーのURL | アプリケーション設定 | No |
| releaseNotesUrl | リリースノートのURL（未使用） | アプリケーション設定 | No |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| スケジュール | ワークスペース作成案内メール送信から一定期間経過 | エージェント未作成 | オンボーディングシリーズの第3通目 |
| スケジュール | サインアップから一定期間経過 | エージェント未作成 | 非アクティブユーザーへのリマインド |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| エージェント作成済み | 既にエージェントを作成しているユーザー |
| マーケティングメール拒否 | ユーザーがマーケティングメールの受信を拒否している場合 |
| 最近のログイン | 直近でサービスを利用している場合（設定による） |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[スケジュールトリガー発火] --> B[対象ユーザー抽出]
    B --> C{エージェント作成済み?}
    C -->|はい| D[送信スキップ]
    C -->|いいえ| E{マーケティングメール受信可?}
    E -->|はい| F{最近のログインあり?}
    E -->|いいえ| D
    F -->|はい| D
    F -->|いいえ| G[ユーザー情報取得]
    G --> H[メールテンプレート展開]
    H --> I[メール送信実行]
    I --> J{送信結果}
    J -->|成功| K[送信ログ記録]
    J -->|失敗| L[エラーログ記録・リトライ]
    K --> M[終了]
    L --> M
    D --> M
```

## データベース参照・更新仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| auth.users | ユーザー情報取得 | Supabase管理テーブル |
| user_profiles | ユーザー名取得 | アプリケーション管理テーブル |
| agents | エージェント存在確認 | ユーザーが作成したエージェント |
| email_logs | 前回メール送信履歴確認 | ワークスペース作成案内メール送信済み確認 |
| user_preferences | マーケティングメール設定確認 | アプリケーション管理テーブル |
| user_sessions | 最近のログイン確認 | アクティブユーザー判定用 |

### テーブル別参照項目詳細

#### auth.users

| 参照項目（カラム名） | 用途 | 取得条件 |
|-------------------|------|---------|
| email | 送信先メールアドレス | 対象ユーザー |
| id | ユーザー識別 | エージェント存在確認用 |
| last_sign_in_at | 最終ログイン日時 | 最近のアクティビティ確認 |

#### agents（または同等のテーブル）

| 参照項目（カラム名） | 用途 | 取得条件 |
|-------------------|------|---------|
| id | エージェント存在確認 | user_id / workspace_id で検索 |

### 更新テーブル一覧

| テーブル名 | 操作 | 概要 |
|-----------|------|------|
| email_logs | INSERT | 送信ログ記録 |

#### 送信ログテーブル

| 操作 | 項目（カラム名） | 更新値 | 備考 |
|-----|-----------------|-------|------|
| INSERT | type | reminder | メール種別 |
| INSERT | status | sent/failed | 送信結果 |
| INSERT | sent_at | CURRENT_TIMESTAMP | 送信日時 |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| 送信失敗 | SMTPサーバー接続エラー | リトライ処理を実行 |
| テンプレートエラー | テンプレート変数の展開失敗 | エラーログに記録 |
| ユーザー情報不足 | プロファイル情報が取得できない | デフォルト値を使用 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | アプリケーション設定に依存 |
| リトライ間隔 | アプリケーション設定に依存 |
| リトライ対象エラー | 一時的な送信エラー |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | アプリケーション設定に依存 |
| 1日あたり上限 | アプリケーション設定に依存 |

### 配信時間帯

ユーザーのタイムゾーンを考慮した適切な時間帯（設定による）

## セキュリティ考慮事項

- TLS暗号化によりメール送信時のデータ保護を実施
- マーケティングメールの配信停止オプションをフッターに含める（CAN-SPAM準拠）
- ユーザー名がない場合はデフォルト値「there」を使用
- リマインダーの送信頻度を制限し、スパムにならないよう配慮

## 備考

- 本通知はオンボーディングメールシリーズの第3通目（03-reminder）
- テンプレートはReact Emailを使用して実装されている
- releaseNotesUrlプロパティは定義されているが、変数名が`_releaseNotesUrl`となっておりテンプレート本文では未使用

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

メールテンプレートに渡されるPropsの構造を理解することで、通知に必要なデータを把握できる。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | 03-reminder.tsx | `apps/studio.giselles.ai/emails/marketing/onboarding/03-reminder.tsx` | ReminderEmailPropsインターフェース（28-33行目）でuserName、returnToGiselleUrl、examplesGalleryUrl、releaseNotesUrlプロパティを確認 |

**読解のコツ**: releaseNotesUrlプロパティは定義されているが、変数名が`_releaseNotesUrl`となっておりテンプレート本文では未使用であることに注意（40行目）。

#### Step 2: エントリーポイントを理解する

メールテンプレートコンポーネントの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | 03-reminder.tsx | `apps/studio.giselles.ai/emails/marketing/onboarding/03-reminder.tsx` | ReminderEmailコンポーネント（35-103行目）の構造 |

**主要処理フロー**:
1. **35-41行目**: propsをデフォルト値付きで受け取る（releaseNotesUrlは`_releaseNotesUrl`として未使用）
2. **47行目**: Previewにリマインダーメッセージを設定
3. **50-53行目**: EmailHeaderに見出しとサブ見出しを設定
4. **58-71行目**: 本文テキスト（ユーザー名、セットアップ途中である旨、数分で始められる旨）
5. **72-74行目**: "Create your first agent"ボタン
6. **75-85行目**: サポート情報（examples gallery、support@giselles.ai）

#### Step 3: 共通コンポーネントを理解する

メールの共通レイアウトとスタイルを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | email-header.tsx | `apps/studio.giselles.ai/emails/components/email-header.tsx` | ヘッダーコンポーネント（見出し・サブ見出し表示） |
| 3-2 | email-footer.tsx | `apps/studio.giselles.ai/emails/components/email-footer.tsx` | フッターコンポーネント |
| 3-3 | email-styles.ts | `apps/studio.giselles.ai/emails/components/email-styles.ts` | buttonスタイル、textスタイル、linkスタイル |

**主要処理フロー**:
- **03-reminder.tsx 86-93行目**: 署名セクション

### プログラム呼び出し階層図

```
ReminderEmail (03-reminder.tsx)
    │
    ├─ EmailFonts (email-fonts.tsx)
    │      └─ フォント読み込み設定
    │
    ├─ EmailHeader (email-header.tsx)
    │      ├─ ロゴ表示
    │      ├─ 見出し: "Your workspace is waiting."
    │      └─ サブ見出し: "Create your first agent and start building."
    │
    ├─ 本文セクション
    │      ├─ 挨拶テキスト（ユーザー名含む）
    │      ├─ セットアップ途中である旨の説明
    │      ├─ 数分で始められる旨の説明
    │      ├─ "Create your first agent"ボタン（buttonスタイル適用）
    │      ├─ examples galleryへのリンク
    │      ├─ サポートメールアドレス
    │      └─ 署名セクション（signatureTextスタイル適用）
    │
    └─ EmailFooter (email-footer.tsx)
           └─ リンク、SNSアイコン、著作権表示
```

### データフロー図

```
[入力]                              [処理]                         [出力]

アプリケーションからの
userName + ───▶ ReminderEmail ───▶ HTMLメール
returnToGiselleUrl   コンポーネント      （対象ユーザー宛に
+ examplesGalleryUrl                       アプリ経由で送信）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| 03-reminder.tsx | `apps/studio.giselles.ai/emails/marketing/onboarding/03-reminder.tsx` | ソース | リマインダーメールテンプレート |
| 01-welcome.tsx | `apps/studio.giselles.ai/emails/marketing/onboarding/01-welcome.tsx` | ソース | オンボーディングシリーズ第1通目（ウェルカム） |
| 02-first-workspace.tsx | `apps/studio.giselles.ai/emails/marketing/onboarding/02-first-workspace.tsx` | ソース | オンボーディングシリーズ第2通目（ワークスペース作成案内） |
| email-header.tsx | `apps/studio.giselles.ai/emails/components/email-header.tsx` | ソース | メールヘッダーコンポーネント |
| email-footer.tsx | `apps/studio.giselles.ai/emails/components/email-footer.tsx` | ソース | メールフッターコンポーネント |
| email-styles.ts | `apps/studio.giselles.ai/emails/components/email-styles.ts` | ソース | 共通スタイル定義 |
