Default

Wait, the file path is missing. Let me add it.

const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
        Header, Footer, AlignmentType, LevelFormat, HeadingLevel,
        BorderStyle, WidthType, ShadingType, PageNumber, PageBreak } = require('docx');
const fs = require('fs');

const border = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
const borders = { top: border, bottom: border, left: border, right: border };

function cell(text, width, bold = false, fill = null) {
    return new TableCell({
        borders, width: { size: width, type: WidthType.DXA },
        shading: fill ? { fill, type: ShadingType.CLEAR } : undefined,
        margins: { top: 80, bottom: 80, left: 120, right: 120 },
        children: [new Paragraph({ children: [new TextRun({ text, bold, font: "Arial", size: 20 })] })]
    });
}
function headerCell(text, width) { return cell(text, width, true, "D5E8F0"); }
function highlightCell(text, width) { return cell(text, width, true, "E8F5E9"); }
function warnCell(text, width) { return cell(text, width, true, "FFF3E0"); }

const doc = new Document({
    styles: {
        default: { document: { run: { font: "Arial", size: 22 } } },
        paragraphStyles: [
            { id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal", quickFormat: true,
              run: { size: 36, bold: true, font: "Arial", color: "1F4E79" },
              paragraph: { spacing: { before: 300, after: 200 }, outlineLevel: 0 } },
            { id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal", quickFormat: true,
              run: { size: 28, bold: true, font: "Arial", color: "2E75B6" },
              paragraph: { spacing: { before: 240, after: 120 }, outlineLevel: 1 } },
            { id: "Heading3", name: "Heading 3", basedOn: "Normal", next: "Normal", quickFormat: true,
              run: { size: 24, bold: true, font: "Arial", color: "333333" },
              paragraph: { spacing: { before: 180, after: 80 }, outlineLevel: 2 } },
        ]
    },
    numbering: {
        config: [
            { reference: "bullets",
              levels: [{ level: 0, format: LevelFormat.BULLET, text: "\u2022", alignment: AlignmentType.LEFT,
                style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
            { reference: "numbers",
              levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
                style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
        ]
    },
    sections: [{
        properties: { page: { size: { width: 12240, height: 15840 }, margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } },
        headers: { default: new Header({ children: [new Paragraph({ alignment: AlignmentType.RIGHT,
            children: [new TextRun({ text: "Proposal Strategi Meta Ads - Rolina", font: "Arial", size: 18, color: "666666" })] })] }) },
        footers: { default: new Footer({ children: [new Paragraph({ alignment: AlignmentType.CENTER,
            children: [new TextRun({ text: "Page ", font: "Arial", size: 18 }), new TextRun({ children: [PageNumber.CURRENT], font: "Arial", size: 18 })] })] }) },
        children: [
            // ======================== COVER ========================
            new Paragraph({ spacing: { before: 2000 } }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "PROPOSAL STRATEGI", font: "Arial", size: 56, bold: true, color: "1F4E79" })] }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "Meta Ads & Analisis Kompetitor", font: "Arial", size: 44, color: "2E75B6" })] }),
            new Paragraph({ spacing: { before: 400 } }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "ROLINA VISA SERVICES", font: "Arial", size: 36, bold: true, color: "333333" })] }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "rolinavisaservices.com", font: "Arial", size: 28, italics: true, color: "666666" })] }),
            new Paragraph({ spacing: { before: 800 } }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "Disusun oleh: Eko", font: "Arial", size: 24, color: "666666" })] }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "Web Dev | CRM | Social Media Ads", font: "Arial", size: 22, color: "999999" })] }),
            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: "30 Mei 2026", font: "Arial", size: 22, color: "999999" })] }),
            new Paragraph({ children: [new PageBreak()] }),

            // ======================== EXECUTIVE SUMMARY ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Ringkasan Eksekutif")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Paragraph({ children: [new TextRun("Dokumen ini berisi: (1) Analisis kompetitor visa services di Bali, (2) Perbandingan layanan Rolina vs kompetitor, (3) Strategi funnel Meta Ads lengkap, (4) Rekomendasi budget iklan, dan (5) Estimasi biaya jasa pengelolaan iklan. Tujuannya memberikan gambaran menyeluruh tentang peluang Rolina di Meta Ads.")] }),
            new Paragraph({ spacing: { before: 150 } }),
            new Paragraph({ children: [new TextRun({ text: "Temuan Kunci:", bold: true })] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun({ text: "ROLINA UNGGUL: 20+ tahun pengalaman", bold: true }), new TextRun(" - jauh di atas rata-rata kompetitor (5-12 tahun)")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun({ text: "ROLINA UNGGUL: 7 jenis visa", bold: true }), new TextRun(" - paling lengkap di pasar (kompetitor rata-rata 3-5 layanan)")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("~510 iklan Meta Ads dari kompetitor untuk keyword "visa bali" - market sangat aktif & kompetitif")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("Russian market paling banyak demand, tapi Rolina belum ada konten multi-bahasa")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun({ text: "Estimasi budget: Rp 3-4,5 juta/bulan (ad spend) + biaya jasa pengelolaan", bold: true })] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun({ text: "Estimasi leads: 30-90 per bulan", bold: true }), new TextRun(" tergantung skala budget")] }),

            new Paragraph({ children: [new PageBreak()] }),

            // ======================== 1. PROFIL ROLINA ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("1. Profil Rolina Visa Services")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [3000, 6360],
                rows: [
                    new TableRow({ children: [headerCell("Detail", 3000), headerCell("Informasi", 6360)] }),
                    new TableRow({ children: [cell("Website", 3000), cell("rolinavisaservices.com", 6360)] }),
                    new TableRow({ children: [cell("Berdiri Sejak", 3000), cell("2012 - 20+ tahun pengalaman gabungan", 6360)] }),
                    new TableRow({ children: [cell("Lokasi", 3000), cell("Bali, Indonesia", 6360)] }),
                    new TableRow({ children: [cell("Telepon", 3000), cell("+62 361 487121", 6360)] }),
                    new TableRow({ children: [cell("WhatsApp", 3000), cell("+62 895 0900 6600", 6360)] }),
                    new TableRow({ children: [cell("Email", 3000), cell("info@rolinavisaservices.com", 6360)] }),
                    new TableRow({ children: [cell("Facebook", 3000), cell("facebook.com/RolinaVisaServicesOfficial", 6360)] }),
                    new TableRow({ children: [cell("Instagram", 3000), cell("instagram.com/rolinavisaservicesofficial", 6360)] }),
                    new TableRow({ children: [cell("Fitur Unggulan", 3000), cell("Real-time tracking, online consultation, tour packages", 6360)] }),
                ]
            }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("1.1 Layanan Rolina")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],
                rows: [
                    new TableRow({ children: [headerCell("Layanan", 2500), headerCell("Deskripsi", 6860)] }),
                    new TableRow({ children: [cell("Tourist Visa", 2500), cell("Visa kunjungan wisata untuk WNA yang datang ke Indonesia", 6860)] }),
                    new TableRow({ children: [cell("Working Visa", 2500), cell("Visa kerja / KITAS untuk tenaga kerja asing di Indonesia", 6860)] }),
                    new TableRow({ children: [cell("Study Visa", 2500), cell("Visa pelajar untuk mahasiswa asing", 6860)] }),
                    new TableRow({ children: [cell("Family Visa", 2500), cell("Visa penyatuan keluarga", 6860)] }),
                    new TableRow({ children: [cell("Immigrate Visa", 2500), cell("Visa imigrasi / business / investasi", 6860)] }),
                    new TableRow({ children: [cell("Diplomatic Visa", 2500), cell("Visa diplomatik untuk pejabat & VIP", 6860)] }),
                    new TableRow({ children: [cell("Transit Visa", 2500), cell("Visa transit singkat", 6860)] }),
                    new TableRow({ children: [cell("Stay Permit/KITAS", 2500), cell("Izin tinggal terbatas untuk berbagai kebutuhan", 6860)] }),
                    new TableRow({ children: [cell("Tour Packages", 2500), cell("Paket wisata Bali (via partner Svaha Tour)", 6860)] }),
                ]
            }),

            new Paragraph({ children: [new PageBreak()] }),

            // ======================== 2. PERBANDINGAN KOMPETITOR ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("2. Perbandingan Layanan vs Kompetitor")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Paragraph({ children: [new TextRun("Ditemukan ~510 iklan Meta Ads untuk keyword visa bali. Berikut perbandingan Rolina vs 4 kompetitor utama:")] }),
            new Paragraph({ spacing: { before: 150 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("2.1 Perbandingan Layanan")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2000, 1600, 2000, 1900, 1860],
                rows: [
                    new TableRow({ children: [
                        headerCell("Layanan", 2000), headerCell("ROLINA", 1600),
                        headerCell("Bahalap Uras", 2000), headerCell("Peak Solutions", 1900),
                        headerCell("eVisa Bali", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Tourist Visa", 2000), highlightCell("YES", 1600),
                        cell("YES", 2000), cell("YES", 1900), cell("YES", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Working/KITAS", 2000), highlightCell("YES", 1600),
                        cell("YES", 2000), cell("YES", 1900), cell("YES", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Study Visa", 2000), highlightCell("YES - UNIK", 1600),
                        cell("NO", 2000), cell("NO", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Family Visa", 2000), highlightCell("YES - UNIK", 1600),
                        cell("NO", 2000), cell("NO", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Diplomatic Visa", 2000), highlightCell("YES - UNIK", 1600),
                        cell("NO", 2000), cell("NO", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Transit Visa", 2000), highlightCell("YES - UNIK", 1600),
                        cell("NO", 2000), cell("NO", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Business/Invest", 2000), highlightCell("YES", 1600),
                        cell("YES", 2000), cell("YES", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Multiple Entry", 2000), warnCell("NOT LISTED", 1600),
                        cell("YES", 2000), cell("YES", 1900), cell("NO", 1860)
                    ]}),
                    new TableRow({ children: [
                        cell("Tour Packages", 2000), highlightCell("YES - UNIK", 1600),
                        cell("NO", 2000), cell("NO", 1900), cell("NO", 1860)
                    ]}),
                ]
            }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("2.2 Perbandingan Non-Layanan")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 2400, 2300, 2160],
                rows: [
                    new TableRow({ children: [
                        headerCell("Aspek", 2500), headerCell("ROLINA", 2400),
                        headerCell("Kompetitor Terbaik", 2300), headerCell("Verdict", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Pengalaman", 2500), highlightCell("20+ tahun", 2400),
                        cell("12 tahun (eVisa Bali)", 2300), highlightCell("ROLINA UNGGUL", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Jumlah Layanan", 2500), highlightCell("7 visa + tur", 2400),
                        cell("5 layanan (Peak)", 2300), highlightCell("ROLINA UNGGUL", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Multi-bahasa", 2500), warnCell("BELUM ADA", 2400),
                        cell("EN/RU/FR (Bahalap)", 2300), warnCell("PERLU TINGKATKAN", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Harga Website", 2500), warnCell("BELUM ADA", 2400),
                        cell("Transparan (Bahalap)", 2300), warnCell("PERLU TINGKATKAN", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Tracking", 2500), highlightCell("Real-time", 2400),
                        cell("Real-time (Rumaka)", 2300), cell("SETARA", 2160)
                    ]}),
                    new TableRow({ children: [
                        cell("Sosial Media", 2500), highlightCell("FB + IG", 2400),
                        cell("FB + IG", 2300), cell("SETARA", 2160)
                    ]}),
                ]
            }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("2.3 SWOT Rolina")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [4680, 4680],
                rows: [
                    new TableRow({ children: [
                        headerCell("STRENGTHS (Kekuatan)", 4680),
                        headerCell("WEAKNESSES (Kelemahan)", 4680)
                    ]}),
                    new TableRow({ children: [
                        cell("20+ tahun pengalaman\nLayanan paling lengkap (7 jenis)\nTour packages (cross-sell)\nReal-time tracking system\nKantor fisik di Bali", 4680),
                        cell("Belum ada multi-language content\nPricing tidak transparan\nHalaman layanan belum detail\nBelum ada Digital Nomad Visa\nRetirement Community kosong", 4680)
                    ]}),
                    new TableRow({ children: [
                        headerCell("OPPORTUNITIES (Peluang)", 4680),
                        headerCell("THREATS (Ancaman)", 4680)
                    ]}),
                    new TableRow({ children: [
                        cell("Russian market sangat besar\nDigital Nomad Visa trend baru\nVideo ads - belum banyak kompetitor\nFamily/Study = niche unik\nBrand "First in Bali" kuat", 4680),
                        cell("Kompetitor agresif Meta Ads\nVISALF 30.000+ pelanggan\nMulti-bahasa competitor\neVOA dari pemerintah\nPerubahan regulasi imigrasi", 4680)
                    ]}),
                ]
            }),

            new Paragraph({ children: [new PageBreak()] }),

            // ======================== 3. FUNNEL STRATEGY ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("3. Strategi Funnel Meta Ads")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Paragraph({ children: [new TextRun("Strategi 3 tahap (TOFU - MOFU - BOFU) untuk menjaring WNA yang tertarik ke Bali, dari awareness hingga konversi.")] }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("3.1 Overview Funnel")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [1400, 2400, 2700, 2860],
                rows: [
                    new TableRow({ children: [
                        headerCell("Tahap", 1400), headerCell("Objective", 2400),
                        headerCell("Targeting", 2700), headerCell("Content", 2860)
                    ]}),
                    new TableRow({ children: [
                        cell("TOFU", 1400, true), cell("Brand Awareness\nReach", 2400),
                        cell("Interest: Bali travel, Indonesia tourism, expat\nCountries: RU, EU, UK, US, AU\nAge: 25-55", 2700),
                        cell("Video: "Why Bali?"\nBeautiful destination\n"First visa service in Bali since 2012"", 2860)
                    ]}),
                    new TableRow({ children: [
                        cell("MOFU", 1400, true), cell("Traffic, Engagement\nVideo Views", 2400),
                        cell("Engaged with TOFU\nLookalike customers\nWebsite retargeting", 2700),
                        cell("Visa types explained\nTestimonial video\n"3 easy steps to visa"", 2860)
                    ]}),
                    new TableRow({ children: [
                        cell("BOFU", 1400, true), cell("Conversion\nMessages", 2400),
                        cell("Website visitors 30-90d\n50%+ video viewers\nEngaged with MOFU", 2700),
                        cell("WhatsApp CTA\n"Free consultation"\nLimited offer / promo", 2860)
                    ]}),
                ]
            }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("3.2 TOFU - Top of Funnel (30% Budget)")] }),
            new Paragraph({ children: [new TextRun("Objective: Brand Awareness / Reach")] }),
            new Paragraph({ children: [new TextRun("Target: Interest Bali travel, Indonesia tourism, expat life. Countries: Russia, UK, USA, Australia, Germany, France. Age 25-55. Exclude people already in Indonesia.")] }),
            new Paragraph({ spacing: { before: 80 } }),
            new Paragraph({ children: [new TextRun({ text: "Content Plan:", bold: true })] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Video 15-30s: "Why Bali?" - footage Bali indah + "First Visa Service in Bali Since 2012"")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Image Carousel: "What You Need to Know About Bali" - 5-7 slide edukasi ringan")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Video: "Meet the Rolina Team" - humanize the brand")] }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("3.3 MOFU - Middle of Funnel (40% Budget)")] }),
            new Paragraph({ children: [new TextRun("Objective: Traffic / Engagement / Video Views")] }),
            new Paragraph({ children: [new TextRun("Target: People who engaged with TOFU, Lookalike 1-3% from existing customers, website visitors last 30 days.")] }),
            new Paragraph({ spacing: { before: 80 } }),
            new Paragraph({ children: [new TextRun({ text: "Content Plan:", bold: true })] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Video: "Indonesia Visa Types Explained in 60 Seconds"")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Infographic: "Get Your Visa in 3 Simple Steps"")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Testimonial Video: "What Our Clients Say"")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Carousel: "Why Choose Rolina Over Others?" - 20+ years, 7 visa types, tracking")] }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("3.4 BOFU - Bottom of Funnel (30% Budget)")] }),
            new Paragraph({ children: [new TextRun("Objective: Conversion / Messages")] }),
            new Paragraph({ children: [new TextRun("Target: Website visitors 30-90 days, 50%+ video viewers, people who clicked 'Learn More'.")] }),
            new Paragraph({ spacing: { before: 80 } }),
            new Paragraph({ children: [new TextRun({ text: "Content Plan:", bold: true })] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("WhatsApp CTA Ad: "Chat Our Visa Expert Now" - langsung ke WA")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Offer Ad: "Free Visa Consultation - Limited Slots" - urgency + free value")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Promo Ad: "Visa Processing - Special Rate This Month"")] }),
            new Paragraph({ numbering: { reference: "numbers", level: 0 }, children: [new TextRun("Social Proof: "Join 1,000+ Happy Travelers"")] }),

            new Paragraph({ children: [new PageBreak()] }),

            // ======================== 4. BUDGET ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("4. Budget Iklan (Ad Spend)")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Paragraph({ children: [new TextRun("Tiga opsi budget, disesuaikan dengan kapasitas Rolina. Kurs estimasi: $1 = Rp 16.500.")] }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("4.1 Paket A - Starter")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],
                rows: [
                    new TableRow({ children: [headerCell("Item", 2500), headerCell("Detail", 6860)] }),
                    new TableRow({ children: [cell("Budget Harian", 2500), cell("$6-10/hari (~Rp 100.000-165.000)", 6860)] }),
                    new TableRow({ children: [cell("Budget Bulanan", 2500), cell("$180-300/bulan (~Rp 3-5 juta)", 6860)] }),
                    new TableRow({ children: [cell("Alokasi Funnel", 2500), cell("TOFU 40% | MOFU 35% | BOFU 25%", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Reach", 2500), cell("30.000 - 50.000 orang/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Klik", 2500), cell("300 - 600 klik/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Leads", 2500), cell("15 - 30 leads (WA/Call)", 6860)] }),
                    new TableRow({ children: [cell("Periode", 2500), cell("3 bulan minimal untuk test & optimize", 6860)] }),
                ]
            }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("4.2 Paket B - Growth (Recommended)")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],
                rows: [
                    new TableRow({ children: [headerCell("Item", 2500), headerCell("Detail", 6860)] }),
                    new TableRow({ children: [cell("Budget Harian", 2500), highlightCell("$12-18/hari (~Rp 200.000-300.000)", 6860)] }),
                    new TableRow({ children: [cell("Budget Bulanan", 2500), highlightCell("$360-540/bulan (~Rp 6-9 juta)", 6860)] }),
                    new TableRow({ children: [cell("Alokasi Funnel", 2500), cell("TOFU 30% | MOFU 40% | BOFU 30%", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Reach", 2500), cell("60.000 - 100.000 orang/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Klik", 2500), cell("600 - 1.200 klik/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Leads", 2500), cell("30 - 60 leads/bulan", 6860)] }),
                    new TableRow({ children: [cell("Periode", 2500), cell("3-6 bulan untuk hasil optimal", 6860)] }),
                ]
            }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("4.3 Paket C - Aggressive")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],
                rows: [
                    new TableRow({ children: [headerCell("Item", 2500), headerCell("Detail", 6860)] }),
                    new TableRow({ children: [cell("Budget Harian", 2500), cell("$25-30/hari (~Rp 400.000-500.000)", 6860)] }),
                    new TableRow({ children: [cell("Budget Bulanan", 2500), cell("$750-900/bulan (~Rp 12-15 juta)", 6860)] }),
                    new TableRow({ children: [cell("Alokasi Funnel", 2500), cell("TOFU 20% | MOFU 30% | BOFU 50%", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Reach", 2500), cell("100.000 - 180.000 orang/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Klik", 2500), cell("1.000 - 2.000 klik/bulan", 6860)] }),
                    new TableRow({ children: [cell("Estimasi Leads", 2500), cell("50 - 90 leads/bulan", 6860)] }),
                    new TableRow({ children: [cell("Periode", 2500), cell("Minimal 3 bulan (konversi lebih agresif)", 6860)] }),
                ]
            }),

            new Paragraph({ spacing: { before: 300 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("4.4 Perbandingan Paket")] }),
            new Table({
                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2200, 2400, 2480, 2280],
                rows: [
                    new TableRow({ children: [
                        headerCell("", 2200), headerCell("Paket A (Starter)", 2400),
                        headerCell("Paket B (Growth)", 2480), headerCell("Paket C (Aggressive)", 2280)
                    ]}),
                    new TableRow({ children: [
                        cell("Budget/bln", 2200), cell("Rp 3-5 jt", 2400),
                        highlightCell("Rp 6-9 jt", 2480), cell("Rp 12-15 jt", 2280)
                    ]}),
                    new TableRow({ children: [
                        cell("Reach", 2200), cell("30K-50K", 2400),
                        highlightCell("60K-100K", 2480), cell("100K-180K", 2280)
                    ]}),
                    new TableRow({ children: [
                        cell("Leads", 2200), cell("15-30", 2400),
                        highlightCell("30-60", 2480), cell("50-90", 2280)
                    ]}),
                    new TableRow({ children: [
                        cell("Cocok untuk", 2200), cell("Testing market", 2400),
                        highlightCell("Scale-up bisnis", 2480), cell("Cepat scale", 2280)
                    ]}),
                ]
            }),

            new Paragraph({ children: [new PageBreak()] }),

            // ======================== 5. JASA ADVERTISER ========================
            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("5. Estimasi Jasa Advertiser")] }),
            new Paragraph({ spacing: { before: 100 } }),
            new Paragraph({ children: [new TextRun("Berikut estimasi biaya jasa pengelolaan iklan Meta Ads (Facebook & Instagram). Mencakup setup, manajemen, optimasi, dan reporting.")] }),

            new Paragraph({ spacing: { before: 200 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("5.1 Lingkup Pekerjaan")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("Account setup: Business Manager, Pixel, Conversion API, audience setup")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("Creative strategy: konsep konten, copywriting, brief visual")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("Campaign management: setup, monitoring, optimasi harian")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("A/B testing: audience, creative, placement, landing page")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("Monthly reporting: performance metrics, insights, rekomendasi")] }),
            new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [new TextRun("WhatsApp/email komunikasi: koordinasi konten & update mingguan")] }),

            new Paragraph({ spacing: { before: 250 } }),
            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("5.2 O

{"content": "const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, \n        Header, Footer, AlignmentType, LevelFormat, HeadingLevel, \n        BorderStyle, WidthType, ShadingType, PageNumber, PageBreak } = require('docx');\nconst fs = require('fs');\n\nconst border = { style: BorderStyle.SINGLE, size: 1, color: \"CCCCCC\" };\nconst borders = { top: border, bottom: border, left: border, right: border };\n\nfunction cell(text, width, bold = false, fill = null) {\n    return new TableCell({\n        borders, width: { size: width, type: WidthType.DXA },\n        shading: fill ? { fill, type: ShadingType.CLEAR } : undefined,\n        margins: { top: 80, bottom: 80, left: 120, right: 120 },\n        children: [new Paragraph({ children: [new TextRun({ text, bold, font: \"Arial\", size: 20 })] })]\n    });\n}\nfunction headerCell(text, width) { return cell(text, width, true, \"D5E8F0\"); }\nfunction highlightCell(text, width) { return cell(text, width, true, \"E8F5E9\"); }\nfunction warnCell(text, width) { return cell(text, width, true, \"FFF3E0\"); }\n\nconst doc = new Document({\n    styles: {\n        default: { document: { run: { font: \"Arial\", size: 22 } } },\n        paragraphStyles: [\n            { id: \"Heading1\", name: \"Heading 1\", basedOn: \"Normal\", next: \"Normal\", quickFormat: true,\n              run: { size: 36, bold: true, font: \"Arial\", color: \"1F4E79\" },\n              paragraph: { spacing: { before: 300, after: 200 }, outlineLevel: 0 } },\n            { id: \"Heading2\", name: \"Heading 2\", basedOn: \"Normal\", next: \"Normal\", quickFormat: true,\n              run: { size: 28, bold: true, font: \"Arial\", color: \"2E75B6\" },\n              paragraph: { spacing: { before: 240, after: 120 }, outlineLevel: 1 } },\n            { id: \"Heading3\", name: \"Heading 3\", basedOn: \"Normal\", next: \"Normal\", quickFormat: true,\n              run: { size: 24, bold: true, font: \"Arial\", color: \"333333\" },\n              paragraph: { spacing: { before: 180, after: 80 }, outlineLevel: 2 } },\n        ]\n    },\n    numbering: {\n        config: [\n            { reference: \"bullets\",\n              levels: [{ level: 0, format: LevelFormat.BULLET, text: \"\\u2022\", alignment: AlignmentType.LEFT,\n                style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },\n            { reference: \"numbers\",\n              levels: [{ level: 0, format: LevelFormat.DECIMAL, text: \"%1.\", alignment: AlignmentType.LEFT,\n                style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },\n        ]\n    },\n    sections: [{\n        properties: { page: { size: { width: 12240, height: 15840 }, margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } },\n        headers: { default: new Header({ children: [new Paragraph({ alignment: AlignmentType.RIGHT,\n            children: [new TextRun({ text: \"Proposal Strategi Meta Ads - Rolina\", font: \"Arial\", size: 18, color: \"666666\" })] })] }) },\n        footers: { default: new Footer({ children: [new Paragraph({ alignment: AlignmentType.CENTER,\n            children: [new TextRun({ text: \"Page \", font: \"Arial\", size: 18 }), new TextRun({ children: [PageNumber.CURRENT], font: \"Arial\", size: 18 })] })] }) },\n        children: [\n            // ======================== COVER ========================\n            new Paragraph({ spacing: { before: 2000 } }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"PROPOSAL STRATEGI\", font: \"Arial\", size: 56, bold: true, color: \"1F4E79\" })] }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"Meta Ads & Analisis Kompetitor\", font: \"Arial\", size: 44, color: \"2E75B6\" })] }),\n            new Paragraph({ spacing: { before: 400 } }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"ROLINA VISA SERVICES\", font: \"Arial\", size: 36, bold: true, color: \"333333\" })] }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"rolinavisaservices.com\", font: \"Arial\", size: 28, italics: true, color: \"666666\" })] }),\n            new Paragraph({ spacing: { before: 800 } }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"Disusun oleh: Eko\", font: \"Arial\", size: 24, color: \"666666\" })] }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"Web Dev | CRM | Social Media Ads\", font: \"Arial\", size: 22, color: \"999999\" })] }),\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: \"30 Mei 2026\", font: \"Arial\", size: 22, color: \"999999\" })] }),\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== EXECUTIVE SUMMARY ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"Ringkasan Eksekutif\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Paragraph({ children: [new TextRun(\"Dokumen ini berisi: (1) Analisis kompetitor visa services di Bali, (2) Perbandingan layanan Rolina vs kompetitor, (3) Strategi funnel Meta Ads lengkap, (4) Rekomendasi budget iklan, dan (5) Estimasi biaya jasa pengelolaan iklan. Tujuannya memberikan gambaran menyeluruh tentang peluang Rolina di Meta Ads.\")] }),\n            new Paragraph({ spacing: { before: 150 } }),\n            new Paragraph({ children: [new TextRun({ text: \"Temuan Kunci:\", bold: true })] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun({ text: \"ROLINA UNGGUL: 20+ tahun pengalaman\", bold: true }), new TextRun(\" - jauh di atas rata-rata kompetitor (5-12 tahun)\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun({ text: \"ROLINA UNGGUL: 7 jenis visa\", bold: true }), new TextRun(\" - paling lengkap di pasar (kompetitor rata-rata 3-5 layanan)\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"~510 iklan Meta Ads dari kompetitor untuk keyword \"visa bali\" - market sangat aktif & kompetitif\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"Russian market paling banyak demand, tapi Rolina belum ada konten multi-bahasa\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun({ text: \"Estimasi budget: Rp 3-4,5 juta/bulan (ad spend) + biaya jasa pengelolaan\", bold: true })] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun({ text: \"Estimasi leads: 30-90 per bulan\", bold: true }), new TextRun(\" tergantung skala budget\")] }),\n\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== 1. PROFIL ROLINA ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"1. Profil Rolina Visa Services\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [3000, 6360],\n                rows: [\n                    new TableRow({ children: [headerCell(\"Detail\", 3000), headerCell(\"Informasi\", 6360)] }),\n                    new TableRow({ children: [cell(\"Website\", 3000), cell(\"rolinavisaservices.com\", 6360)] }),\n                    new TableRow({ children: [cell(\"Berdiri Sejak\", 3000), cell(\"2012 - 20+ tahun pengalaman gabungan\", 6360)] }),\n                    new TableRow({ children: [cell(\"Lokasi\", 3000), cell(\"Bali, Indonesia\", 6360)] }),\n                    new TableRow({ children: [cell(\"Telepon\", 3000), cell(\"+62 361 487121\", 6360)] }),\n                    new TableRow({ children: [cell(\"WhatsApp\", 3000), cell(\"+62 895 0900 6600\", 6360)] }),\n                    new TableRow({ children: [cell(\"Email\", 3000), cell(\"info@rolinavisaservices.com\", 6360)] }),\n                    new TableRow({ children: [cell(\"Facebook\", 3000), cell(\"facebook.com/RolinaVisaServicesOfficial\", 6360)] }),\n                    new TableRow({ children: [cell(\"Instagram\", 3000), cell(\"instagram.com/rolinavisaservicesofficial\", 6360)] }),\n                    new TableRow({ children: [cell(\"Fitur Unggulan\", 3000), cell(\"Real-time tracking, online consultation, tour packages\", 6360)] }),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"1.1 Layanan Rolina\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],\n                rows: [\n                    new TableRow({ children: [headerCell(\"Layanan\", 2500), headerCell(\"Deskripsi\", 6860)] }),\n                    new TableRow({ children: [cell(\"Tourist Visa\", 2500), cell(\"Visa kunjungan wisata untuk WNA yang datang ke Indonesia\", 6860)] }),\n                    new TableRow({ children: [cell(\"Working Visa\", 2500), cell(\"Visa kerja / KITAS untuk tenaga kerja asing di Indonesia\", 6860)] }),\n                    new TableRow({ children: [cell(\"Study Visa\", 2500), cell(\"Visa pelajar untuk mahasiswa asing\", 6860)] }),\n                    new TableRow({ children: [cell(\"Family Visa\", 2500), cell(\"Visa penyatuan keluarga\", 6860)] }),\n                    new TableRow({ children: [cell(\"Immigrate Visa\", 2500), cell(\"Visa imigrasi / business / investasi\", 6860)] }),\n                    new TableRow({ children: [cell(\"Diplomatic Visa\", 2500), cell(\"Visa diplomatik untuk pejabat & VIP\", 6860)] }),\n                    new TableRow({ children: [cell(\"Transit Visa\", 2500), cell(\"Visa transit singkat\", 6860)] }),\n                    new TableRow({ children: [cell(\"Stay Permit/KITAS\", 2500), cell(\"Izin tinggal terbatas untuk berbagai kebutuhan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Tour Packages\", 2500), cell(\"Paket wisata Bali (via partner Svaha Tour)\", 6860)] }),\n                ]\n            }),\n\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== 2. PERBANDINGAN KOMPETITOR ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"2. Perbandingan Layanan vs Kompetitor\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Paragraph({ children: [new TextRun(\"Ditemukan ~510 iklan Meta Ads untuk keyword visa bali. Berikut perbandingan Rolina vs 4 kompetitor utama:\")] }),\n            new Paragraph({ spacing: { before: 150 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"2.1 Perbandingan Layanan\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2000, 1600, 2000, 1900, 1860],\n                rows: [\n                    new TableRow({ children: [\n                        headerCell(\"Layanan\", 2000), headerCell(\"ROLINA\", 1600),\n                        headerCell(\"Bahalap Uras\", 2000), headerCell(\"Peak Solutions\", 1900),\n                        headerCell(\"eVisa Bali\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Tourist Visa\", 2000), highlightCell(\"YES\", 1600),\n                        cell(\"YES\", 2000), cell(\"YES\", 1900), cell(\"YES\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Working/KITAS\", 2000), highlightCell(\"YES\", 1600),\n                        cell(\"YES\", 2000), cell(\"YES\", 1900), cell(\"YES\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Study Visa\", 2000), highlightCell(\"YES - UNIK\", 1600),\n                        cell(\"NO\", 2000), cell(\"NO\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Family Visa\", 2000), highlightCell(\"YES - UNIK\", 1600),\n                        cell(\"NO\", 2000), cell(\"NO\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Diplomatic Visa\", 2000), highlightCell(\"YES - UNIK\", 1600),\n                        cell(\"NO\", 2000), cell(\"NO\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Transit Visa\", 2000), highlightCell(\"YES - UNIK\", 1600),\n                        cell(\"NO\", 2000), cell(\"NO\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Business/Invest\", 2000), highlightCell(\"YES\", 1600),\n                        cell(\"YES\", 2000), cell(\"YES\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Multiple Entry\", 2000), warnCell(\"NOT LISTED\", 1600),\n                        cell(\"YES\", 2000), cell(\"YES\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Tour Packages\", 2000), highlightCell(\"YES - UNIK\", 1600),\n                        cell(\"NO\", 2000), cell(\"NO\", 1900), cell(\"NO\", 1860)\n                    ]}),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"2.2 Perbandingan Non-Layanan\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 2400, 2300, 2160],\n                rows: [\n                    new TableRow({ children: [\n                        headerCell(\"Aspek\", 2500), headerCell(\"ROLINA\", 2400),\n                        headerCell(\"Kompetitor Terbaik\", 2300), headerCell(\"Verdict\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Pengalaman\", 2500), highlightCell(\"20+ tahun\", 2400),\n                        cell(\"12 tahun (eVisa Bali)\", 2300), highlightCell(\"ROLINA UNGGUL\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Jumlah Layanan\", 2500), highlightCell(\"7 visa + tur\", 2400),\n                        cell(\"5 layanan (Peak)\", 2300), highlightCell(\"ROLINA UNGGUL\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Multi-bahasa\", 2500), warnCell(\"BELUM ADA\", 2400),\n                        cell(\"EN/RU/FR (Bahalap)\", 2300), warnCell(\"PERLU TINGKATKAN\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Harga Website\", 2500), warnCell(\"BELUM ADA\", 2400),\n                        cell(\"Transparan (Bahalap)\", 2300), warnCell(\"PERLU TINGKATKAN\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Tracking\", 2500), highlightCell(\"Real-time\", 2400),\n                        cell(\"Real-time (Rumaka)\", 2300), cell(\"SETARA\", 2160)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Sosial Media\", 2500), highlightCell(\"FB + IG\", 2400),\n                        cell(\"FB + IG\", 2300), cell(\"SETARA\", 2160)\n                    ]}),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"2.3 SWOT Rolina\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [4680, 4680],\n                rows: [\n                    new TableRow({ children: [\n                        headerCell(\"STRENGTHS (Kekuatan)\", 4680),\n                        headerCell(\"WEAKNESSES (Kelemahan)\", 4680)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"20+ tahun pengalaman\\nLayanan paling lengkap (7 jenis)\\nTour packages (cross-sell)\\nReal-time tracking system\\nKantor fisik di Bali\", 4680),\n                        cell(\"Belum ada multi-language content\\nPricing tidak transparan\\nHalaman layanan belum detail\\nBelum ada Digital Nomad Visa\\nRetirement Community kosong\", 4680)\n                    ]}),\n                    new TableRow({ children: [\n                        headerCell(\"OPPORTUNITIES (Peluang)\", 4680),\n                        headerCell(\"THREATS (Ancaman)\", 4680)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Russian market sangat besar\\nDigital Nomad Visa trend baru\\nVideo ads - belum banyak kompetitor\\nFamily/Study = niche unik\\nBrand \"First in Bali\" kuat\", 4680),\n                        cell(\"Kompetitor agresif Meta Ads\\nVISALF 30.000+ pelanggan\\nMulti-bahasa competitor\\neVOA dari pemerintah\\nPerubahan regulasi imigrasi\", 4680)\n                    ]}),\n                ]\n            }),\n\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== 3. FUNNEL STRATEGY ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"3. Strategi Funnel Meta Ads\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Paragraph({ children: [new TextRun(\"Strategi 3 tahap (TOFU - MOFU - BOFU) untuk menjaring WNA yang tertarik ke Bali, dari awareness hingga konversi.\")] }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"3.1 Overview Funnel\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [1400, 2400, 2700, 2860],\n                rows: [\n                    new TableRow({ children: [\n                        headerCell(\"Tahap\", 1400), headerCell(\"Objective\", 2400),\n                        headerCell(\"Targeting\", 2700), headerCell(\"Content\", 2860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"TOFU\", 1400, true), cell(\"Brand Awareness\\nReach\", 2400),\n                        cell(\"Interest: Bali travel, Indonesia tourism, expat\\nCountries: RU, EU, UK, US, AU\\nAge: 25-55\", 2700),\n                        cell(\"Video: \"Why Bali?\"\\nBeautiful destination\\n\"First visa service in Bali since 2012\"\", 2860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"MOFU\", 1400, true), cell(\"Traffic, Engagement\\nVideo Views\", 2400),\n                        cell(\"Engaged with TOFU\\nLookalike customers\\nWebsite retargeting\", 2700),\n                        cell(\"Visa types explained\\nTestimonial video\\n\"3 easy steps to visa\"\", 2860)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"BOFU\", 1400, true), cell(\"Conversion\\nMessages\", 2400),\n                        cell(\"Website visitors 30-90d\\n50%+ video viewers\\nEngaged with MOFU\", 2700),\n                        cell(\"WhatsApp CTA\\n\"Free consultation\"\\nLimited offer / promo\", 2860)\n                    ]}),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"3.2 TOFU - Top of Funnel (30% Budget)\")] }),\n            new Paragraph({ children: [new TextRun(\"Objective: Brand Awareness / Reach\")] }),\n            new Paragraph({ children: [new TextRun(\"Target: Interest Bali travel, Indonesia tourism, expat life. Countries: Russia, UK, USA, Australia, Germany, France. Age 25-55. Exclude people already in Indonesia.\")] }),\n            new Paragraph({ spacing: { before: 80 } }),\n            new Paragraph({ children: [new TextRun({ text: \"Content Plan:\", bold: true })] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Video 15-30s: \"Why Bali?\" - footage Bali indah + \"First Visa Service in Bali Since 2012\"\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Image Carousel: \"What You Need to Know About Bali\" - 5-7 slide edukasi ringan\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Video: \"Meet the Rolina Team\" - humanize the brand\")] }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"3.3 MOFU - Middle of Funnel (40% Budget)\")] }),\n            new Paragraph({ children: [new TextRun(\"Objective: Traffic / Engagement / Video Views\")] }),\n            new Paragraph({ children: [new TextRun(\"Target: People who engaged with TOFU, Lookalike 1-3% from existing customers, website visitors last 30 days.\")] }),\n            new Paragraph({ spacing: { before: 80 } }),\n            new Paragraph({ children: [new TextRun({ text: \"Content Plan:\", bold: true })] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Video: \"Indonesia Visa Types Explained in 60 Seconds\"\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Infographic: \"Get Your Visa in 3 Simple Steps\"\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Testimonial Video: \"What Our Clients Say\"\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Carousel: \"Why Choose Rolina Over Others?\" - 20+ years, 7 visa types, tracking\")] }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"3.4 BOFU - Bottom of Funnel (30% Budget)\")] }),\n            new Paragraph({ children: [new TextRun(\"Objective: Conversion / Messages\")] }),\n            new Paragraph({ children: [new TextRun(\"Target: Website visitors 30-90 days, 50%+ video viewers, people who clicked 'Learn More'.\")] }),\n            new Paragraph({ spacing: { before: 80 } }),\n            new Paragraph({ children: [new TextRun({ text: \"Content Plan:\", bold: true })] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"WhatsApp CTA Ad: \"Chat Our Visa Expert Now\" - langsung ke WA\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Offer Ad: \"Free Visa Consultation - Limited Slots\" - urgency + free value\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Promo Ad: \"Visa Processing - Special Rate This Month\"\")] }),\n            new Paragraph({ numbering: { reference: \"numbers\", level: 0 }, children: [new TextRun(\"Social Proof: \"Join 1,000+ Happy Travelers\"\")] }),\n\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== 4. BUDGET ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"4. Budget Iklan (Ad Spend)\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Paragraph({ children: [new TextRun(\"Tiga opsi budget, disesuaikan dengan kapasitas Rolina. Kurs estimasi: $1 = Rp 16.500.\")] }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"4.1 Paket A - Starter\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],\n                rows: [\n                    new TableRow({ children: [headerCell(\"Item\", 2500), headerCell(\"Detail\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Harian\", 2500), cell(\"$6-10/hari (~Rp 100.000-165.000)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Bulanan\", 2500), cell(\"$180-300/bulan (~Rp 3-5 juta)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Alokasi Funnel\", 2500), cell(\"TOFU 40% | MOFU 35% | BOFU 25%\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Reach\", 2500), cell(\"30.000 - 50.000 orang/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Klik\", 2500), cell(\"300 - 600 klik/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Leads\", 2500), cell(\"15 - 30 leads (WA/Call)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Periode\", 2500), cell(\"3 bulan minimal untuk test & optimize\", 6860)] }),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"4.2 Paket B - Growth (Recommended)\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],\n                rows: [\n                    new TableRow({ children: [headerCell(\"Item\", 2500), headerCell(\"Detail\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Harian\", 2500), highlightCell(\"$12-18/hari (~Rp 200.000-300.000)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Bulanan\", 2500), highlightCell(\"$360-540/bulan (~Rp 6-9 juta)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Alokasi Funnel\", 2500), cell(\"TOFU 30% | MOFU 40% | BOFU 30%\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Reach\", 2500), cell(\"60.000 - 100.000 orang/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Klik\", 2500), cell(\"600 - 1.200 klik/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Leads\", 2500), cell(\"30 - 60 leads/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Periode\", 2500), cell(\"3-6 bulan untuk hasil optimal\", 6860)] }),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"4.3 Paket C - Aggressive\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2500, 6860],\n                rows: [\n                    new TableRow({ children: [headerCell(\"Item\", 2500), headerCell(\"Detail\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Harian\", 2500), cell(\"$25-30/hari (~Rp 400.000-500.000)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Budget Bulanan\", 2500), cell(\"$750-900/bulan (~Rp 12-15 juta)\", 6860)] }),\n                    new TableRow({ children: [cell(\"Alokasi Funnel\", 2500), cell(\"TOFU 20% | MOFU 30% | BOFU 50%\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Reach\", 2500), cell(\"100.000 - 180.000 orang/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Klik\", 2500), cell(\"1.000 - 2.000 klik/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Estimasi Leads\", 2500), cell(\"50 - 90 leads/bulan\", 6860)] }),\n                    new TableRow({ children: [cell(\"Periode\", 2500), cell(\"Minimal 3 bulan (konversi lebih agresif)\", 6860)] }),\n                ]\n            }),\n\n            new Paragraph({ spacing: { before: 300 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"4.4 Perbandingan Paket\")] }),\n            new Table({\n                width: { size: 9360, type: WidthType.DXA }, columnWidths: [2200, 2400, 2480, 2280],\n                rows: [\n                    new TableRow({ children: [\n                        headerCell(\"\", 2200), headerCell(\"Paket A (Starter)\", 2400),\n                        headerCell(\"Paket B (Growth)\", 2480), headerCell(\"Paket C (Aggressive)\", 2280)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Budget/bln\", 2200), cell(\"Rp 3-5 jt\", 2400),\n                        highlightCell(\"Rp 6-9 jt\", 2480), cell(\"Rp 12-15 jt\", 2280)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Reach\", 2200), cell(\"30K-50K\", 2400),\n                        highlightCell(\"60K-100K\", 2480), cell(\"100K-180K\", 2280)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Leads\", 2200), cell(\"15-30\", 2400),\n                        highlightCell(\"30-60\", 2480), cell(\"50-90\", 2280)\n                    ]}),\n                    new TableRow({ children: [\n                        cell(\"Cocok untuk\", 2200), cell(\"Testing market\", 2400),\n                        highlightCell(\"Scale-up bisnis\", 2480), cell(\"Cepat scale\", 2280)\n                    ]}),\n                ]\n            }),\n\n            new Paragraph({ children: [new PageBreak()] }),\n\n            // ======================== 5. JASA ADVERTISER ========================\n            new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun(\"5. Estimasi Jasa Advertiser\")] }),\n            new Paragraph({ spacing: { before: 100 } }),\n            new Paragraph({ children: [new TextRun(\"Berikut estimasi biaya jasa pengelolaan iklan Meta Ads (Facebook & Instagram). Mencakup setup, manajemen, optimasi, dan reporting.\")] }),\n\n            new Paragraph({ spacing: { before: 200 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"5.1 Lingkup Pekerjaan\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"Account setup: Business Manager, Pixel, Conversion API, audience setup\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"Creative strategy: konsep konten, copywriting, brief visual\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"Campaign management: setup, monitoring, optimasi harian\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"A/B testing: audience, creative, placement, landing page\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"Monthly reporting: performance metrics, insights, rekomendasi\")] }),\n            new Paragraph({ numbering: { reference: \"bullets\", level: 0 }, children: [new TextRun(\"WhatsApp/email komunikasi: koordinasi konten & update mingguan\")] }),\n\n            new Paragraph({ spacing: { before: 250 } }),\n            new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun(\"5.2 O


system

Error: write_file() missing 1 required positional argument: 'file_path'