#!/usr/bin/env python3
"""studiosoft_hc50_carousel_gen.py — StudioSoft Healthcare Carousel hc50 (RE-AIR Threads).

Topik : "Tips SEO Digital Marketing Surabaya: Optimasi Local untuk Klinik dan Bengkel Lokal"
Artikel: https://studiosoft.id/tips-seo-digital-marketing-surabaya-optimasi-local-untuk-klinik-dan-bengkel-lokal/
         (alive / HTTP 200, diverifikasi 29 Sep 2026, WP id 2931, publish 16 Des 2025)

Konteks run 29 Sep 2026 (02:00 WIB / 28 Sep 19:00 UTC):
- Stok artikel healthcare BARU masih HABIS (WP REST 29 Sep: 337 post, artikel terbaru 28 Sep
  `tools-ai-untuk-bisnis-pilih-sesuai-kebutuhan` = non-healthcare; tidak ada artikel HC baru
  sejak `jasa-digital-marketing-klinik` 13 Sep).
- AUDIT (hc50_audit.py, 29 Sep): 7 artikel HC seri ini masih DEAD/404.
- Threads: artikel ini jejak Threads-nya = 1x text 13 Sep 2026 07:01Z (hc31, dan itu TEXT, bukan
  carousel) -> BELUM PERNAH jadi carousel Threads; jejak paling tua di antara artikel HC yang
  masih hidup. Slide BARU `ss_hc50_seolokal_*`.
- Isi slide diambil dari artikel asli (WP REST id 2931): pentingnya local SEO (46% pencarian
  berintent lokal, 88% menghubungi/kunjungi dalam 24 jam), langkah Google My Business,
  kata kunci long-tail, konten hyperlocal, mobile-friendly 76%.

Standar desain Bos 16 Sep 2026: engine ss_carousel_lib.py -> rata kiri, satu blok di tengah
vertikal, TANPA separator, bullet dot, bg BIRU TUA #122B63, judul Poppins-Bold 85 / body 36 /
sub 30, auto-fit. Resolusi 1080x1350 (4:5).
"""
import os
import sys

from PIL import Image

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import ss_carousel_lib as L

WS = "/home/mantapman/.hermes/profiles/atun/workspace"   # JANGAN pakai expanduser("~")
OUT_DIR = os.path.join(WS, "studiosoft_hc50_carousel")
TAG = "#seolokal"
BG = (18, 43, 99)      # #122B63
SKY = L.SKY


def mk(num, total=5):
    return L.Slide(num, total, TAG, bg=BG)


def s1():
    s = mk(1)
    s.title([("SEO LOKAL", SKY), "UNTUK KLINIK", "& BENGKEL"], after=44)
    s.lead("Klinik dan bengkel di Surabaya tidak kalah kualitas. Yang sering kalah justru "
           "visibilitasnya saat calon pelanggan mencari lewat Google.", after=34)
    s.para("Local SEO menutup celah itu dengan langkah yang sederhana dan bisa dimulai pekan ini.",
           size=30)
    return s.render("ss_hc50_seolokal_01_cover.png", OUT_DIR)


def s2():
    s = mk(2)
    s.title([("KENAPA LOCAL SEO", SKY), "PENTING?"], after=44)
    s.bullets([
        ("46% pencarian berintent lokal", "hampir separuh pencarian di Google dimaksudkan "
                                          "untuk menemukan sesuatu di sekitar pengguna."),
        ("88% langsung menghubungi", "orang yang mencari bisnis lokal menghubungi atau "
                                     "berkunjung dalam 24 jam."),
        ("Kompetisi makin padat", "tanpa optimasi, klinik dan bengkel lokal kalah dari "
                                 "pemain besar di halaman hasil pencarian."),
    ], gap=26, name_size=38, desc_size=28)
    return s.render("ss_hc50_seolokal_02_penting.png", OUT_DIR)


def s3():
    s = mk(3)
    s.title([("LANGKAH 1:", SKY), "GOOGLE MY BUSINESS"], after=44)
    s.bullets([
        ("Klaim dan lengkapi profil", "alamat, jam buka, kategori layanan, dan foto tempat "
                                      "yang benar-benar menggambarkan layanan Anda."),
        ("Kelola ulasan pelanggan", "balas setiap ulasan dengan sopan; rating dan kepercayaan "
                                    "ke Google ikut terjaga."),
        ("Update post mingguan", "promo atau informasi layanan terbaru menjaga profil tetap "
                                 "aktif dan relevan."),
    ], gap=26, name_size=38, desc_size=28)
    return s.render("ss_hc50_seolokal_03_gmb.png", OUT_DIR)


def s4():
    s = mk(4)
    s.title([("LANGKAH 2 & 3:", SKY), "KATA KUNCI, KONTEN"], after=44)
    s.bullets([
        ("Kata kunci long-tail", "klinik kulit terdekat atau ganti oli mobil terdekat "
                                 "Surabaya, bukan kata umum yang terlalu kompetitif."),
        ("Konten hyperlocal", "artikel yang menyebut area, layanan, dan pertanyaan nyata "
                              "pelanggan di sekitar lokasi Anda."),
        ("Wajib mobile friendly", "76% pencarian lokal datang dari ponsel; halaman lambat "
                                  "langsung ditinggalkan."),
    ], gap=26, name_size=38, desc_size=28)
    return s.render("ss_hc50_seolokal_04_konten.png", OUT_DIR)


def s5():
    s = mk(5)
    s.title([("MULAI DARI", SKY), "YANG PALING", "MUDAH"], after=44)
    s.lead("Rapikan profil Google dan pilih kata kunci lokal dulu, lalu tumbuhkan ulasan "
           "dan konten setahap demi setahap.", after=34)
    s.para("Yang membedakan klinik dan bengkel yang tumbuh biasanya bukan anggaran, tapi "
           "konsistensi merawat kanal digitalnya.", size=30, after=18)
    s.h2("www.studiosoft.id", size=40)
    return s.render("ss_hc50_seolokal_05_cta.png", OUT_DIR)


if __name__ == "__main__":
    print("StudioSoft Healthcare Carousel hc50 \u2014 SEO lokal klinik & bengkel Surabaya")
    print("=" * 70)
    for fn in (s1, s2, s3, s4, s5):
        p = fn()
        print("OK %s %s %d bytes" % (p, Image.open(p).size, os.path.getsize(p)))
    print("OK 5 slide -> %s" % OUT_DIR)
