← 목록으로
2026-02-28plans

Richbukae AI Architect 마케팅 시스템 v1 Implementation Plan

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

Goal: GetLate SNS 배포 → Brevo 뉴스레터 → richbukae.com 구매 퍼널을 AI 자동화로 구축하여 첫 유료 고객을 창출한다.

Architecture: 콘텐츠 생성(AI)→ SNS 배포(GetLate)→ 랜딩 트래픽(richbukae.com)→ 뉴스레터 구독(Brevo)→ 이메일 시퀀스→ 결제(TossPayments) 순서의 단방향 퍼널. GA4 이벤트로 각 단계 전환율을 측정하고, marketing-os Turso DB에 캠페인 성과를 누적한다.

Tech Stack: Next.js 15, Google Analytics 4 (gtag.js), Brevo SDK (@getbrevo/brevo), GetLate API, Turso (marketing-os), Vercel Analytics, content-orchestration 대시보드


📊 시스템 전체 흐름도

[콘텐츠 생성 - AI]
      |
      v
[SNS 배포 - GetLate × 13 플랫폼]
      |
      v
[richbukae.com 랜딩] ──→ [GA4: page_view, scroll, click_cta]
      |
      v
[뉴스레터 구독 폼] ──→ [GA4: newsletter_signup]
      |
      v
[Brevo 이메일 시퀀스]
  ├─ D+0: 웰컴 메일 (무료 AI 팁 + 상품 소개)
  ├─ D+2: 소셜 증명 메일 (리치부캐 스토리)
  ├─ D+4: 가치 메일 (AI 설계자 방법론)
  └─ D+7: 전환 메일 (한정 할인 CTA)
      |
      v
[richbukae.com/bundle] ──→ [GA4: begin_checkout, purchase]
      |
      v
[TossPayments 결제 완료]
      |
      v
[marketing-os DB: 주문 기록 + UTM 출처 저장]
      |
      v
[content-orchestration 대시보드: 퍼널 리포트]

🎯 KPI 지표 정의

단계지표목표 (MVP 30일)측정 도구
SNS 도달총 노출10,000GetLate Analytics
랜딩 트래픽월 UV500GA4
구독 전환율방문자→구독5% (25명)GA4 + Brevo
이메일 오픈율시퀀스 D+040%+Brevo
결제 전환율구독자→구매3% (0.75명→반올림 1명)GA4 + marketing-os
매출월 GMV₩49,000~₩199,000Toss + DB

🤖 AI 자동화 포인트

#자동화 항목현재 상태필요 작업
1SNS 콘텐츠 생성 (Claude Haiku)content-pipeline 구현됨, CEO HOLDOPENROUTER_API_KEY 설정 후 활성화
2GetLate 멀티플랫폼 배포API 키 설정됨, 계정 연결 필요CEO: getlate.dev 대시보드 계정 연결
3Brevo 웰컴 시퀀스 자동 트리거미구현Task 3 구현
4GA4 이벤트 자동 수집richbukae에 GA 미설치Task 1 구현
5주간 퍼널 리포트 생성미구현Task 6 구현

⚠️ CEO 블로킹 (플랜 착수 전 확인 필요)

#항목영향우선순위
1GetLate 대시보드 SNS 계정 연결SNS 자동 배포 불가🔴 HIGH
2NEXT_PUBLIC_GA_MEASUREMENT_ID 발급GA 트래킹 불가🔴 HIGH
3Toss Live 키 (TOSS_SECRET_KEY)실결제 불가 (테스트 가능)🟡 MEDIUM
4Brevo 발신 이메일 인증이메일 시퀀스 불가🟡 MEDIUM

CEO 블로킹 없이 선행 가능한 Task: 1, 2, 3, 4, 5 (Task 6~7은 CEO 블로킹 해제 후)


Task 1: Google Analytics 4 설치 — richbukae-store

Files:

  • Create: projects/richbukae-store/src/components/GoogleAnalytics.tsx
  • Modify: projects/richbukae-store/src/app/layout.tsx
  • Modify: projects/richbukae-store/.env.example

Step 1: GoogleAnalytics 컴포넌트 생성

// projects/richbukae-store/src/components/GoogleAnalytics.tsx
'use client';

import Script from 'next/script';

const GA_ID = process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID;

export default function GoogleAnalytics() {
  if (!GA_ID) return null;

  return (
    <>
      <Script
        src={`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`}
        strategy="afterInteractive"
      />
      <Script id="google-analytics" strategy="afterInteractive">
        {`
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());
          gtag('config', '${GA_ID}', {
            page_path: window.location.pathname,
          });
        `}
      </Script>
    </>
  );
}

// GA 이벤트 트래킹 유틸리티
export function trackEvent(
  action: string,
  params?: Record<string, string | number>
) {
  if (typeof window === 'undefined' || !GA_ID) return;
  window.gtag?.('event', action, params);
}

Step 2: layout.tsx에 컴포넌트 추가

projects/richbukae-store/src/app/layout.tsx에서 <body> 바로 안쪽에 추가:

import GoogleAnalytics from '@/components/GoogleAnalytics';

// <body> 내부, Analytics 컴포넌트들과 함께:
<GoogleAnalytics />

Step 3: .env.example 업데이트

# Analytics
NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX

Step 4: 빌드 테스트

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

Expected: ✓ Compiled successfully

Step 5: Commit

git add projects/richbukae-store/src/components/GoogleAnalytics.tsx
git add projects/richbukae-store/src/app/layout.tsx
git add projects/richbukae-store/.env.example
git commit -m "feat: add Google Analytics 4 to richbukae-store"

Task 2: GA4 퍼널 이벤트 트래킹 구현

Files:

  • Modify: projects/richbukae-store/src/app/api/subscribe/route.ts
  • Modify: projects/richbukae-store/src/components/NewsletterForm.tsx (또는 구독 폼 컴포넌트)
  • Modify: projects/richbukae-store/src/app/success/page.tsx

Step 1: 뉴스레터 구독 이벤트 — 클라이언트 측

구독 폼 컴포넌트에 trackEvent 추가:

import { trackEvent } from '@/components/GoogleAnalytics';

// 구독 성공 시:
trackEvent('newsletter_signup', {
  source: 'richbukae_landing',
  method: 'email_form',
});

Step 2: 결제 성공 이벤트 — success 페이지

src/app/success/page.tsx에 구매 이벤트 추가:

'use client';
import { useEffect } from 'react';
import { useSearchParams } from 'next/navigation';
import { trackEvent } from '@/components/GoogleAnalytics';

export default function SuccessPage() {
  const params = useSearchParams();

  useEffect(() => {
    const orderId = params.get('orderId');
    const amount = params.get('amount');

    if (orderId && amount) {
      trackEvent('purchase', {
        transaction_id: orderId,
        value: Number(amount) / 100,  // Toss는 원 단위
        currency: 'KRW',
        items: [{ item_name: 'richbukae_bundle' }],
      });
    }
  }, [params]);

  // ... 기존 렌더링
}

Step 3: CTA 클릭 이벤트 — 버튼 컴포넌트들

주요 CTA 버튼에 추가:

// 번들 구매 버튼 클릭 시
trackEvent('begin_checkout', {
  value: 49000,
  currency: 'KRW',
});

// 무료 가이드 다운로드 클릭 시
trackEvent('download_free_guide', {
  content_type: 'ai_guide',
});

Step 4: Commit

git add projects/richbukae-store/src/
git commit -m "feat: add GA4 funnel event tracking (signup, purchase, cta)"

Task 3: Brevo 이메일 웰컴 시퀀스 구현

Files:

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

Step 1: Brevo 시퀀스 라이브러리 생성

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

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

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

/**
 * 웰컴 이메일 발송 (D+0 즉시)
 * Brevo 리스트 7 추가 + 웰컴 메일 발송
 */
export async function sendWelcomeEmail(subscriber: SubscriberInfo): Promise<void> {
  const sendSmtpEmail = {
    to: [{ email: subscriber.email, name: subscriber.firstName || '안녕하세요' }],
    sender: { name: '리치부캐', email: 'contact@richbukae.com' },
    subject: '🎉 구독 감사합니다! AI 설계자 무료 가이드를 드립니다',
    htmlContent: `
      <div style="font-family: 'Apple SD Gothic Neo', sans-serif; max-width: 600px; margin: 0 auto;">
        <h1 style="color: #1a1a1a;">안녕하세요, ${subscriber.firstName || ''}님!</h1>
        <p>리치부캐 뉴스레터를 구독해주셔서 감사합니다.</p>
        <p>AI 설계자 시리즈의 핵심 내용을 이메일로 보내드립니다.</p>

        <h2>이번 주 AI 핵심 팁</h2>
        <p>AI로 비즈니스를 설계하는 3가지 핵심 원칙:</p>
        <ol>
          <li><strong>문제 정의 먼저</strong> — AI 도구보다 해결할 문제를 먼저 명확히</li>
          <li><strong>프롬프트 시스템화</strong> — 한 번 잘 만든 프롬프트를 반복 사용</li>
          <li><strong>측정 가능한 목표</strong> — AI 도입 전후 수치 비교</li>
        </ol>

        <div style="background: #f5f5f5; padding: 20px; border-radius: 8px; margin: 20px 0;">
          <p style="margin: 0;"><strong>다음 이메일 예고</strong> (2일 후)</p>
          <p style="margin: 8px 0 0;">리치부캐가 AI로 비즈니스를 바꾼 실제 사례를 공유합니다.</p>
        </div>

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

  await client.sendTransacEmail(sendSmtpEmail);
}

/**
 * 구독자 Brevo 리스트 추가
 */
export async function addToBrevoList(subscriber: SubscriberInfo): Promise<void> {
  const contactsApi = new SibApiV3Sdk.ContactsApi();
  contactsApi.setApiKey(
    SibApiV3Sdk.ContactsApiApiKeys.apiKey,
    process.env.BREVO_API_KEY!
  );

  await contactsApi.createContact({
    email: subscriber.email,
    attributes: {
      FIRSTNAME: subscriber.firstName || '',
      SOURCE: subscriber.source || 'richbukae_web',
    },
    listIds: [Number(process.env.BREVO_LIST_ID || '7')],
    updateEnabled: true,
  });
}

Step 2: subscribe API에 웰컴 이메일 트리거 추가

src/app/api/subscribe/route.ts 기존 코드에 추가:

import { addToBrevoList, sendWelcomeEmail } from '@/lib/brevo-sequences';

// 구독 처리 후 추가:
const subscriberInfo = {
  email: body.email,
  firstName: body.firstName,
  source: body.source || 'richbukae_web',
};

await addToBrevoList(subscriberInfo);

// 웰컴 이메일 비동기 발송 (실패해도 구독은 성공)
sendWelcomeEmail(subscriberInfo).catch(err =>
  console.error('[brevo] welcome email failed:', err)
);

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-sequences.ts
git add projects/richbukae-store/src/app/api/subscribe/route.ts
git commit -m "feat: add Brevo welcome email sequence on newsletter signup"

Task 4: GetLate SNS 자동 배포 트리거 구현

Files:

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

⚠️ CEO 블로킹: GetLate 대시보드(getlate.dev)에서 SNS 계정 연결 완료 후 실행 가능

Step 1: GetLate 클라이언트 라이브러리

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

export interface SnsPost {
  content: string;
  platforms: string[];  // ['twitter', 'instagram', 'linkedin']
  imageUrl?: string;
  scheduleAt?: string;  // ISO 8601, 없으면 즉시
}

export async function publishToSns(post: SnsPost): Promise<{ success: boolean; postIds: string[] }> {
  if (!GETLATE_API_KEY) {
    console.warn('[getlate] API 키 없음 — mock 모드');
    return { success: true, postIds: ['mock-id'] };
  }

  const response = await fetch(`${GETLATE_API_BASE}/posts`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${GETLATE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      content: post.content,
      platforms: post.platforms,
      media_urls: post.imageUrl ? [post.imageUrl] : [],
      scheduled_at: post.scheduleAt || null,
    }),
  });

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

  const data = await response.json();
  return { success: true, postIds: data.post_ids || [] };
}

/**
 * 블로그 발행 시 SNS 자동 배포 (richbukae 콘텐츠용)
 */
export async function publishBlogToSns(params: {
  title: string;
  summary: string;
  url: string;
  hashtags?: string[];
}): Promise<void> {
  const hashtags = (params.hashtags || ['AI설계자', '리치부캐', '비즈니스AI']).map(h => `#${h}`).join(' ');

  const content = `${params.title}\n\n${params.summary}\n\n${params.url}\n\n${hashtags}`;

  await publishToSns({
    content,
    platforms: ['twitter', 'instagram', 'linkedin'],
  });
}

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

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

// 내부 전용 API (Bearer 토큰 인증)
export async function POST(req: NextRequest) {
  const authHeader = req.headers.get('authorization');
  if (authHeader !== `Bearer ${process.env.INTERNAL_API_SECRET}`) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  const body = await req.json();
  const { content, platforms, imageUrl, scheduleAt } = body;

  if (!content || !platforms?.length) {
    return NextResponse.json({ error: 'content and platforms required' }, { status: 400 });
  }

  try {
    const result = await publishToSns({ content, platforms, imageUrl, scheduleAt });
    return NextResponse.json(result);
  } catch (err) {
    console.error('[publish-sns] error:', err);
    return NextResponse.json({ error: 'publish failed' }, { status: 500 });
  }
}

Step 3: Commit

git add projects/richbukae-store/src/lib/getlate-publisher.ts
git add projects/richbukae-store/src/app/api/publish-sns/route.ts
git commit -m "feat: add GetLate SNS publisher for richbukae content distribution"

Task 5: marketing-os DB 스키마 설계 (캠페인 트래킹)

Files:

  • Create: projects/richbukae-store/src/lib/marketing-db.ts
  • Run: Turso SQL 직접 실행

Turso marketing-os DB: marketing-os-migkjy.aws-ap-northeast-1.turso.io

Step 1: marketing-os DB에 테이블 생성

# 루트 .env에서 토큰 확인 후:
TURSO_TOKEN=$(grep TURSO_DB_TOKEN .env | cut -d= -f2-)

# funnel_events 테이블
curl -sS -X POST "https://marketing-os-migkjy.aws-ap-northeast-1.turso.io/v2/pipeline" \
  -H "Authorization: Bearer $TURSO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "requests": [{
      "type": "execute",
      "stmt": {
        "sql": "CREATE TABLE IF NOT EXISTS funnel_events (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, event_name TEXT NOT NULL, project TEXT DEFAULT '\''richbukae'\'', utm_source TEXT, utm_medium TEXT, utm_campaign TEXT, email TEXT, amount INTEGER, currency TEXT DEFAULT '\''KRW'\'', metadata TEXT, created_at INTEGER NOT NULL)",
        "args": []
      }
    }]
  }'

# campaigns 테이블
curl -sS -X POST "https://marketing-os-migkjy.aws-ap-northeast-1.turso.io/v2/pipeline" \
  -H "Authorization: Bearer $TURSO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "requests": [{
      "type": "execute",
      "stmt": {
        "sql": "CREATE TABLE IF NOT EXISTS campaigns (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, platform TEXT, status TEXT DEFAULT '\''active'\'', budget INTEGER, spend INTEGER DEFAULT 0, impressions INTEGER DEFAULT 0, clicks INTEGER DEFAULT 0, conversions INTEGER DEFAULT 0, revenue INTEGER DEFAULT 0, start_date TEXT, end_date TEXT, created_at INTEGER NOT NULL)",
        "args": []
      }
    }]
  }'

Step 2: marketing-os 클라이언트 라이브러리

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

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

export interface FunnelEvent {
  event_name: string;
  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();
  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: `INSERT INTO funnel_events (event_name, session_id, project, utm_source, utm_medium, utm_campaign, email, amount, metadata, created_at)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
          args: [
            { type: 'text', value: event.event_name },
            { type: 'text', value: event.session_id || '' },
            { type: 'text', value: event.project || 'richbukae' },
            { type: 'text', value: event.utm_source || '' },
            { type: 'text', value: event.utm_medium || '' },
            { type: 'text', value: event.utm_campaign || '' },
            { type: 'text', value: event.email || '' },
            { type: 'integer', value: String(event.amount || 0) },
            { type: 'text', value: event.metadata ? JSON.stringify(event.metadata) : '' },
            { type: 'integer', value: String(now) },
          ],
        },
      }],
    }),
  }).catch(err => console.error('[marketing-db] track failed:', err));
}

Step 3: subscribe API에 funnel 이벤트 추가

// subscribe/route.ts에 추가
import { trackFunnelEvent } from '@/lib/marketing-db';

// 구독 성공 후:
trackFunnelEvent({
  event_name: 'newsletter_signup',
  email: body.email,
  utm_source: body.utm_source,
  utm_medium: body.utm_medium,
  utm_campaign: body.utm_campaign,
  project: 'richbukae',
}).catch(() => {});  // 실패해도 무시

Step 4: Commit

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

Task 6: content-orchestration 멀티프로젝트 확장 (richbukae 채널 추가)

content-orchestration은 현재 apppro 전용 — richbukae, ai-architect-global 채널 추가

Files:

  • Modify: projects/content-orchestration/src/lib/channels.ts (또는 channels 설정 파일)
  • Modify: projects/content-orchestration/src/app/page.tsx (프로젝트 선택 UI)

Step 1: 채널 설정에 richbukae 추가

content-orchestration의 채널/프로젝트 설정 파일을 읽고 richbukae 채널 추가:

// 추가할 채널 설정
const RICHBUKAE_CHANNELS = [
  { id: 'richbukae-blog', name: 'richbukae 블로그', type: 'blog', platform: 'richbukae.com', is_active: 1 },
  { id: 'richbukae-newsletter', name: 'richbukae 뉴스레터', type: 'newsletter', platform: 'brevo', is_active: 1 },
  { id: 'richbukae-sns', name: 'richbukae SNS (GetLate)', type: 'sns', platform: 'getlate', is_active: 1 },
];

const AI_ARCHITECT_CHANNELS = [
  { id: 'ai-architect-blog', name: 'AI Architect 블로그', type: 'blog', platform: 'ai-architect.io', is_active: 1 },
  { id: 'ai-architect-newsletter', name: 'AI Architect EN Newsletter', type: 'newsletter', platform: 'brevo', is_active: 1 },
];

Step 2: Commit

git add projects/content-orchestration/
git commit -m "feat: add richbukae and ai-architect channels to content-orchestration"

Task 7: 자동화 주간 리포트 스크립트

Files:

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

Step 1: 주간 퍼널 리포트 스크립트

#!/bin/bash
# scripts/weekly-marketing-report.sh
# 매주 월요일 09:00 실행 (GitHub Actions)

set -e
cd "$(dirname "$0")/.."
source .env

TURSO_TOKEN="${TURSO_DB_TOKEN}"
MARKETING_DB="marketing-os-migkjy.aws-ap-northeast-1.turso.io"

WEEK_AGO=$(python3 -c "import time; print(int((time.time() - 7*24*3600)*1000))")
NOW=$(python3 -c "import time; print(int(time.time()*1000))")

# 퍼널 이벤트 집계
REPORT=$(python3 -c "
import json, urllib.request, urllib.error

url = 'https://${MARKETING_DB}/v2/pipeline'
token = '${TURSO_TOKEN}'
week_ago = ${WEEK_AGO}

queries = [
  'SELECT COUNT(*) as signups FROM funnel_events WHERE event_name = \"newsletter_signup\" AND created_at > ${WEEK_AGO}',
  'SELECT COUNT(*) as purchases, SUM(amount) as revenue FROM funnel_events WHERE event_name = \"purchase\" AND created_at > ${WEEK_AGO}',
  'SELECT utm_source, COUNT(*) as cnt FROM funnel_events WHERE created_at > ${WEEK_AGO} GROUP BY utm_source ORDER BY cnt DESC LIMIT 5',
]

results = []
for sql in queries:
    req = urllib.request.Request(url,
        data=json.dumps({'requests':[{'type':'execute','stmt':{'sql':sql,'args':[]}}]}).encode(),
        headers={'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'},
        method='POST'
    )
    try:
        resp = json.loads(urllib.request.urlopen(req).read())
        rows = resp['results'][0]['response']['result']['rows']
        results.append(rows)
    except:
        results.append([])

print(json.dumps(results))
")

REPORT_DATE=$(date '+%Y-%m-%d')
REPORT_FILE="memory/jarvis-reports/${REPORT_DATE}-weekly-marketing.md"

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

## richbukae 퍼널 성과 (지난 7일)

- 뉴스레터 신규 구독: ${REPORT}건
- 결제 전환: 분석 중
- 주요 유입 채널: GetLate SNS

## 다음 주 액션
1. 이메일 시퀀스 D+4, D+7 발송 결과 확인
2. SNS 트래픽 분석 후 고성과 채널 증량
3. CEO 보고

EOF

echo "✅ 주간 마케팅 리포트 생성: $REPORT_FILE"

# VP 보고
./scripts/vice-reply.sh "📊 주간 마케팅 리포트 생성 완료 — richbukae 퍼널 성과 요약" "marketing-report"

Step 2: GitHub Actions 추가 (선택)

# .github/workflows/weekly-marketing-report.yml
name: Weekly Marketing Report
on:
  schedule:
    - cron: '0 0 * * 1'  # 매주 월요일 09:00 KST
  workflow_dispatch:

jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Generate Report
        env:
          TURSO_DB_TOKEN: ${{ secrets.TURSO_DB_TOKEN }}
        run: bash scripts/weekly-marketing-report.sh

Step 3: Commit

git add scripts/weekly-marketing-report.sh
git add .github/workflows/weekly-marketing-report.yml
git commit -m "feat: add weekly marketing funnel report automation"

칸반 태스크 구조 (Turso DB 등록)

[태스크] richbukae-marketing-system-v1
  ├─ sub1: GA4 richbukae 설치 (Task 1+2)        → 즉시 착수 가능
  ├─ sub2: Brevo 웰컴 시퀀스 구현 (Task 3)       → 즉시 착수 가능
  ├─ sub3: GetLate SNS 퍼블리셔 (Task 4)          → CEO 블로킹 (SNS 계정 연결)
  ├─ sub4: marketing-os DB 스키마 (Task 5)        → 즉시 착수 가능
  ├─ sub5: content-orchestration 확장 (Task 6)   → 즉시 착수 가능
  └─ sub6: 주간 리포트 자동화 (Task 7)            → sub4 완료 후

대시보드 설계 (content-orchestration 확장)

/richbukae/analytics
├── 퍼널 요약 카드
│   ├─ 이번 달 SNS 노출
│   ├─ 랜딩 UV
│   ├─ 구독 전환율 (%)
│   └─ 결제 전환율 (%)
├── 채널별 성과 차트
│   ├─ SNS: Twitter / Instagram / LinkedIn 유입 비교
│   ├─ 이메일: 오픈율 / 클릭률 추이
│   └─ 결제: 일별 매출 바 차트
└── 캠페인 테이블
    ├─ 캠페인명, 플랫폼, 예산/지출
    ├─ 노출/클릭/전환
    └─ ROAS (수익/지출 비율)

CEO 보고서 + PPT 구조

주간 보고 PPT 슬라이드 구성:

Slide 1: 이번 주 핵심 성과 (KPI 3종)
Slide 2: 퍼널 플로우 (각 단계 전환율)
Slide 3: 채널별 성과 (GetLate × 플랫폼)
Slide 4: 이메일 시퀀스 성과 (Brevo)
Slide 5: 매출 현황 (Toss 집계)
Slide 6: 다음 주 액션

실행 순서 권장

순서Task소요시간CEO 블로킹
1Task 1 — GA4 설치30분GA_ID 필요
2Task 2 — 이벤트 트래킹45분없음
3Task 3 — Brevo 시퀀스60분Brevo 이메일 인증
4Task 5 — marketing-os DB30분없음
5Task 6 — content-orchestration45분없음
6Task 4 — GetLate SNS30분SNS 계정 연결
7Task 7 — 주간 리포트30분없음

총 예상 구현 시간: 4~5시간 (CEO 블로킹 없는 것만 약 3.5시간)

plans/2026/02/28/richbukae-ai-architect-marketing-system-v1.md