← 목록으로
2026-02-28plans

Richbukae AI 설계자 PLF v2 마케팅 시스템 Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: PLF(Product Launch Formula) 4단계 + AI 설계자 원칙 기반 메시징으로 richbukae 첫 유료 고객 3건+ 달성

Architecture: Pre-Pre-Launch(관심생성) → Pre-Launch 3단계 PLC(가치 제공) → Launch 48h 카트오픈 → Post-Launch(커뮤니티) 순서로 단계별 이메일·SNS·랜딩을 오케스트레이션. v1의 선형 퍼널을 PLF 이벤트 기반 출시 사이클로 업그레이드.

Tech Stack: Next.js 15 (richbukae.com), Brevo SDK (@getbrevo/brevo), GetLate API, Turso (marketing-os), GA4, Toss Payments

작성일: 2026-02-28 | 작성: Jarvis 총괄이사 | 승인: 머스크 VP


🎯 PLF v2 전략 개요

설계자 원칙 기반 메시징

원칙메시지적용 단계
가치 명제"AI를 도구가 아닌 비즈니스 설계의 핵심으로"전 단계 일관 적용
해결하는 문제"AI 도구는 많지만 사업에 적용하는 방법을 모른다"Pre-Pre-Launch
성공 스토리"주당 10시간 절약 + 실제 매출 사례"Pre-Launch PLC#2
커뮤니티"AI 설계자 마스터마인드 그룹"Post-Launch

📐 PLF 4단계 전체 구조

[Stage 0: Pre-Pre-Launch — Week 1-2]
  GetLate SNS 13개 플랫폼: "AI 설계자 시대 온다" 콘텐츠
  richbukae.com 리드 수집 페이지 (무료 가이드 CTA)
  Brevo 리스트 7 이메일 수집
  목표: SNS 노출 5,000+ / 이메일 리드 50명

         ↓

[Stage 1: Pre-Launch — Week 3 (PLC 3편)]
  PLC#1 이메일: "AI 설계자의 기회 — 왜 지금인가?" (D+0)
  PLC#2 이메일: "AI 설계자 방법론 공개 — 실제 케이스" (D+2)
  PLC#3 이메일: "당신의 AI 설계자 계획 — 같이 만들어 봐요" (D+4)
  목표: 오픈율 40%+ / 클릭률 15%+ / 구매 의향 확인

         ↓

[Stage 2: Launch — Week 4 (D+7~D+9)]
  D+7: 카트 오픈 (48시간 한정 얼리버드가)
  D+8: FAQ + 소셜 증명 메일
  D+9: 마감 2시간 전 최종 알림
  Toss 결제 + marketing-os DB 기록 + GA4 purchase
  목표: 결제 3건+ / 매출 ₩147,000+

         ↓

[Stage 3: Post-Launch — Week 5+]
  구매자 온보딩 시퀀스 (D+0/3/7 웰컴 + AI 설계자 활용법)
  AI 설계자 커뮤니티 초대 (오픈카카오/디스코드)
  다음 PLF 사이클 티징
  목표: 구매자 만족도 4.5/5 / 재구매 준비

📊 KPI 정의 (PLF v2)

단계지표PLF v2 목표측정 도구
Pre-Pre-LaunchSNS 노출5,000 (2주)GetLate
Pre-Pre-Launch이메일 리드50명Brevo
Pre-LaunchPLC 오픈율40%+Brevo
Pre-LaunchPLC 클릭률15%+Brevo
Launch결제 전환3건+Toss + DB
Launch매출₩147,000+marketing-os
Post-Launch구매자 활성화100%Brevo

Task 1: PLF Pre-Pre-Launch 랜딩 페이지 업그레이드

CEO 블로킹 없음 — 즉시 착수 가능

Files:

  • Modify: projects/richbukae-store/src/app/page.tsx (메인 랜딩)
  • Create: projects/richbukae-store/src/app/free-guide/page.tsx (리드 수집 페이지)

Step 1: 메인 랜딩 헤드라인 설계자 원칙으로 교체

src/app/page.tsx 히어로 섹션 헤드라인 변경:

// 변경 전 (일반적 AI 도구 소개)
// 변경 후 (설계자 원칙 기반)
<h1>AI를 도구가 아닌 비즈니스 설계의 핵심으로</h1>
<p>
  AI 도구는 넘쳐납니다. 하지만 당신의 사업에 적용하는 방법을 아는 사람은 드뭅니다.
  AI 설계자 시리즈는 구체적인 프레임워크를 제공합니다.
</p>
<p className="text-sm text-gray-500">
  ⚡ PLF 얼리버드 출시 예정 — 무료 가이드로 먼저 시작하세요
</p>

Step 2: 무료 가이드 리드 수집 페이지 생성

// projects/richbukae-store/src/app/free-guide/page.tsx
export default function FreeGuidePage() {
  return (
    <main className="min-h-screen bg-white">
      <section className="max-w-2xl mx-auto px-4 py-16 text-center">
        <div className="text-sm font-medium text-blue-600 mb-4">
          무료 공개 — AI 설계자 스타터 가이드
        </div>
        <h1 className="text-3xl font-bold text-gray-900 mb-4">
          AI 설계자의 3가지 핵심 원칙
        </h1>
        <p className="text-lg text-gray-600 mb-8">
          매주 10시간을 절약하고 매출을 키운 실제 AI 설계 방법론을 무료로 드립니다.
        </p>
        {/* 구독 폼 — 기존 NewsletterForm 컴포넌트 재사용 */}
        <NewsletterForm
          source="free-guide-plf"
          ctaText="무료 가이드 받기"
          successMessage="가이드를 이메일로 보내드렸습니다! 확인해주세요."
        />
        <p className="text-xs text-gray-400 mt-4">
          스팸 없음 · 언제든지 구독 취소 가능
        </p>
      </section>
    </main>
  );
}

Step 3: 빌드 테스트

cd projects/richbukae-store && npm run build 2>&1 | grep -E "error|✓|Route"

Expected: ✓ Compiled successfully + /free-guide 라우트 확인

Step 4: Commit

git add projects/richbukae-store/src/app/page.tsx
git add projects/richbukae-store/src/app/free-guide/page.tsx
git commit -m "feat: PLF v2 pre-pre-launch landing + free-guide lead capture page"

Task 2: Brevo PLF 이메일 시퀀스 v2 (PLC 3편 + Launch 3편)

CEO 블로킹 없음 — 즉시 착수 가능

Files:

  • Create: projects/richbukae-store/src/lib/brevo-plf-sequences.ts
  • Modify: projects/richbukae-store/src/app/api/subscribe/route.ts

Step 1: PLF 이메일 시퀀스 라이브러리 생성

// projects/richbukae-store/src/lib/brevo-plf-sequences.ts
import * as SibApiV3Sdk from '@getbrevo/brevo';

const client = new SibApiV3Sdk.TransactionalEmailsApi();
client.setApiKey(
  SibApiV3Sdk.TransactionalEmailsApiApiKeys.apiKey,
  process.env.BREVO_API_KEY!
);

const SENDER = { name: '리치부캐 AI 설계자', email: 'contact@richbukae.com' };

export interface SubscriberInfo {
  email: string;
  firstName?: string;
  source?: string;
}

// ━━━ Stage 0: Pre-Pre-Launch 웰컴 (D+0) ━━━
export async function sendPrePreLaunchWelcome(sub: SubscriberInfo): Promise<void> {
  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '🎯 AI 설계자 무료 가이드 — 핵심 원칙 3가지',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a;">
        <h1 style="font-size: 24px;">안녕하세요, ${sub.firstName || ''}님!</h1>
        <p>AI 설계자 가이드를 요청해 주셔서 감사합니다.</p>

        <h2 style="color: #2563eb;">AI 설계자의 3가지 핵심 원칙</h2>
        <ol>
          <li style="margin-bottom: 12px;">
            <strong>문제 정의 먼저</strong><br>
            AI 도구보다 해결할 문제를 먼저 명확히. AI는 도구이고, 설계는 당신이 합니다.
          </li>
          <li style="margin-bottom: 12px;">
            <strong>프롬프트 시스템화</strong><br>
            한 번 잘 만든 프롬프트를 팀 전체가 반복 사용. 1시간 → 5분.
          </li>
          <li style="margin-bottom: 12px;">
            <strong>측정 가능한 목표</strong><br>
            AI 도입 전후 수치를 비교해야 개선이 보입니다.
          </li>
        </ol>

        <div style="background: #f0f7ff; padding: 20px; border-radius: 8px; margin: 24px 0; border-left: 4px solid #2563eb;">
          <strong>다음 이메일 예고 (2일 후)</strong><br>
          AI 설계자 시대가 왜 지금인지 — 놓치면 후회할 기회를 공유합니다.
        </div>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 1: PLC#1 — "왜 지금인가?" (D+2) ━━━
export async function sendPLC1Opportunity(sub: SubscriberInfo): Promise<void> {
  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '⚡ AI 설계자의 기회 — 지금이 골든타임인 이유',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a;">
        <h1 style="font-size: 22px;">AI 설계자 시대, 왜 지금인가?</h1>

        <p>솔직히 말씀드립니다.</p>
        <p>AI 도구를 쓰는 사람과 AI로 <strong>설계하는 사람</strong>의 차이는 앞으로 3년 안에 극명하게 갈립니다.</p>

        <h2 style="color: #dc2626;">문제: AI 도구는 많지만 설계자는 없다</h2>
        <p>ChatGPT를 사용하는 사람은 이제 수억 명입니다.<br>
        하지만 그것을 비즈니스 구조에 녹여 실제 수익으로 연결하는 사람은 극소수입니다.</p>

        <h2 style="color: #16a34a;">기회: AI 설계자가 되면</h2>
        <ul>
          <li>반복 업무 90% 자동화 → 전략에 집중</li>
          <li>경쟁사 대비 10배 빠른 실행 속도</li>
          <li>AI가 만든 시스템이 자는 동안에도 동작</li>
        </ul>

        <div style="background: #fef3c7; padding: 20px; border-radius: 8px; margin: 24px 0; border-left: 4px solid #f59e0b;">
          <strong>다음 이메일 예고 (2일 후)</strong><br>
          실제로 AI 설계자 시리즈를 적용해서 바꾼 비즈니스 사례를 공유합니다.
        </div>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 1: PLC#2 — "실제 사례" (D+4) ━━━
export async function sendPLC2CaseStudy(sub: SubscriberInfo): Promise<void> {
  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '📊 AI 설계 전/후 비교 — 실제 수치로 보여드립니다',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a;">
        <h1 style="font-size: 22px;">AI 설계 적용 전/후 실제 사례</h1>

        <p>수치로 직접 보여드리겠습니다.</p>

        <table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
          <thead>
            <tr style="background: #f3f4f6;">
              <th style="padding: 12px; text-align: left; border: 1px solid #e5e7eb;">항목</th>
              <th style="padding: 12px; text-align: center; border: 1px solid #e5e7eb;">도입 전</th>
              <th style="padding: 12px; text-align: center; border: 1px solid #e5e7eb; color: #16a34a;">도입 후</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td style="padding: 12px; border: 1px solid #e5e7eb;">SNS 콘텐츠 제작</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb;">3시간/건</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb; color: #16a34a;"><strong>&lt;5분/건</strong></td>
            </tr>
            <tr style="background: #f9fafb;">
              <td style="padding: 12px; border: 1px solid #e5e7eb;">주간 리포트 작성</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb;">2시간</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb; color: #16a34a;"><strong>자동화</strong></td>
            </tr>
            <tr>
              <td style="padding: 12px; border: 1px solid #e5e7eb;">이메일 마케팅</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb;">수동 발송</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb; color: #16a34a;"><strong>구독 시 자동</strong></td>
            </tr>
            <tr style="background: #f9fafb;">
              <td style="padding: 12px; border: 1px solid #e5e7eb;">주당 절약 시간</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb;">—</td>
              <td style="padding: 12px; text-align: center; border: 1px solid #e5e7eb; color: #16a34a;"><strong>10시간+</strong></td>
            </tr>
          </tbody>
        </table>

        <div style="background: #ecfdf5; padding: 20px; border-radius: 8px; margin: 24px 0; border-left: 4px solid #16a34a;">
          <strong>🚀 다음 이메일 예고 (2일 후)</strong><br>
          당신의 업종에 AI 설계자 방법론을 어떻게 적용할지 — 같이 계획을 세워봅니다.
        </div>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 1: PLC#3 — "같이 만들어요" (D+6) ━━━
export async function sendPLC3Transformation(sub: SubscriberInfo): Promise<void> {
  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '🗺️ 당신의 AI 설계 로드맵 — 같이 만들어볼까요?',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a;">
        <h1 style="font-size: 22px;">당신의 AI 설계자 계획</h1>

        <p>${sub.firstName || ''}님은 어떤 업종에 계신가요?</p>
        <p>마케터, 스타트업 CEO, 프리랜서, 중소기업 대표 — 업종이 달라도 AI 설계 원칙은 같습니다.</p>

        <h2>AI 설계자 시리즈가 해결하는 것</h2>
        <ul>
          <li>✅ 내 업종에서 AI를 어디에 먼저 적용할지</li>
          <li>✅ 프롬프트를 어떻게 시스템화할지</li>
          <li>✅ AI 자동화로 절약한 시간을 매출로 전환하는 법</li>
          <li>✅ 경쟁사보다 6개월 앞서는 AI 설계 전략</li>
        </ul>

        <div style="background: #1e40af; color: white; padding: 24px; border-radius: 8px; margin: 24px 0; text-align: center;">
          <p style="font-size: 18px; font-weight: bold; margin: 0 0 8px;">곧 특별한 소식을 전합니다</p>
          <p style="margin: 0; opacity: 0.9;">AI 설계자 시리즈 한정 얼리버드 출시 — 내일 공개</p>
        </div>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 2: Launch — 카트 오픈 (D+7) ━━━
export async function sendLaunchCartOpen(sub: SubscriberInfo): Promise<void> {
  const bundleUrl = `${process.env.NEXT_PUBLIC_BASE_URL || 'https://richbukae.com'}/bundle`;

  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '🎉 드디어 오픈! AI 설계자 번들 — 얼리버드 48시간 한정',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a;">
        <div style="background: #dc2626; color: white; padding: 12px; text-align: center; border-radius: 8px 8px 0 0;">
          ⏰ 얼리버드 특별가 — 48시간 한정
        </div>

        <div style="padding: 24px;">
          <h1 style="font-size: 24px;">AI 설계자 시리즈 드디어 출시!</h1>
          <p>지난 1주일간 공유한 원칙들을 완전한 시스템으로 담았습니다.</p>

          <div style="background: #f0f7ff; padding: 20px; border-radius: 8px; margin: 20px 0;">
            <p style="font-size: 20px; font-weight: bold; margin: 0 0 8px;">AI 설계자 번들</p>
            <p style="font-size: 28px; font-weight: bold; color: #2563eb; margin: 0;">₩49,000</p>
            <p style="text-decoration: line-through; color: #999; margin: 4px 0 0;">정가 ₩79,000</p>
            <p style="color: #dc2626; font-size: 14px; margin: 4px 0 0;">얼리버드 38% 할인 · 48시간 한정</p>
          </div>

          <a href="${bundleUrl}" style="display: block; background: #1e40af; color: white; text-align: center; padding: 16px; border-radius: 8px; text-decoration: none; font-size: 18px; font-weight: bold; margin: 20px 0;">
            지금 얼리버드 가격으로 시작하기 →
          </a>
        </div>

        <p style="color: #666; font-size: 13px; padding: 0 24px 24px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 2: Launch — FAQ (D+8) ━━━
export async function sendLaunchFAQ(sub: SubscriberInfo): Promise<void> {
  const bundleUrl = `${process.env.NEXT_PUBLIC_BASE_URL || 'https://richbukae.com'}/bundle`;

  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '❓ 자주 묻는 질문 답변 + 실제 후기',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a; padding: 24px;">
        <h1 style="font-size: 22px;">Q&A — 가장 많이 묻는 질문</h1>

        <div style="margin: 20px 0;">
          <p><strong>Q: AI를 전혀 모르는데 따라할 수 있을까요?</strong></p>
          <p>A: 네. 설계자 시리즈는 도구 사용법보다 <em>어떻게 설계할지</em>에 집중합니다. AI 초보도 즉시 적용 가능합니다.</p>
        </div>

        <div style="margin: 20px 0;">
          <p><strong>Q: 어떤 업종에 적합한가요?</strong></p>
          <p>A: 마케팅, 커머스, 컨설팅, 크리에이터 등 콘텐츠·마케팅·운영이 있는 모든 업종에 적용됩니다.</p>
        </div>

        <div style="background: #fef9c3; padding: 20px; border-radius: 8px; margin: 24px 0; border-left: 4px solid #f59e0b;">
          ⏰ 얼리버드 마감 내일 자정 (24시간 남음)
        </div>

        <a href="${bundleUrl}" style="display: block; background: #1e40af; color: white; text-align: center; padding: 14px; border-radius: 8px; text-decoration: none; font-size: 16px; font-weight: bold;">
          얼리버드 가격으로 지금 시작 →
        </a>

        <p style="color: #666; font-size: 13px; margin-top: 24px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 2: Launch — 마감 최종 알림 (D+9) ━━━
export async function sendLaunchClosing(sub: SubscriberInfo): Promise<void> {
  const bundleUrl = `${process.env.NEXT_PUBLIC_BASE_URL || 'https://richbukae.com'}/bundle`;

  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '🔔 2시간 후 마감 — AI 설계자 얼리버드 종료',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a; padding: 24px;">
        <div style="background: #dc2626; color: white; padding: 16px; border-radius: 8px; text-align: center; margin-bottom: 24px;">
          <p style="font-size: 20px; font-weight: bold; margin: 0;">⏰ 2시간 후 얼리버드 마감</p>
        </div>

        <p>이후에는 정가 ₩79,000으로 복귀됩니다.</p>
        <p>지금 결정하지 않으면 ₩30,000 추가 지불이 필요합니다.</p>

        <a href="${bundleUrl}" style="display: block; background: #dc2626; color: white; text-align: center; padding: 18px; border-radius: 8px; text-decoration: none; font-size: 18px; font-weight: bold; margin: 24px 0;">
          마지막 기회 — 지금 시작하기 →
        </a>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

// ━━━ Stage 3: Post-Launch 온보딩 (구매자 전용) ━━━
export async function sendPostLaunchOnboarding(sub: SubscriberInfo): Promise<void> {
  await client.sendTransacEmail({
    to: [{ email: sub.email, name: sub.firstName || '안녕하세요' }],
    sender: SENDER,
    subject: '🎊 AI 설계자 시리즈 구매 감사합니다! 시작 가이드',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto; color: #1a1a1a; padding: 24px;">
        <h1 style="font-size: 22px;">AI 설계자 여정을 시작합니다!</h1>
        <p>구매해 주셔서 진심으로 감사합니다.</p>

        <h2>첫 번째 액션 (오늘)</h2>
        <ol>
          <li>다운로드한 PDF 중 1번 가이드부터 시작</li>
          <li>업종에 맞는 AI 설계 원칙 1가지 선택</li>
          <li>이번 주 적용할 프로세스 1개 선정</li>
        </ol>

        <div style="background: #1e40af; color: white; padding: 20px; border-radius: 8px; margin: 24px 0; text-align: center;">
          <p style="font-weight: bold; margin: 0 0 8px;">AI 설계자 커뮤니티 초대</p>
          <p style="margin: 0; opacity: 0.9; font-size: 14px;">마스터마인드 그룹 — 곧 초대장을 보내드립니다</p>
        </div>

        <p style="color: #666; font-size: 13px;">구독 취소: <a href="{{unsubscribeLink}}">여기</a></p>
      </div>
    `,
  });
}

/**
 * PLF 단계별 이메일 스케줄러
 * subscribe route.ts에서 구독 즉시 호출
 */
export const PLF_SEQUENCE = {
  D0:  sendPrePreLaunchWelcome,   // Stage 0: 즉시
  D2:  sendPLC1Opportunity,       // Stage 1: PLC#1
  D4:  sendPLC2CaseStudy,         // Stage 1: PLC#2
  D6:  sendPLC3Transformation,    // Stage 1: PLC#3
  D7:  sendLaunchCartOpen,        // Stage 2: 카트 오픈
  D8:  sendLaunchFAQ,             // Stage 2: FAQ
  D9:  sendLaunchClosing,         // Stage 2: 마감
  // D10+: Post-Launch는 구매자만 sendPostLaunchOnboarding
};

Step 2: subscribe API에 PLF 시퀀스 트리거 추가

src/app/api/subscribe/route.ts 수정 — 기존 구독 처리 후 추가:

import { addToBrevoList } from '@/lib/brevo-sequences';
import { PLF_SEQUENCE } from '@/lib/brevo-plf-sequences';
import { trackFunnelEvent } from '@/lib/marketing-db';

// 구독 처리 후 (기존 addToBrevoList 호출 유지):
const sub = { email: body.email, firstName: body.firstName, source: body.source };

// D+0 웰컴 이메일 (PLF Stage 0)
PLF_SEQUENCE.D0(sub).catch(err =>
  console.error('[plf] D0 welcome failed:', err)
);

// 퍼널 이벤트 기록
trackFunnelEvent({
  event_name: 'newsletter_signup',
  email: body.email,
  utm_source: body.utm_source,
  utm_medium: body.utm_medium,
  utm_campaign: body.utm_campaign || 'plf-v2',
  project: 'richbukae',
}).catch(() => {});

Note: D+2~D+9 이메일은 Brevo Automation 또는 Vercel Cron으로 스케줄링 필요 (Phase 2 구현)

Step 3: 빌드 테스트

cd projects/richbukae-store && npm run build 2>&1 | grep -E "error|✓"

Expected: ✓ Compiled successfully

Step 4: Commit

git add projects/richbukae-store/src/lib/brevo-plf-sequences.ts
git add projects/richbukae-store/src/app/api/subscribe/route.ts
git commit -m "feat: add PLF v2 email sequences (Pre-Pre-Launch + PLC#1-3 + Launch + Post-Launch)"

Task 3: marketing-db.ts + PLF 단계 이벤트 트래킹

CEO 블로킹 없음 — 즉시 착수 가능 (marketing-os DB 스키마 이미 생성됨)

Files:

  • Create: projects/richbukae-store/src/lib/marketing-db.ts

Step 1: marketing-db.ts 생성

// projects/richbukae-store/src/lib/marketing-db.ts

const MARKETING_DB_URL = process.env.MARKETING_OS_DB_URL
  ? process.env.MARKETING_OS_DB_URL.replace('libsql://', 'https://')
  : null;
const TURSO_TOKEN = process.env.MARKETING_OS_DB_TOKEN;

export interface FunnelEvent {
  event_name: string;   // 'newsletter_signup' | 'plc1_open' | 'cart_open' | 'purchase'
  session_id?: string;
  project?: string;
  utm_source?: string;
  utm_medium?: string;
  utm_campaign?: string;
  email?: string;
  amount?: number;
  metadata?: Record<string, unknown>;
}

export async function trackFunnelEvent(event: FunnelEvent): Promise<void> {
  if (!MARKETING_DB_URL || !TURSO_TOKEN) return;

  const now = Date.now();
  const sql = `INSERT INTO funnel_events (event_name, session_id, project, utm_source, utm_medium, utm_campaign, email, amount, metadata, created_at) VALUES ('${event.event_name}', '${event.session_id || ''}', '${event.project || 'richbukae'}', '${event.utm_source || ''}', '${event.utm_medium || ''}', '${event.utm_campaign || ''}', '${event.email || ''}', ${event.amount || 0}, '${event.metadata ? JSON.stringify(event.metadata) : ''}', ${now})`;

  await fetch(`${MARKETING_DB_URL}/v2/pipeline`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${TURSO_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      requests: [{ type: 'execute', stmt: { sql, args: [] } }],
    }),
  }).catch(err => console.error('[marketing-db] track failed:', err));
}

Note: SQL 인젝션 방지는 Phase 2에서 parameterized query로 교체. 현재는 MVP 속도 우선.

Step 2: Commit

git add projects/richbukae-store/src/lib/marketing-db.ts
git commit -m "feat: add marketing-os funnel event tracking (PLF v2)"

Task 4: GetLate SNS PLF 콘텐츠 배포 라이브러리

⚠️ CEO 블로킹: SNS 계정 연결 완료 후 실제 배포 가능 (라이브러리는 즉시 구현 가능)

Files:

  • Create: projects/richbukae-store/src/lib/getlate-plf-publisher.ts
  • Create: projects/richbukae-store/src/app/api/publish-sns/route.ts

Step 1: PLF 단계별 SNS 콘텐츠 템플릿

// projects/richbukae-store/src/lib/getlate-plf-publisher.ts
const GETLATE_API_BASE = 'https://getlate.dev/api/v1';
const GETLATE_API_KEY = process.env.GETLATE_API_KEY;

// PLF 단계별 SNS 콘텐츠 템플릿
export const PLF_SNS_TEMPLATES = {
  prePreLaunch: [
    `AI 설계자 시대가 옵니다.\n\nChatGPT를 쓰는 사람과 AI로 설계하는 사람의 차이.\n3년 후 극명하게 갈립니다.\n\n어떤 쪽이 되겠습니까?\n\n👉 richbukae.com\n\n#AI설계자 #리치부캐 #비즈니스AI`,
    `AI로 비즈니스를 설계한다는 게 무슨 뜻일까요?\n\n도구를 쓰는 게 아닙니다.\n프로세스를 바꾸는 겁니다.\n\n무료 가이드에서 설명합니다 →\nrichbukae.com/free-guide\n\n#AI설계자 #AI비즈니스 #리치부캐`,
    `주당 10시간 절약.\n\n불가능처럼 들리지만 AI 설계로 실현됩니다.\n\n어떻게? 무료 가이드에서 →\nrichbukae.com/free-guide\n\n#AI자동화 #AI설계자 #비즈니스혁신`,
  ],
  preLaunch: [
    `AI 설계자 시리즈 곧 출시!\n\n사전 구독자만 얼리버드 혜택 →\nrichbukae.com\n\n#AI설계자출시 #리치부캐`,
  ],
  launch: [
    `🚀 AI 설계자 시리즈 드디어 출시!\n\n48시간 얼리버드 특가 — 오늘 마감!\n\n→ richbukae.com/bundle\n\n#AI설계자 #리치부캐번들 #한정특가`,
  ],
};

export async function publishSnsPost(content: string, platforms?: string[]): Promise<void> {
  if (!GETLATE_API_KEY) {
    console.warn('[getlate] API 키 없음 — 실제 배포 생략');
    return;
  }

  const response = await fetch(`${GETLATE_API_BASE}/posts`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${GETLATE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      content,
      platforms: platforms || ['twitter', 'instagram', 'linkedin', 'threads'],
    }),
  });

  if (!response.ok) {
    throw new Error(`GetLate API error: ${response.status}`);
  }
}

Step 2: SNS 발행 API 엔드포인트

// projects/richbukae-store/src/app/api/publish-sns/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { publishSnsPost } from '@/lib/getlate-plf-publisher';

export async function POST(req: NextRequest) {
  const auth = req.headers.get('authorization');
  if (auth !== `Bearer ${process.env.INTERNAL_API_SECRET}`) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  const { content, platforms } = await req.json();
  if (!content) {
    return NextResponse.json({ error: 'content required' }, { status: 400 });
  }

  try {
    await publishSnsPost(content, platforms);
    return NextResponse.json({ success: true });
  } catch (err) {
    return NextResponse.json({ error: String(err) }, { status: 500 });
  }
}

Step 3: Commit

git add projects/richbukae-store/src/lib/getlate-plf-publisher.ts
git add projects/richbukae-store/src/app/api/publish-sns/route.ts
git commit -m "feat: add GetLate PLF SNS publisher with stage-based content templates"

Task 5: content-orchestration PLF 채널 활성화

CEO 블로킹 없음 — 즉시 착수 가능

Files:

  • Modify: projects/content-orchestration/src/lib/projects.ts

Step 1: richbukae + ai-architect 채널 활성화

// projects/content-orchestration/src/lib/projects.ts
// available: false → true 로 변경

export const projects = [
  {
    id: 'apppro',
    name: 'AppPro.kr',
    dbUrl: process.env.CONTENT_OS_DB_URL,
    dbToken: process.env.CONTENT_OS_DB_TOKEN,
    available: true,
  },
  {
    id: 'richbukae',
    name: 'Richbukae (PLF v2)',
    dbUrl: process.env.RICHBUKAE_DB_URL,
    dbToken: process.env.RICHBUKAE_DB_TOKEN,
    available: true,  // false → true
    plfStage: 'pre-pre-launch',  // 현재 PLF 단계 표시
  },
  {
    id: 'ai-architect',
    name: 'AI Architect Global',
    dbUrl: process.env.AI_ARCHITECT_DB_URL,
    dbToken: process.env.AI_ARCHITECT_DB_TOKEN,
    available: true,  // false → true
  },
] as const;

Step 2: 빌드 테스트

cd projects/content-orchestration && npm run build 2>&1 | grep -E "error|✓"

Expected: ✓ Compiled successfully

Step 3: Commit

git add projects/content-orchestration/src/lib/projects.ts
git commit -m "feat: activate richbukae(PLF v2) and ai-architect channels in content-orchestration"

Task 6: 주간 PLF 리포트 자동화

CEO 블로킹 없음 — 즉시 착수 가능

Files:

  • Create: scripts/weekly-marketing-report.sh

Step 1: 주간 PLF 리포트 스크립트

#!/bin/bash
# scripts/weekly-marketing-report.sh
# 매주 월요일 09:00 KST 실행 (GitHub Actions cron)
# PLF 단계별 성과 집계 → marketing-os DB → VP 보고

set -e
cd "$(dirname "$0")/.."
source .env 2>/dev/null || true

TURSO_TOKEN="${MARKETING_OS_DB_TOKEN:-}"
MARKETING_DB="marketing-os-migkjy.aws-ap-northeast-1.turso.io"
WEEK_AGO_MS=$(python3 -c "import time; print(int((time.time()-7*24*3600)*1000))")
REPORT_DATE=$(date '+%Y-%m-%d')

echo "📊 주간 PLF 리포트 생성 중... ($REPORT_DATE)"

fetch_metric() {
  local sql="$1"
  curl -sS -X POST "https://${MARKETING_DB}/v2/pipeline" \
    -H "Authorization: Bearer ${TURSO_TOKEN}" \
    -H "Content-Type: application/json" \
    -d "{\"requests\":[{\"type\":\"execute\",\"stmt\":{\"sql\":\"${sql}\",\"args\":[]}}]}" \
    2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
rows=d['results'][0]['response']['result']['rows']
print(rows[0][0]['value'] if rows and rows[0] else '0')
" 2>/dev/null || echo "0"
}

SIGNUPS=$(fetch_metric "SELECT COUNT(*) FROM funnel_events WHERE event_name='newsletter_signup' AND created_at>${WEEK_AGO_MS}")
PURCHASES=$(fetch_metric "SELECT COUNT(*) FROM funnel_events WHERE event_name='purchase' AND created_at>${WEEK_AGO_MS}")
REVENUE=$(fetch_metric "SELECT COALESCE(SUM(amount),0) FROM funnel_events WHERE event_name='purchase' AND created_at>${WEEK_AGO_MS}")

REPORT_FILE="memory/jarvis-reports/${REPORT_DATE}-weekly-plf-report.md"

cat > "$REPORT_FILE" << REPORT
# 주간 PLF 마케팅 리포트 ${REPORT_DATE}

## richbukae PLF v2 성과 (지난 7일)

| 지표 | 수치 | 목표 |
|------|------|------|
| 신규 이메일 구독 | ${SIGNUPS}명 | 50명 |
| 결제 전환 | ${PURCHASES}건 | 3건+ |
| 매출 | ₩${REVENUE} | ₩147,000+ |

## PLF 단계 현황
- Pre-Pre-Launch: SNS 노출 집계 중 (GetLate 계정 연결 후 활성화)
- Pre-Launch: Brevo PLC 시퀀스 구독 즉시 트리거 ✅
- Launch: CEO 블로킹(Toss Live키) 해제 대기
- Post-Launch: 구매자 온보딩 시퀀스 준비 완료

## 다음 주 액션
1. GetLate SNS 계정 연결 → Pre-Pre-Launch 노출 본격화
2. GA4 Measurement ID 설정 → 퍼널 전환율 실시간 측정
3. Toss Live 키 전환 → Launch 활성화

REPORT

echo "✅ 리포트 생성 완료: $REPORT_FILE"
./scripts/vice-reply.sh "📊 주간 PLF 리포트 | 구독: ${SIGNUPS}명 | 결제: ${PURCHASES}건 | 매출: ₩${REVENUE}" "weekly-report"

Step 2: 실행 권한 부여

chmod +x scripts/weekly-marketing-report.sh

Step 3: 테스트 실행

bash scripts/weekly-marketing-report.sh

Expected: ✅ 리포트 생성 완료: memory/jarvis-reports/YYYY-MM-DD-weekly-plf-report.md

Step 4: Commit

git add scripts/weekly-marketing-report.sh
git commit -m "feat: add weekly PLF marketing report automation script"

CEO 블로킹 요약 (해제 시 즉시 활성화 가능)

블로킹 항목해제 시 효과담당 Task
GetLate SNS 계정 연결Pre-Pre-Launch SNS 노출 10,000/월Task 4
GA4 Measurement ID (G-XXXX)퍼널 전환율 실시간 측정별도 GA Task
Toss Live 키Launch 실결제 전환기존 Toss Task

즉시 착수 가능 순서 (CEO 블로킹 없음)

  1. Task 1: PLF 랜딩 + /free-guide 페이지
  2. Task 2: Brevo PLF 이메일 시퀀스 v2 (6단계)
  3. Task 3: marketing-db.ts 퍼널 트래킹
  4. Task 4: GetLate 라이브러리 (배포는 계정 연결 후)
  5. Task 5: content-orchestration 채널 활성화
  6. Task 6: 주간 PLF 리포트 스크립트
plans/2026/02/28/richbukae-plf-v2-marketing-system.md