Communitygithub.com

초대장 빌더

헤더 이미지, 원탭 회신, 캘린더 파일이 있는 HTML 초대 메일을 만들고, 손님보다 먼저 주최자에게 테스트로 보냅니다.

초대장 빌더란 무엇인가요?

행사를 실제로 보낼 수 있는 초대장으로 만듭니다. 장소, 시작과 종료, 헤더 이미지, 받은편지함용 HTML, 회신 버튼, ics, 회신 시트를 갖추고 먼저 주최자에게 테스트를 보여 줍니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flyncl/invite-builder-skill/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

The Invite-Builder Skill

기능 설명

이 스킬은 Claude용으로 설계되었으며 해당 환경에서 잘 작동합니다. 초대받는 사람의 받은 편지함(스팸으로 분류되지 않음)에 도착하는 자체 디자인한 HTML 이메일 초대장을 만듭니다. 게스트가 한 번만 탭하면 되는 RSVP 버튼, 캘린더에 추가 링크, 헤더 시각 자료가 포함됩니다. 마지막으로 사용자에게 테스트 이메일을 보냅니다. 명시적인 승인 없이는 누구에게도 이메일을 보내지 않습니다. RSVP를 스프레드시트로 추적합니다.

1단계 - 이벤트 세부 정보 (먼저 질문)

다음 순서대로 한 번에 하나씩 질문하세요. 메시지당 하나의 질문(또는 AskUserQuestion 호출당)으로 하고, 다음 질문을 하기 전에 답변을 기다리세요. 사용자가 이미 답변한 내용은 건너뜁니다. 다음을 수집합니다:

  • 이벤트 이름과 사용자가 원하는 정확한 문구 (사용자가 가지고 있다면 그대로 사용)
  • 날짜와 시간대
  • 시작 시간 및 종료 시간. 항상 두 가지를 별도의 질문으로 물어보세요. 종료 시간을 추정하거나 임의로 만들지 마세요. 캘린더에 추가 링크와 .ics 파일 모두 종료 시간이 필요합니다. 호스트가 고정된 종료 시간이 없는 경우("늦게까지"), 캘린더 항목에 넣을 종료 시간과 초대장 자체에 종료 시간을 표시할지 아니면 캘린더 전용으로 남길지 물어보세요.
  • 전체 주소 (도로명, 시/군, 도/주, 우편번호 - 지도 앱에 우편번호 필요)
  • 호스트 이름과 서명 (예: "XOXO Clare and Conrad")
  • 강조할 특징 (밴드, 연사, 드레스 코드)
  • RSVP 마감일과 "Maybe - 알림" 옵션을 원하는지 여부
  • 발송할 이메일 계정 (전달성을 위해 실제 개인 받은 편지함이 가장 좋음)
  • 전화번호만 있거나 이메일보다 문자에 더 빨리 응답하는 게스트를 위한 문자 메시지 버전도 원하는지 여부 (3b단계 참조)

날짜와 요일이 일치하는지 확인하고(예: 2026년 12월 19일이 토요일인지 확인) 알립니다.

1b단계 - 게스트 목록

질문: "업로드할 게스트 목록이 있습니까, 아니면 제가 스프레드시트를 만들어 드릴까요?"

A. 게스트 목록이 있는 경우 (Google Sheet 링크, CSV 또는 Excel 업로드, 과거 Paperless Post / Evite 내보내기, 또는 붙여넣은 목록):

  • 읽고 원본 옆에 깨끗한 추적기 탭을 만듭니다(원본 탭은 절대 편집하지 않음): ID(G001...), 게스트 이름, 이메일, 전화, 초대됨(숫자), 상태, 참석, 게스트 메모, 이전 응답(출처에 있는 경우), 플래그, 초대장 발송됨, 알림 발송됨, 마지막 업데이트.
  • 중복 항목 병합(두 주소 아래 동일 가구, 별도로 응답한 파트너, "추가 게스트" 행)하고 각 병합을 플래그에 기록합니다.
  • 상태를 "발송되지 않음"으로 설정하거나, 전화 전용 게스트 및 이전에 반송된 주소는 "이메일 필요"로 설정합니다. 초대장을 필터링할 수 있는 회사 주소에 플래그를 지정합니다.
  • 요약 탭 추가: 인원수(상태가 예인 참석의 SUMPRODUCT), 예 / 아마도 / 아니오 / 초대됨 / 발송되지 않음 / 이메일 필요 / 반송 횟수, 총 가구 수, 최대 가능 게스트 수. 상태 드롭다운을 추가합니다.
  • 개수, 병합 내용, 이메일 주소가 누락된 게스트 목록을 보고합니다.

B. 새 목록을 원하는 경우:

  • 동일한 추적기 및 요약 탭이 비어 있는 "[이벤트 이름] [년도] 게스트 목록.xls" 파일을 만들고 링크를 공유합니다.
  • 이름과 이메일을 붙여넣거나 채팅으로 알려주면 추가할 수 있다고 알려줍니다.

C. 아직 준비되지 않은 경우: 디자인을 계속 진행하고 5단계 전에 목록으로 돌아옵니다. 목록 없이는 절대 발송하지 마십시오.

2단계 - 헤더 시각 자료

질문: "사용하고 싶은 헤더 이미지가 있습니까?"

A. 이미지를 업로드한 경우.

  • 살펴봅니다. 이미지에서 샘플링된 2-3가지 색상(주요 악센트, 텍스트용 어두운 색, 배경용 밝은 색)과 분위기에 맞는 글꼴 쌍(장난기 있는 이미지 -> 둥근 세리프; 사진적 또는 세련된 -> 깔끔한 산세리프; 빈티지 -> 조각된 세리프)을 선택합니다.
  • 투명 배경이 있는 경우 초대장 배경색(흰색 레이아웃의 경우 흰색)으로 평평하게 만듭니다. 흰색 페이지의 투명 PNG는 상자 이미지보다 더 깔끔해 보입니다.
  • 이미지에 맞춰 하나의 디자인을 만든 후, 사용자가 요청하는 경우에만 두 가지 변형을 제공합니다.

B. 이미지가 없는 경우.

  • 원하는 분위기(예: 아늑함, 화려함, 레트로, 미니멀, 축제적, 우아함, 엉뚱함)와 사용하거나 피해야 할 색상을 물어봅니다.
  • 직접 헤더 이미지를 만듭니다:
    • 연결된 이미지 생성 도구(예: Canva generate-image)가 있으면 선호합니다. 넓은 배너(2:1), 평범하거나 투명한 배경의 피사체, 사용자가 원하지 않는 한 텍스트 없음을 요청합니다.
    • 그렇지 않으면 SVG로 원본 일러스트레이션을 그리고 Playwright를 사용하여 PNG로 렌더링합니다.
    • 알려진 캐릭터, 로고, 아트워크 또는 브랜드를 절대 재현하지 마십시오.
  • 각각 고유한 헤더, 글꼴 쌍 및 팔레트(예: Playful, Modern, Classic)를 가진 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, base64가 도구 호출에 맞도록 30KB 미만을 목표로 합니다. 명시적인 너비/높이 속성을 설정합니다.
  • 일관되게 왼쪽 정렬 또는 중앙 정렬 - 모든 섹션(세부 정보, 특징, RSVP, 서명)을 같은 가장자리에 맞춥니다.
  • 어떤 사본에도 em 대시를 사용하지 마십시오. 하이픈을 사용하십시오.
  • 모든 곳에서 렌더링되는 기호를 사용하십시오(예: ❄ 눈송이, ◆ 다이아몬드, 📅 캘린더). 장식으로 문자 그대로의 별표는 피하십시오.

RSVP 버튼(mailto, 양식 또는 로그인 없음)

호스트 주소로 미리 채워진 제목과 본문이 있는 세 개의 mailto 버튼:

  • 예: 제목 RSVP YES: <Event>; 본문 "How many of us are coming (please fill in):"에 빈칸 - 절대 인원수를 추정하지 마십시오.
  • Maybe - 알림: 제목 RSVP MAYBE: <Event>; 본문 "Hoping to make it - please remind me closer to the date."
  • 아니오: 제목 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 캘린더 링크, 사용자가 원하는 경우에만(길어서 텍스트가 스팸처럼 보일 수 있음).
  • em 대시 없음. 사용자가 요청하는 경우에만 이모지. 사용자가 복사하거나 메시지에서 열 수 있도록 메시지 작성 카드에 표시합니다. Maybe 응답자 및 답장 없는 게스트를 위한 한 줄 알림 텍스트도 제공합니다.
  • 사용자에게 분명히 말합니다: 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에 있는 사용자에게 주소가 지정된 하나의 Gmail DRAFT(인라인 이미지는 메시지당 첨부되어야 하므로 게스트별 개인 발송은 실용적이지 않음). 사용자가 승인하거나 직접 보냅니다.
  • 전화번호만 있는 게스트, 반송된 주소, 중복 항목 및 초대장을 필터링할 수 있는 회사 주소에 플래그를 지정합니다.
  • 발송 후 해당 행을 발송 날짜와 함께 "초대됨"으로 표시합니다.

6단계 - 지속적인 추적 (예약된 작업으로 설정)

동일한 트래커에 대한 지속적인 추적을 제공합니다: 새로 추가된 게스트를 선택하고, 제목이 subject:RSVP subject:와 일치하는 답장을 읽고, 시트를 업데이트하고, 알림 날짜에 Maybe 및 답장 없는 게스트에게 알림을 작성(절대 보내지 않음)하고, 변경 사항이 있을 때만 호스트에게 업데이트 이메일을 보내는 예약된 작업.

작업을 만들기 전에 한 번에 하나씩 질문합니다(메시지당 하나의 질문 또는 AskUserQuestion 호출, 각 답변을 기다림):

  1. RSVP를 위해 받은 편지함을 모니터링하시겠습니까? 예: Claude가 RSVP 답장(버튼 답장 및 초대장에 대한 자유 텍스트 답장)을 읽고, 각 답변, 인원수 및 메모를 트래커에 기록하고, 변경 사항이 있을 때 업데이트 이메일을 보냅니다. 아니오: Claude는 받은 편지함을 읽지 않으며 호스트가 직접 트래커를 업데이트하거나 채팅에서 Claude에게 알립니다.
  2. 예인 경우: RSVP를 위해 받은 편지함을 얼마나 자주 확인해야 합니까? 옵션: 매시간(마지막 2주 동안 가장 좋음), 몇 시간마다, 하루에 한 번(가장 적은 업데이트 이메일), 또는 기타. 매시간은 일반적으로 예약된 작업이 허용하는 가장 짧은 간격입니다. 날짜에 가까워짐에 따라 다른 속도를 원하는 경우(예: 지금은 매일, 마지막 주에는 매시간), 첫 번째 일정을 설정하고 변경하라는 일회성 알림을 제공합니다.
  3. 새 게스트가 트래커에 추가될 때 자동으로 초대장을 받아야 합니까? Claude가 각 새 행에 마스터 초대장을 전달하거나(호스트는 이름과 이메일만 입력), Claude가 호스트가 보낼 초안을 만들거나, 또는 둘 다 아닙니다. 자동 발송은 예약된 실행에 Gmail 보내기/전달 도구가 필요합니다. 조직의 설정이 이를 제거하는 경우 사전에 말하고 초안으로 대체합니다.
  4. 질문 3에 예인 경우: 새 게스트를 위해 트래커를 얼마나 자주 확인해야 합니까? 질문 2와 동일한 옵션을 제공하고 하나의 작업이 둘 다 수행할 수 있도록 RSVP 확인과 동일한 일정을 제안합니다. 호스트가 다른 속도를 요청하는 경우에만 별도의 일정을 사용하십시오.
  5. 1단계에서 문자 질문에 답하지 않은 경우 지금 질문합니다: 문자 메시지 버전도 원하십니까? 예인 경우 3b단계를 수행합니다.

질문 1과 질문 3에 대한 답변이 모두 아니오인 경우 예약된 작업을 만들지 마십시오. 추적이 꺼져 있으며 나중에 요청할 수 있다고 말합니다.

그렇지 않으면 호스트가 켠 내용만 포함하는 상시 지침을 Claude 프로젝트(이벤트당 하나의 .md)에 작성하고 선택한 일정으로 예약된 작업을 만듭니다. 또한 호스트에게 작업이 어떤 승인 설정을 받았는지 알립니다.

관련 스킬