#!/usr/bin/env python3
"""StudioSoft: artikel pendukung #3 (fase 1 klaster agensi) — agensi vs freelancer vs in-house."""
import base64, json, re, sys, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
DOM = "studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()

JUDUL = "Digital Agency vs Freelancer vs In-house: Mana yang Tepat untuk Bisnis Anda"
SLUG = "digital-agency-vs-freelancer-vs-in-house"
FOKUS = "digital agency vs freelancer"
META_JUDUL = "Digital Agency vs Freelancer vs In-house"
META_DESC = ("Perbandingan digital agency, freelancer, dan tim in-house: biaya, kecepatan, risiko, "
             "dan cara memilih yang cocok dengan kondisi bisnis Anda sekarang.")

WA = "https://wa.me/6281935000624?text=Halo%20StudioSoft%2C%20saya%20ingin%20konsultasi%20digital%20marketing"
TOMBOL = ('<p style="text-align:center;margin:32px 0 8px"><a href="' + WA +
          '" target="_blank" rel="noopener" style="display:inline-block;background-color:#0f2557;'
          'color:#ffffff;padding:15px 34px;font-size:18px;font-weight:bold;text-decoration:none;'
          'border-radius:6px;">Konsultasi Gratis</a></p>')

ISI = """
<p>Pertanyaan ini muncul di hampir setiap rapat anggaran: sebaiknya memakai digital agency, menyewa
freelancer, atau merekrut orang sendiri? Tidak ada jawaban yang berlaku untuk semua bisnis. Ada usaha
yang tumbuh cepat dengan satu freelancer, ada juga yang akhirnya membakar uang karena memaksa tim
internal mengerjakan hal yang belum mereka kuasai.</p>

<p>Halaman ini membandingkan ketiganya dari sisi yang jarang dibahas di penawaran: siapa yang bertanggung
jawab ketika hasilnya kurang, berapa biaya yang tidak terlihat, dan pada kondisi seperti apa masing-masing
pilihan masuk akal.</p>

<h2>Freelancer: cepat, murah, dan bergantung pada satu orang</h2>
<p>Freelancer cocok kalau pekerjaannya jelas dan berulang, misalnya menulis artikel, membuat desain
untuk kampanye tertentu, atau memasang pelacakan di situs. Komunikasinya langsung, tidak ada perantara,
dan biayanya biasanya paling ringan.</p>

<p>Risikonya ada pada kapasitas. Satu orang punya jam terbatas, jadi ketika permintaan naik, pekerjaan
menumpuk atau kualitasnya turun. Freelancer juga jarang punya pengganti: kalau dia sakit, dapat proyek
besar dari klien lain, atau menghilang tanpa kabar, pekerjaan Anda berhenti. Untuk pekerjaan yang
berpengaruh langsung ke penjualan, itu risiko yang perlu dihitung.</p>

<p>Yang perlu dilakukan kalau memilih jalur ini: minta semua materi dan akses disimpan di akun milik
Anda, tetapkan tenggat tertulis, dan jangan menggantungkan seluruh kanal pemasaran pada satu orang.</p>

<h2>In-house: paling paham bisnis, paling mahal per orang</h2>
<p>Orang yang bekerja di dalam tim Anda memahami produk, pelanggan, dan kebiasaan internal. Komunikasi
tidak perlu penjelasan panjang, dan keputusan bisa diambil cepat.</p>

<p>Masalahnya, satu orang biasanya tidak cukup untuk menangani semuanya. Pemasaran digital hari ini
menuntut keahlian yang berbeda-beda: teknis situs, penulisan, desain, iklan, dan analisis data. Merekrut
satu spesialis untuk masing-masing bidang berarti biaya gaji, peralatan, dan pelatihan yang harus jalan
terus, termasuk pada bulan-bulan yang penjualannya sedang sepi.</p>

<p>Ada biaya lain yang sering terlewat. Tanpa mentor yang berpengalaman, orang pertama yang Anda rekrut
belajar sambil bekerja, dan kesalahannya ditanggung bisnis. Menyiapkan arahan, meninjau pekerjaan, dan
mengukur hasil juga menuntut waktu manajemen yang tidak sedikit.</p>

<h2>Agensi: tim lengkap, tapi hanya sebaik cara Anda memilihnya</h2>
<p>Agensi menyediakan orang-orang dengan keahlian berbeda dalam satu kontrak: yang mengurus teknis situs,
yang menulis, yang mengatur iklan, dan yang membaca data. Anda tidak perlu merekrut, dan kalau satu orang
berhalangan, pekerjaan tetap lanjut.</p>

<p>Kelebihan lainnya adalah pengalaman dari banyak klien. Pola yang berhasil di satu industri biasanya
bisa dipindahkan, dengan penyesuaian. Untuk bisnis yang baru mulai serius di kanal digital, itu memangkas
waktu coba-coba.</p>

<p>Yang membuat agensi tidak cocok adalah ketika peran Anda hilang sepenuhnya. Tanpa akses data, tanpa
laporan yang jelas, dan tanpa pertemuan berkala, Anda kehilangan kemampuan menilai apakah pekerjaannya
berjalan atau sekadar berjalan di tempat. Karena itu, akses akun dan laporan bulanan sebaiknya jadi syarat
sejak awal, bukan permintaan tambahan di kemudian hari.</p>

<p>Untuk melihat bagaimana agensi di Surabaya bekerja dan apa yang biasanya mereka tangani, kami
merangkum perbandingannya di
<a href="https://studiosoft.id/digital-agency-terbaik-di-surabaya/">daftar digital agency terbaik di Surabaya</a>.</p>

<h2>Perbandingan singkat dari empat sisi</h2>

<p><strong>Kecepatan mulai.</strong> Freelancer dan agensi bisa mulai dalam hitungan hari. In-house
butuh proses rekrutmen yang bisa memakan satu sampai tiga bulan, jadi pilihan ini biasanya paling lambat
menghasilkan.</p>

<p><strong>Biaya per bulan.</strong> Freelancer paling ringan kalau pekerjaannya sedikit. In-house
paling berat karena gaji berjalan terus. Agensi ada di tengah, dengan catatan apa saja yang termasuk di
dalam paketnya. Rincian komposisi biaya agensi kami bahas terpisah di
<a href="https://studiosoft.id/biaya-digital-agency-surabaya/">halaman rincian biaya digital agency</a>.</p>

<p><strong>Kesinambungan.</strong> Agensi dan tim internal lebih tahan terhadap perubahan orang.
Freelancer paling rapuh, terutama kalau hanya satu orang yang memegang seluruh pekerjaan.</p>

<p><strong>Keahlian yang didapat.</strong> Freelancer biasanya kuat di satu bidang. Agensi memberi
gabungan beberapa bidang sekaligus. In-house bergantung pada siapa yang berhasil Anda rekrut dan siapa
yang membimbingnya.</p>

<h2>Empat pertanyaan untuk memutuskan</h2>
<ol>
<li><strong>Seberapa cepat hasilnya dibutuhkan?</strong> Kalau penjualan butuh dorongan dalam satu sampai
dua bulan, agensi atau freelancer lebih realistis daripada merekrut.</li>
<li><strong>Siapa yang akan mengawasi pekerjaannya?</strong> Semua pilihan butuh orang di pihak Anda
yang memeriksa laporan dan mengambil keputusan. Kalau tidak ada, pekerjaan siapa pun akan berjalan tanpa
arah.</li>
<li><strong>Apakah pekerjaannya sesekali atau setiap bulan?</strong> Pekerjaan sesekali seperti membuat
website atau audit teknis lebih hemat dikerjakan per proyek. Pekerjaan bulanan lebih cocok dengan model
retainer.</li>
<li><strong>Seberapa berharga data dan aset digital Anda?</strong> Kalau akun iklan dan riwayat data
adalah aset jangka panjang, pastikan semuanya berada di bawah kepemilikan bisnis Anda sejak hari pertama.</li>
</ol>

<h2>Kombinasi yang biasanya bekerja</h2>
<p>Di banyak bisnis kecil dan menengah, jawabannya bukan salah satu, melainkan pembagian peran. Agensi
memegang bagian yang butuh keahlian khusus dan berkelanjutan: pencarian Google, pengelolaan iklan, dan
perbaikan teknis situs. Satu orang di dalam tim menangani hal yang menuntut kecepatan dan kedekatan dengan
pelanggan: membalas pesan, mengumpulkan foto produk, dan menyiapkan bahan kampanye. Freelancer dipakai
untuk pekerjaan lepas dengan ruang lingkup jelas, misalnya video untuk satu peluncuran produk.</p>

<p>Pembagian ini membuat biaya tidak menumpuk di satu tempat, sekaligus memastikan ada orang di dalam
yang tahu apa yang sedang terjadi.</p>

<h2>Tanda sudah waktunya pindah dari freelancer ke agensi</h2>
<ul>
<li>Pekerjaan bertambah ke beberapa kanal sekaligus, dan satu orang mulai kewalahan.</li>
<li>Anda butuh laporan bulanan yang membandingkan periode, bukan sekadar tangkapan layar.</li>
<li>Ada masalah teknis situs yang tidak selesai berbulan-bulan karena di luar keahlian orang yang ada.</li>
<li>Pekerjaan berhenti setiap kali orang yang menanganinya sedang tidak ada.</li>
</ul>

<h2>Cara menguji pilihan sebelum berkomitmen panjang</h2>
<p>Sebelum meneken kontrak setahun, beri pekerjaan kecil dengan tenggat yang jelas: audit satu halaman,
satu kampanye iklan beranggaran kecil, atau dua tulisan. Dari situ Anda bisa menilai tiga hal yang jarang
muncul di presentasi.</p>
<ul>
<li>Seberapa cepat mereka merespons pertanyaan, terutama pertanyaan yang tidak nyaman.</li>
<li>Apakah laporannya menjelaskan alasan di balik keputusan, atau hanya menyebut angka.</li>
<li>Apakah mereka bertanya soal bisnis Anda sebelum mengeksekusi, atau langsung bekerja dengan asumsi
sendiri.</li>
</ul>
<p>Uji kecil ini memakan waktu dua sampai tiga pekan, dan biayanya jauh lebih ringan daripada salah
memilih selama setahun. Kalau pada pekerjaan kecil komunikasinya sudah sulit, biasanya tidak membaik
ketika pekerjaannya membesar.</p>

<h2>Kesalahan yang paling sering terjadi</h2>
<p>Merekrut satu orang in-house lalu membiarkannya bekerja tanpa arahan dan tanpa tolok ukur. Memakai
freelancer untuk pekerjaan yang menuntut koordinasi lintas kanal. Dan memilih agensi hanya karena
presentasinya paling menarik, tanpa memeriksa siapa yang benar-benar mengerjakan dan apa yang dilaporkan
tiap bulan.</p>

<p>Kalau Anda sedang membandingkan pilihan, cara paling aman adalah memulai dari satu pekerjaan yang
paling dekat dengan penjualan, mengukurnya tiga bulan, lalu memutuskan berdasarkan angka. Keputusan yang
didasari data biasanya lebih tahan lama daripada keputusan yang didasari kesan pertama pertemuan.</p>

""" + TOMBOL + """
<p><em>Catatan: kami tidak menyarankan semua bisnis memakai agensi. Kalau pekerjaannya masih bisa
ditangani satu orang dengan hasil yang terukur, jalur itu justru lebih hemat.</em></p>
"""


UA = {"User-Agent": "Mozilla/5.0"}


def rest(p, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:200]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


kata = len(re.sub(r"<[^>]+>", " ", ISI).split())
print(f"=== artikel #3: {JUDUL}")
print(f"   panjang: {kata} kata (baku 1.000-1.300)")
print(f"   tombol WA: {'ada' if 'wa.me' in ISI else 'TIDAK ADA'}")
print(f"   tautan internal: {len(re.findall('studiosoft.id/', ISI))}")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply)")
    sys.exit(0)

st, d = rest("/wp-json/wp/v2/posts", "POST", {"title": JUDUL, "slug": SLUG, "content": ISI,
                                              "status": "publish", "comment_status": "closed"})
if not isinstance(d, dict) or "id" not in d:
    print("   ❌ gagal terbit:", st, str(d)[:200])
    sys.exit(1)
pid = d["id"]
print(f"\n   ✅ terbit #{pid} → {d.get('link')}")
st2, d2 = rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"meta": {
    "_yoast_wpseo_title": META_JUDUL, "_yoast_wpseo_metadesc": META_DESC, "_yoast_wpseo_focuskw": FOKUS}})
m = (d2 or {}).get("meta") if isinstance(d2, dict) else {}
print(f"   meta tersimpan: {json.dumps({k: v for k, v in (m or {}).items() if 'yoast' in k}, ensure_ascii=False)[:220]}")
