/* ===================================================================== * Afflix Landing v3.2 — React App (전면 재설계) * 정본: uploads/0517_감사최종취합_랜딩리뉴얼_디팀전달본.md + CMO 쏘왓 ×5 + 가격 확정안 * · Hero 슬라이드 BG 5장 6초 사이클 (구 사이트 패턴) * · 누적 발행 카운터 count-up 애니메이션 (12,480건 · 운영 라인 집계) * · Light/Dark 토글 (localStorage 영속) * · "작동원리 보기" 버튼 제거 * · 문제 인식: 글쓰기 → 수익 페인 (CMO 쏘왓 정정) * · 4가지 메커니즘: split-left 이미지 * · 7 파이프라인: 큰 이모지 노드 * · 운영 예시: BG 이미지 + 라벨 * · 가치 vs 가격: BG 이미지 카드 * · 가격: Basic/Standard/Premium · 서버 1/3/5대 · 블로그 ~50/150/250 · "우선 기술 지원" 통일 * ===================================================================== */ const { useState: uLP, useEffect: eLP, useRef: rLP } = React; /* ========== Unsplash 이미지 (테마별 매칭) ========== */ const IMG = { // Hero 슬라이드 5장 — Gemini AI 생성 이미지 (Afflix 테마 직접 매칭) // 1) 매트릭스 코드 + 대시보드 / 2) 우주 컨베이어 누적 수익 / 3) 콘트롤룸 KPI 패널 // 4) 콘텐츠 카드 + 수익 ₩7,890,450 / 5) 실시간 수익 대시보드 + ₩3,456,789 hero: [ 'landing/img/hero-1.jpg', 'landing/img/hero-2.jpg', 'landing/img/hero-3.jpg', 'landing/img/hero-4.jpg', 'landing/img/hero-5.jpg', ], // 배포용 자산 경로 (운영 환경) hero_deploy: [ '/hero-bg.png','/hero-bg2.png','/hero-bg3.png','/hero-bg4.png','/hero-bg5.png', ], // 문제 인식 3 prob: [ 'https://images.unsplash.com/photo-1499951360447-b19be8fe80f5?w=900&q=70&auto=format&fit=crop', // tired work 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=900&q=70&auto=format&fit=crop', // growth chart 'https://images.unsplash.com/photo-1607082348824-0a96f2a4b9da?w=900&q=70&auto=format&fit=crop', // shopping ], // 4 메커니즘 mech: [ 'https://images.unsplash.com/photo-1620712943543-bcc4688e7485?w=1100&q=70&auto=format&fit=crop', // AI brain 'https://images.unsplash.com/photo-1611224923853-80b023f02d71?w=1100&q=70&auto=format&fit=crop', // template/design 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1100&q=70&auto=format&fit=crop', // server room 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1100&q=70&auto=format&fit=crop', // analytics dashboard ], // 운영 예시 3 trust: [ 'https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?w=900&q=70&auto=format&fit=crop', // solo work 'https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?w=900&q=70&auto=format&fit=crop', // dashboard growth 'https://images.unsplash.com/photo-1521737711867-e3b97375f902?w=900&q=70&auto=format&fit=crop', // team operation ], // 가치 vs 가격 3 value: [ 'https://images.unsplash.com/photo-1501139083538-0139583c060f?w=900&q=70&auto=format&fit=crop', // clock time 'https://images.unsplash.com/photo-1543286386-713bdd548da4?w=900&q=70&auto=format&fit=crop', // growing seeds 'https://images.unsplash.com/photo-1554224155-6726b3ff858f?w=900&q=70&auto=format&fit=crop', // balance/finance ], }; /* ========== Theme hook (localStorage 영속) ========== */ function useTheme(){ const [theme, setTheme] = uLP(() => { if (typeof window === 'undefined') return 'dark'; return localStorage.getItem('afflix-landing-theme') || 'dark'; }); eLP(()=>{ document.documentElement.setAttribute('data-theme', theme); localStorage.setItem('afflix-landing-theme', theme); },[theme]); return [theme, setTheme]; } /* ========== Count-up hook ========== */ function useCountUp(target, duration = 1800){ const [v, setV] = uLP(0); eLP(()=>{ let raf, start; const tick = (t) => { if (!start) start = t; const p = Math.min((t - start) / duration, 1); // ease-out cubic const eased = 1 - Math.pow(1 - p, 3); setV(Math.floor(target * eased)); if (p < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); return () => cancelAnimationFrame(raf); },[target, duration]); return v; } /* ========== Hero slide cycler ========== */ function useHeroSlide(count, intervalMs = 6000){ const [idx, setIdx] = uLP(0); eLP(()=>{ const t = setInterval(()=>setIdx(i => (i + 1) % count), intervalMs); return () => clearInterval(t); },[count, intervalMs]); return idx; } /* ========== Top Nav ========== */ function LpNav({ theme, setTheme }){ const [open, setOpen] = uLP(false); const links = [ ['#problem','왜 Afflix인가?'], ['#how','자동 운영 흐름'], ['#trust','운영 예시'], ['#pricing','요금제'], ['#faq','FAQ'], ]; return ( ); } /* ========== 1. Hero ========== */ function LpHero(){ const slideIdx = useHeroSlide(IMG.hero.length); const counter = useCountUp(12480); return (
{IMG.hero.map((src,i)=>(
))}
{counter.toLocaleString()}
오늘도 자동 발행 · 누적 발행 기준 · 운영 라인 집계

퇴근 후에도, 잠든 사이에도
AI가 쿠팡 수익 콘텐츠를 매일 쌓습니다

상품 찾기·글쓰기·발행·수익 추적까지 —
7단계를 AI가 24시간 대신합니다. 당신은 쿠팡파트너스 ID만 연결하면 됩니다.

매일
자동 발행
(쉬는 날 없이)
50개+
블로그 동시 운영
100%
수익은 전부 내 계정으로
무료체험 시작하기
카드 등록 없이 1개월 무료 시작 · 언제든 해지 가능
); } /* ========== 2. 문제 인식 — CMO 쏘왓 정정 ========== */ function LpProblem(){ const probs = [ { n:'01', img:IMG.prob[0], t:'혼자서는 매일 운영이 안 됩니다', b:'상품 찾고, 글 쓰고, 올리고, 점검까지 — 매일 반복하는 운영은 본업 있는 운영자에게 사실상 불가능합니다.' }, { n:'02', img:IMG.prob[1], t:'수익은 한 번에 안 옵니다', b:'글이 쌓여야 검색에 잡히고, 검색에 잡혀야 클릭이 나옵니다. 누적 없이는 수익이 시작되지 않습니다.' }, { n:'03', img:IMG.prob[2], t:'뭐가 돈이 되는지, 감으로는 못 맞춥니다', b:'어떤 상품이 팔리고 어떤 카테고리가 막히는지 — 매번 손으로 판단하면 일관성이 깨지고 수익도 같이 깨집니다.' }, ]; return (
진짜 막히는 곳은 글이 아닙니다

진짜 어려움은 글쓰기가 아니라,
수익이 날 때까지 멈추지 않는 것입니다

제휴 수익형 블로그는 매일 발행 + 누적 색인 + 카테고리 정합 세 가지가 동시에 살아 있어야 수익이 시작됩니다.

{probs.map(p=>(
{p.n}

{p.t}

{p.b}

))}
); } /* ========== 3. 메커니즘 — split-left 이미지 ========== */ function LpMechanism(){ const mech = [ { n:'01', img:IMG.mech[0], mech:'CONTENT GENERATION', t:'AI가 매일 콘텐츠를 작성합니다', text:'카테고리·키워드·계절·과거 흐름을 기반으로 AI가 발행 형식을 자동 매칭하고, 글·썸네일·메타까지 한 호흡에 작성합니다.', effect:'발행 끊김 0' }, { n:'02', img:IMG.mech[1], mech:'PROVEN TEMPLATES', t:'검증된 10가지 형식만 사용합니다', text:'가성비 비교·랭킹·계절 모음 등 카테고리별로 검증된 10가지. 형식 자체가 색인·전환에 유리한 구조로 잠겨 있습니다.', effect:'색인 적합도 +' }, { n:'03', img:IMG.mech[2], mech:'DIRECT PUBLISH', t:'본인 인증 계정에 직접 발행됩니다', text:'AFFLIX 서버에 쌓이지 않고 본인 블로그로 직접 발행됩니다. 글·트래픽·수익은 100% 사용자에게 남습니다.', effect:'자산은 내 것' }, { n:'04', img:IMG.mech[3], mech:'CATEGORY POLICY', t:'카테고리 정합은 자동으로 잠급니다', text:'어떤 상품군이 허용·금지인지 운영 정책으로 미리 잠그기 때문에 매번 손으로 판단할 필요가 없습니다.', effect:'정합성 안정' }, ]; return (
왜 작동하는가

Afflix가 작동하는 4가지 메커니즘

기능 나열이 아니라, 자동화가 실제 수익 구조로 이어지는 이유를 보여드립니다.

{mech.map(m=>(
MECHANISM {m.n}

{m.t} {m.mech}

{m.text}

→ {m.effect}
))}
); } /* ========== 4. 7 파이프라인 ========== */ function LpPipeline(){ const steps = [ { n:1, e:'🛒', t:'상품 수집', s:'쿠팡 카탈로그' }, { n:2, e:'📂', t:'카테고리', s:'정합 검증' }, { n:3, e:'🤖', t:'AI 글', s:'형식 매칭' }, { n:4, e:'🎨', t:'HTML 생성', s:'슬롯 주입' }, { n:5, e:'✅', t:'품질 검수', s:'6항목 자동' }, { n:6, e:'📤', t:'자동 발행', s:'본인 계정' }, { n:7, e:'💰', t:'수익 발생', s:'전액 사용자' }, ]; return (
작동 흐름

상품 수집부터 수익 발생까지
7단계가 자동으로 돌아갑니다

사람이 손대는 단계는 0개 — AI가 7개 단계를 매일 흘립니다.

{steps.map(s=>(
{s.e} {s.n}
{s.t}
{s.s}
))}
); } /* ========== 5. 운영 예시 ========== */ function LpTrust(){ const cases = [ { plan:'Basic', img:IMG.trust[0], cat:'가전 카테고리', title:'1인 시작 시나리오', m1:['30건','30일 발행'], m2:['18건','색인된 글'], m3:['형성','유입 흐름'], n:'카테고리 1개로 베이스라인 형성. 셋업 3개월 누적 후 안정 구간 진입을 가정한 운영 예시.' }, { plan:'Standard', img:IMG.trust[1], cat:'뷰티 + 식품', title:'안정 운영 시나리오', m1:['60~80건','30일 발행'], m2:['35건+','색인된 글'], m3:['비교','카테고리 흐름'], n:'2~3 카테고리 운영 시 흐름 비교가 가능해지며 다음 발행 품질이 누적되는 가정.' }, { plan:'Premium', img:IMG.trust[2], cat:'다 카테고리', title:'대규모 운영 시나리오', m1:['150건+','30일 발행'], m2:['70건+','색인된 글'], m3:['안정','운영 라인'], n:'대규모 운영에서 자산 누적 + 우선 지원으로 운영 라인이 안정되는 가정.' }, ]; return (
운영 예시

처음 시작하면 이렇게 쌓입니다

아래는 운영 가정 기반 운영 예시입니다. Beta 누적 후 실 케이스로 교체할 예정이며, 실제 결과는 카테고리·시점·운영 방식에 따라 다릅니다.

{cases.map(c=>(
● 운영 예시
{c.plan} · {c.cat}

{c.title}

{[c.m1,c.m2,c.m3].map(([n,l],i)=>(
{n}
{l}
))}

{c.n}

))}
※ 위 수치는 운영 가정 예시이며 수익 보장이 아닙니다. 실수익은 카테고리·시점·운영 방식에 따라 다릅니다.
); } /* ========== 6. 반론 해소 ========== */ function LpObjection(){ const qa = [ ['AI가 쓴 글은 색인이 되나요?', '검증된 10가지 형식이 색인 친화적으로 설계되어 있고, 발행은 본인 인증 계정에 직접 일어나기 때문에 본인 블로그의 도메인 권위와 연결됩니다. 색인은 글 자체보다 발행 누적 + 카테고리 정합 + 도메인 신뢰에서 만들어집니다.'], ['하루 한 편이 정말 필요한가요?', '한두 편 잘 쓰는 것보다 일정한 리듬이 SEO에 더 중요합니다. 검색 엔진은 발행 빈도·카테고리 정합·내부 링크 누적을 함께 보기 때문에 일정한 발행이 누적될수록 색인 안정성이 올라갑니다.'], ['수익이 정말 사용자에게 100% 가나요?', '발행은 본인 인증 계정에 직접 일어납니다. AFFLIX 서버에 트래픽이나 광고가 쌓이는 구조가 아니라 사용자 블로그 소유 트래픽이므로 광고 수익·제휴 수익은 전액 사용자에게 귀속됩니다.'], ['카드 등록 없이 시작 가능한가요?', '예. 가입 시 카드 등록은 받지 않습니다. 무료 1개월 종료 전 카드를 등록하지 않으면 발행만 일시 정지되며 자동 결제는 발생하지 않습니다.'], ['해지 후 발행한 글은 어떻게 되나요?', '이미 발행된 글·썸네일·메타 자산은 사용자 블로그에 그대로 남습니다. AFFLIX 측에서 회수하지 않으며 해지 후에도 사용자 자산입니다.'], ['금지 카테고리는 누가 판단하나요?', '운영 정책으로 미리 잠가 둡니다. 의료·금융·정치 등 가이드라인 위반 우려가 있는 카테고리는 자동 매칭에서 제외되며 사용자가 명시적으로 선택해도 발행 전에 차단됩니다.'], ]; return (
의심해도 좋습니다

이런 질문이 먼저 들 겁니다

시작 전에 가장 많이 받는 6가지 — 디팀이 미리 답합니다.

{qa.map(([q,a],i)=>(
{q}

{a}

))}
); } /* ========== 7. 가치 vs 가격 ========== */ function LpValue(){ const tiles = [ { i:'⏱', img:IMG.value[0], h:'시간이 곧 비용입니다', b:'매일 1편 = 월 20~30시간. 본업이 있는 운영자에게 가장 비싼 자원은 시간입니다. AFFLIX는 시간을 사는 도구에 가깝습니다.' }, { i:'📈', img:IMG.value[1], h:'자산은 누적됩니다', b:'발행한 글은 본인 블로그에 그대로 쌓이고, 색인된 글은 6개월·12개월 뒤에도 트래픽을 만듭니다. 일회성 비용이 아니라 누적 자산 구조입니다.' }, { i:'⚖', img:IMG.value[2], h:'회수 시점이 명확합니다', b:'셋업 3개월 누적 후 첫 안정 수익 구간 진입을 가정합니다. 운영 예시 기준 — 회수 가능 시점과 누적 구조를 같은 시야에서 판단할 수 있습니다.' }, ]; return (
왜 이 가격인가

가격보다 회수 구조를 봐주세요

싸거나 비싼 도구가 아니라, 무엇을 사는지가 더 중요합니다.

{tiles.map((t,i)=>(

{t.h}

{t.b}

))}
); } /* ========== 8. 가격표 — CMO 확정안 ========== */ function LpPricing(){ const plans = [ { name:'Basic', tier:'STARTER', price:'99,000', who:'혼자 시작하는 1인 운영자', scale:'기준 규모', feats:[ ['전용 서버 ', 1대], ['동시 운영 블로그 ', ~50개], ['카테고리 ', 1개], ['매일 자동 발행 · 검증된 글 형식 10종'], ['이메일 알림 · 이메일 문의 지원'], ], cta:'Basic으로 시작' }, { name:'Standard', tier:'GROW', price:'199,000', popular:true, who:'카테고리를 늘려 본격적으로 키우는 분', scale:'Basic의 약 3배 규모', feats:[ ['전용 서버 ', 3대], ['동시 운영 블로그 ', ~150개], ['카테고리 ', 2~3개], ['매일 자동 발행 · 검증된 글 형식 10종'], ['이메일 + 슬랙 알림 · ', 우선 문의 지원], ], cta:'Standard로 시작' }, { name:'Premium', tier:'PRO', price:'399,000', who:'전업으로 크게 운영하는 분', scale:'Basic의 약 5배 규모', feats:[ ['전용 서버 ', 5대], ['동시 운영 블로그 ', ~250개], ['카테고리 ', 제한 없음], ['매일 자동 발행 · 검증된 글 형식 10종 + 신규 베타'], ['이메일 + 슬랙 + 카카오톡 알림'], [우선 문의 지원 (영업일 24시간 내 답변)], ], cta:'Premium으로 시작' }, ]; return (
요금제

운영 규모를 선택하세요

카드 등록 없이 1개월 무료. 셋업 3개월 30%↓ · 약정 1년 25%↓ · 같은 항목이 한눈에 커지는 구조로 비교하세요.

{plans.map(p=>(
{p.tier}
{p.name}

{p.who}

₩{p.price} / 월
⚡ {p.scale}
    {p.feats.map((f,i)=>
  • {Array.isArray(f) ? f : f}
  • )}
{p.cta}
))}

세로로 읽으면 한 플랜의 전부가 보이고, 가로로 읽으면 같은 항목이 1→3→5 / 50→150→250 / 1→2~3→무제한으로 한눈에 커집니다.
결제 시점은 무료 1개월 종료 직전 카드 등록 후 시작 · 언제든 1클릭 해지 · VAT 별도.

); } /* ========== 9. 마지막 마감 ========== */ function LpClose(){ return (

오늘 카드 없이 시작,
내일 첫 자동 발행

본인 인증 계정 하나만 연결하시면 — 시간은 그대로, 자산은 매일 쌓입니다.

1개월 무료로 시작
카드 등록 없이 시작 1개월 무료 언제든 1클릭 해지
); } /* ========== 10. FAQ ========== */ function LpFaq(){ const faq = [ ['쿠팡파트너스 전용인가요? 다른 제휴도 되나요?', '현재는 쿠팡파트너스 자동화 중심으로 가동 중입니다. 네이버쇼핑·트립닷컴 등 다른 제휴 플랫폼은 정책·API 정합 검증 후 단계별로 확장 예정이며, 기존 구독자는 추가 비용 없이 이용할 수 있습니다.'], ['무료체험 기간에 무엇이 제공되나요?', '1개월 동안 가입한 플랜의 모든 기능을 동일하게 제공합니다. 카드 등록 없이 시작하시고, 체험 종료 직전 결제 수단 등록을 별도 안내드립니다. 등록 안 하시면 자동 결제는 발생하지 않습니다.'], ['쿠팡파트너스 ID는 누구 것인가요?', '사용자 본인의 쿠팡파트너스 ID로 연동됩니다. 발행되는 모든 제휴 링크는 사용자 ID로 트래킹되며 수익은 100% 사용자 계정에 적립됩니다.'], ['서버는 어디서 운영되나요?', '국내 클라우드(IDC)에 배치된 전용 서버에서 24시간 가동됩니다. 안정성은 자체 관제 로그와 발행 silent_gate 시스템으로 점검합니다.'], ['수익은 언제부터 발생하나요?', '발행 시작 직후부터 누적되기 시작하지만 색인·SEO 누적 3개월 구간을 지나야 안정 수익 구간 진입을 가정할 수 있습니다. 운영 예시 시나리오 섹션을 참고해주세요.'], ['해지는 자유롭게 가능한가요?', '로그인 후 결제·플랜 화면에서 1클릭으로 해지할 수 있습니다. 별도 전화·메일 절차 없으며 해지 즉시 다음 결제일부터 결제가 중단됩니다.'], ['AI가 쓴 글이 문제가 되지 않나요?', '검증된 10가지 콘텐츠 형식만 사용하기 때문에 가이드라인 위반·중복 콘텐츠 발생 가능성이 낮습니다. 6항목 자동 품질 검수를 통과한 글만 발행됩니다.'], ['정말 모든 것이 자동인가요? 제가 할 일은 없나요?', '핵심 작업(상품 선정/글/썸네일/발행)은 AI가 맡지만 카테고리 선택·발행 시간 변경·발행 정지 같은 운영 의사결정은 사용자 화면에서 조정합니다. 본인 명의의 쿠팡파트너스 가입·구글 계정·본인 인증 세 가지만 준비해주세요.'], ['블로그와 콘텐츠의 소유권은 누구에게 있나요?', '소유권은 사용자에게 있습니다. 발행은 본인 인증 계정으로 직접 일어나며 발행된 글·썸네일·메타 자산은 모두 사용자 블로그에 남습니다.'], ['해지하면 이미 발행된 글은 어떻게 되나요?', '그대로 사용자 블로그에 남습니다. AFFLIX 측에서 회수하지 않으며 검색엔진 노출도 유지됩니다. 해지 후에도 이미 쌓인 글들은 계속 일하며 수익을 만들어냅니다.'], ['시작할 때 카드를 등록해야 하나요?', '아니요. 가입 시 카드 등록은 받지 않습니다. 무료 1개월 종료 전 카드를 등록하지 않으면 발행만 일시 정지됩니다.'], ['3개월 써봤는데 수익이 없으면 어떻게 되나요?', '셋업 3개월은 색인·SEO 누적 구간이라 흐름이 약할 수 있습니다. 조건 충족 시 1개월 무료 연장을 제공합니다. Premium은 우선 문의 지원으로 영업일 24h 내 회신됩니다.'], ['무료체험 후 자동 결제되나요?', '카드 등록을 받지 않기 때문에 체험 종료 시점에 결제 수단을 등록하지 않으면 자동 결제는 발생하지 않습니다. 체험 종료 5일 전 안내 메시지를 보내드리며 계속 이용을 원하시면 그때 결제 수단을 등록해주시면 됩니다.'], ['약정 중간에 해지하면 환불은 어떻게 되나요?', '선결제 금액에서 사용 기간만큼 정상가로 차감 후 잔액을 환불해드립니다. 공식: 선결제액 - (정상가 × 사용 개월수) = 환불액. 약정 1년 플랜의 환불 조건은 결제 화면 하단 [환불 규정]에서 확인할 수 있습니다.'], ]; return (
FAQ

가입 전 이것만 확인하세요

{faq.map(([q,a],i)=>(
{q}
{a}
))}
); } /* ========== Footer ========== */ function LpFoot(){ return ( ); } /* ========== Root ========== */ function LandingApp(){ const [theme, setTheme] = useTheme(); return ( ); } ReactDOM.createRoot(document.getElementById('root')).render();