Communitygithub.com

招待状ビルダー

ヘッダー画像、ワンタップ出欠、カレンダーファイル付きのHTML招待メールを作り、ゲストの前に主催者へテスト送信します。

招待状ビルダー とは?

イベントを実際に送れる招待状にします。場所、開始と終了、見出し画像、受信箱に届くHTML、出欠ボタン、ics、出欠表を揃え、まず主催者にテストを見せます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flyncl/invite-builder-skill/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Invite-Builder スキル

機能

このスキルは Claude 向けに設計されており、その環境でうまく動作します。招待状の受信トレイに届き(スパムを回避)、ワンタップの RSVP ボタン、カレンダー追加リンク、ヘッダービジュアルを備えた、自作の HTML メール招待状を作成します。最後にユーザーにテストメールを送信します。明示的な承認なしに誰にもメールを送信しません。RSVP をスプレッドシートで追跡します。

ステップ 1 - イベント詳細(最初に質問する)

以下の質問を 1 つずつ、この順番で行います:メッセージごと(または AskUserQuestion 呼び出しごと)に 1 つの質問をし、次の質問をする前に回答を待ちます。ユーザーが既に回答した質問はスキップします。以下を収集します:

  • イベント名とユーザーが希望する正確な文言(ユーザーが持っている場合はそのまま使用)
  • 日付とタイムゾーン
  • 開始時間と終了時間。常に両方を別々の質問として尋ねます。終了時間を推測したり、でっち上げたりしないでください:カレンダー追加リンクと .ics ファイルの両方に必要です。ホスト側に固定の終了時間がない場合(「遅くまで」など)、カレンダーエントリにどの終了時間を入れるか、招待状自体に終了時間を表示するか、カレンダーのみにするかを尋ねます。
  • 完全な住所(番地、市区町村、都道府県、郵便番号 - 郵便番号は地図アプリで必要)
  • ホストの名前と署名(例: "XOXO Clare and Conrad")
  • 強調する特徴(バンド、スピーカー、ドレスコード)
  • RSVP 期限日と、「未定 - 後で通知」オプションの希望有無
  • 送信元のメールアカウント(配信性を高めるには実際の個人用受信トレイが最適)
  • 電話番号のみのゲストや、メールよりもテキストに素早く返信するゲスト向けに、テキストメッセージ版も希望するかどうか(ステップ 3b を参照)

日付と曜日が一致していることを確認し(例:2026 年 12 月 19 日が土曜日であることを確認)、その旨を伝えます。

ステップ 1b - ゲストリスト

「ゲストリストをアップロードしますか、それとも私がスプレッドシートを作成しましょうか?」と尋ねます。

A. ゲストリストがある場合(Google スプレッドシートのリンク、CSV または Excel のアップロード、過去の Paperless Post / Evite のエクスポート、または貼り付けられたリスト):

  • 読み取り、元のタブは編集せずに、その横にクリーンなトラッカータブを作成します:ID(G001...)、ゲスト名、メール、電話、招待済み(数)、ステータス、出席、ゲストメモ、以前の返信(ソースにある場合)、フラグ、招待状送信済み、リマインダー送信済み、最終更新。
  • 重複をマージします(同じ世帯の 2 つのアドレス、個別に返信したパートナー、「追加ゲスト」行)し、各マージをフラグに記録します。
  • ステータスを「未送信」に設定するか、電話のみのゲストと以前バウンスしたアドレスは「メールが必要」に設定します。招待状をフィルタリングする可能性のある職場のアドレスにフラグを立てます。
  • サマリータブを追加します:人数(Status = Yes の Attending の SUMPRODUCT)、Yes / Maybe / No / 招待済み / 未送信 / メールが必要 / バウンス済みの数、総世帯数、最大可能ゲスト数。ステータスのドロップダウンを追加します。
  • カウント、マージ、メールアドレスがないゲストのリストを報告します。

B. 新しいリストが必要な場合:

  • 「[イベント名] [年] ゲストリスト」という名前の xls ファイルを同じトラッカーとサマリータブで作成し、空の状態でリンクを共有します。
  • 名前とメールを貼り付けられること、またはチャットで伝えてもらえれば追加することを伝えます。

C. まだの場合: デザインを進め、ステップ 5 の前にリストに戻ります。リストなしで送信しないでください。

ステップ 2 - ヘッダービジュアル

「使用したいヘッダー画像はありますか?」と尋ねます。

A. 画像をアップロードされた場合。

  • それを確認します。そこからサンプリングした 2〜3 色(支配的なアクセントカラー、テキスト用の暗い色、背景用の明るい色)と、その雰囲気に合ったフォントの組み合わせ(遊び心のある画像 -> 丸みを帯びたセリフ体;写真や洗練されたもの -> クリーンなサンセリフ体;ビンテージ -> 彫刻的なセリフ体)を選択します。
  • 透明な背景がある場合は、招待状の背景色(白いレイアウトの場合は白)にフラットにします。透明 PNG は、ボックス化された画像よりも白いページでよりきれいに見えます。
  • それに合わせて 1 つのデザインを作成し、ユーザーが要求した場合にのみ 2 つのバリエーションを提供します。

B. 画像がない場合。

  • どのような雰囲気を希望するか(例:居心地が良い、グラマラス、レトロ、ミニマル、華やか、エレガント、ばかげている)と、使用または避けたい色を尋ねます。
  • 自分でヘッダー画像を作成します:
    • 画像生成ツールが接続されている場合はそれを優先します(例:Canva generate-image)。ワイドバナー(2:1)、被写体は無地または透明な背景、ユーザーが希望しない限りテキストはなしを依頼します。
    • それ以外の場合は、オリジナルのイラストを SVG として描画し、Playwright で PNG にレンダリングします。
    • 既知のキャラクター、ロゴ、アートワーク、ブランドを複製しないでください。
  • それぞれ独自のヘッダー、フォントの組み合わせ、パレット(例:遊び心のある、モダンな、クラシックな)を持つ 3 つの異なるオプションを生成します。3 つすべてを電話画面幅で並べて表示し、ユーザーが選択または組み合わせられるようにします。

ステップ 3 - メールの作成(苦労して学んだルール)

メールクライアントはブラウザではありません。以下のすべてに従ってください:

  • レイアウト:ネストされた <table role="presentation">、最大幅 520〜560px、すべてのスタイルはインライン。CSS クラス、flexbox、外部画像は使用しないでください。
  • フォント:ウェブセーフなスタックのみ:'Helvetica Neue',Helvetica,Arial,sans-serif、Palatino,'Palatino Linotype','Book Antiqua',serif、'Times New Roman',Times,serif、Georgia,serif。個性は太さ、文字間隔、大文字、サイズから引き出し、カスタムフォントからは引き出さないでください。
  • 色付きの背景ブロックにテキストを配置しないでください。一部のクライアントはテーブルの背景を削除し、白いテキストを白地に残します。代わりに、ページの背景に色付きのテキストを使用します。ソリッドボタンの場合、ラッピング <td> の bgcolor="#hex" とリンクの background: の両方に色を設定します。
  • ヘッダー画像:インラインで添付し、src="cid:att0"(最初の添付ファイル)として参照します。幅約 400〜520px にリサイズし、JPEG 品質約 45〜60、30KB 未満を目標とし、base64 がツール呼び出しに収まるようにします。明示的な width/height 属性を設定します。
  • 左揃えまたは中央揃えを一貫して行います - すべてのセクション(詳細、特徴、RSVP、署名)を同じ端に揃えます。
  • どのコピーにもダッシュは使用しないでください。ハイフンを使用します。
  • どこでもレンダリングされる記号を使用します(例:❄ 雪の結晶、◆ ダイヤモンド、📅 カレンダー)。装飾としてリテラルのアスタリスクは避けてください。

RSVP ボタン(mailto、フォームやログインなし)

3 つのボタン。それぞれ、ホストのアドレスへの mailto で、件名と本文が事前に入力されています:

  • Yes: 件名 RSVP YES: <Event>;本文「How many of us are coming (please fill in):」(人数を尋ねる)と空白 - 人数を決して推測しないでください。
  • 未定 - 後で通知: 件名 RSVP MAYBE: <Event>;本文「Hoping to make it - please remind me closer to the date.」
  • No: 件名 RSVP NO: <Event>。件名と本文を URL エンコードします(urllib.parse.quote)。ユーザーが希望する場合にのみ、ボタンの下に注釈を付けます:ゲストは単に返信することもできます。

カレンダーに追加

Google カレンダーのテンプレート URL へのカレンダーアイコン付きリンク:https://calendar.google.com/calendar/render?action=TEMPLATE&text=&dates=YYYYMMDDTHHMMSS/YYYYMMDDTHHMMSS&ctz=&location=&details=

また、Apple カレンダーと Outlook ユーザー向けに .ics ファイルを添付します(METHOD:PUBLISH、VTIMEZONE ブロック、TZID 付きの DTSTART/DTEND、エスケープされたカンマ付きの LOCATION、CRLF 行末)。

リンクはカレンダー招待状をプッシュできないこと、実際のカレンダー招待状はゲストリストを全員に公開してしまうことをユーザーに説明します。

ステップ 3b - テキストメッセージ版(ステップ 1 でユーザーが「はい」と答えた場合のみ)

ホストが自分の電話から送信できる短いプレーンテキスト版を作成します:

  • 可能であれば約 320 文字以内に収め、複数のメッセージに分割されないようにします。プレーンテキストのみ:HTML、画像、添付ファイルはなし。
  • ホストの口調で、メールと同じ文言:イベント名、曜日と日付、開始時間、完全な住所、ハイライト(バンド、ドレスコード)、署名。
  • RSVP 行:「Reply YES (and how many of you), MAYBE or NO」。mailto リンクは使用しないでください:電話では使いにくいです。
  • オプションのカレンダー追加行:ステップ 3 の Google カレンダーリンク(長く、テキストをスパムのように見せるため、ユーザーが希望する場合のみ)。
  • ダッシュはなし。絵文字はユーザーが要求した場合のみ。メッセージ作成カードで表示し、ユーザーがコピーしたりメッセージアプリで開いたりできるようにします。未定および未返信ゲスト向けの 1 行リマインダーテキストも提供します。
  • ユーザーに明確に伝えます:Claude はテキストを送信したり、テキストの返信を読んだりすることはできません。ユーザー自身がテキストを送信し、返信が届いたときにトラッカーを更新するか、Claude に伝えて Claude が更新します。トラッカーでは、テキストで送信したゲストのステータスを「招待済み(テキスト)」、招待状送信日に日付を記録し、メール実行で重複して送信されないようにします。

ステップ 4 - プレビュー、そしてテスト送信

  • ヘッダーをローカルファイルに置き換えた HTML をレンダリングし、Playwright で幅 400px(device_scale_factor 2)と 640px でスクリーンショットを撮ります。ユーザーに見せる前に自分で確認します。プレビューを [YY MM DD] [Event] Invite Preview.png として保存し、提供します。
  • ユーザーのフィードバックに基づいて文言、レイアウト、色を繰り返し修正し、そのたびに再プレビューします。
  • テストする時が来たら:件名に [TEST](次に [TEST 2] など)をプレフィックスとして付け、インライン画像と .ics ファイル、プレーンテキストの代替本文を添付して、ユーザーにのみメールを送信します。以下の確認を依頼します:画像がインラインで表示されるか、ボタンが事前入力された返信を開くか、ソリッドボタンが表示されるか、カレンダーリンクとファイルの両方が機能するか、電話で正しく表示されるか。
  • 最終テンプレート、.ics ファイル、イベントの事実を、Claude プロジェクトが添付されている場合はそれに保存し、後のセッションで送信できるようにします。

ステップ 5 - ゲストへの送信(ユーザーが準備完了と言った場合のみ)

  • ステップ 1b のトラッカーを使用します。メールがあり、ステータスが「未送信」のすべての行が送信対象になります。「メールが必要」とマークされた行は、ユーザーが解決するためにリストされます。
  • デフォルト:すべてのゲストを BCC に含めた、ユーザー宛の 1 つの Gmail 下書きを作成します(インライン画像はメッセージごとに添付する必要があるため、ゲストごとに個別の送信は現実的ではありません)。ユーザーが承認するか、自分で送信します。
  • 電話番号のみのゲスト、バウンスしたアドレス、重複、招待状をフィルタリングする可能性のある職場のアドレスにフラグを立てます。
  • 送信後、該当行を送信日付とともに「招待済み」にマークします。

ステップ 6 - 継続的な追跡(スケジュールされたタスクとして設定)

同じトラッカーに対する継続的な追跡を提供します:新しく追加されたゲストを取得し、件名が RSVP subject: と一致する返信を読み取り、シートを更新し、リマインダー日に未定および未返信のゲストにリマインダーを下書き(送信はしない)し、変更があった場合にのみホストに更新メールを送信するスケジュールタスクです。

タスクを作成する前に、以下の質問を 1 つずつ(メッセージごとまたは AskUserQuestion 呼び出しごとに 1 つの質問、各回答を待つ)尋ねます:

  1. 受信トレイの RSVP を監視してほしいですか?「はい」の場合:Claude が RSVP 返信(ボタン返信と招待状への自由記述返信)を読み、各回答、人数、メモをトラッカーに記録し、変更があった場合に更新メールを送信します。「いいえ」の場合:Claude は受信トレイを読み取らず、ホスト自身がトラッカーを更新するか、Claude にチャットで伝えます。
  2. はいの場合:どのくらいの頻度で受信トレイの RSVP を確認しますか?オプション:1 時間ごと(最後の 2 週間は最適)、数時間ごと、1 日 1 回(更新メールが最小)、またはその他。通常、1 時間ごとがスケジュールタスクで許可される最小間隔です。日付が近づくにつれて異なるペースが必要な場合(例:今は毎日、最終週は毎時間)、最初のスケジュールを設定し、変更を促す 1 回限りのリマインダーを提供します。
  3. 新しいゲストがトラッカーに追加されたときに、自動的に招待状を送信しますか?Claude がマスター招待状を新しい各行に転送するか(ホストは名前とメールを入力するだけ)、Claude がホストが送信する下書きを作成するか、またはどちらもしないかのいずれかです。自動送信には、スケジュール実行での Gmail 送信/転送ツールが必要です。組織の設定でそれが削除されている場合は、事前にその旨を伝え、下書きにフォールバックします。
  4. 質問 3 で「はい」の場合:どのくらいの頻度でトラッカーで新しいゲストを確認しますか?質問 2 と同じオプションを提供し、RSVP チェックと同じスケジュールを提案して、1 つのタスクで両方を実行します。ホストが異なるペースを要求した場合にのみ、別々のスケジュールを使用します。
  5. ステップ 1 でテキストに関する質問に回答していない場合、今尋ねます:テキストメッセージ版も必要ですか?はいの場合、ステップ 3b を実行します。

質問 1 と質問 3 の両方の答えが「いいえ」の場合、スケジュールタスクを作成しません。追跡はオフになっており、後で依頼できることを伝えます。

それ以外の場合は、ホストが有効にした内容のみをカバーする常設指示を Claude プロジェクトに(イベントごとに 1 つの .md)書き込み、選択されたスケジュールでスケジュールタスクを作成します。また、タスクに設定された承認設定をホストに伝えます。

関連スキル