#!/usr/bin/env python3
"""studiosoft_hc65_carousel_gen.py — StudioSoft Healthcare Carousel hc65.

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/
         (WP id 2931, HTTP 200 diverifikasi 13 Okt 2026) RE-AIR Threads
         (jejak Threads terakhir 30 Sep 2026 02:01Z / hc50 = PALING TUA di antara artikel HC
         hidup yang TIDAK punya jadwal Threads mendatang). Slide BARU ss_hc65_lokalseo_*.

Isi diambil dari artikel asli: 46% pencarian berintent lokal, 88% menghubungi/berkunjung
dalam 24 jam, 76% pencarian lokal dari ponsel, langkah Google My Business, kata kunci
long-tail, konten hyperlocal, citation (NAP) + backlink lokal, pantau via Analytics/Search
Console.

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). 5 slide: cover + 3 isi + CTA.
"""
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"
OUT_DIR = os.path.join(WS, "studiosoft_hc65_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([("DOMINASI", SKY), "PENCARIAN LOKAL"], after=44)
    s.lead("Klinik dan bengkel di Surabaya sering kalah bukan karena kualitas, tetapi karena "
           "tidak muncul saat calon pelanggan mencari lewat Google.", after=30)
    s.para("Local SEO menutup celah itu dengan lima langkah yang bisa dimulai pekan ini.",
           size=30)
    return s.render("ss_hc65_lokalseo_01_cover.png", OUT_DIR)


def s2():
    s = mk(2)
    s.title([("LANGKAH 1-2", SKY), "PROFIL & KATA KUNCI"], after=40)
    s.bullets([
        ("Rapikan Google Business Profile", "klaim profilnya, isi alamat, jam buka, kategori "
                                            "layanan, dan foto tempat. Balas setiap ulasan "
                                            "dengan sopan, termasuk yang bernada negatif."),
        ("Incar kata kunci long-tail", "frasa seperti klinik kulit terdekat atau ganti oli "
                                       "mobil terdekat jauh lebih ringan dilawan daripada "
                                       "kata umum yang terlalu kompetitif."),
        ("Sisipkan ke halaman layanan", "judul dan deskripsi halaman menyebut layanan plus "
                                        "wilayah, misalnya jasa perawatan kulit di Surabaya."),
    ], gap=18, name_size=34, desc_size=24)
    return s.render("ss_hc65_lokalseo_02_profil.png", OUT_DIR)


def s3():
    s = mk(3)
    s.title([("LANGKAH 3-4", SKY), "KONTEN & CITATION"], after=40)
    s.bullets([
        ("Konten hyperlocal", "artikel yang menyebut area, layanan, dan pertanyaan nyata "
                              "pelanggan di sekitar lokasi Anda, bukan tulisan umum."),
        ("Citation yang konsisten", "nama, alamat, dan telepon yang sama di semua direktori "
                                    "lokal membuat Google yakin bisnis Anda nyata."),
        ("Backlink dari komunitas", "kolaborasi dengan blogger atau forum lokal lebih bernilai "
                                    "daripada banyak tautan asal-asalan."),
    ], gap=16, name_size=33, desc_size=23)
    return s.render("ss_hc65_lokalseo_03_konten.png", OUT_DIR)


def s4():
    s = mk(4)
    s.title([("LANGKAH 5:", SKY), "UKUR & JAGA"], after=40)
    s.bullets([
        ("Pantau lewat Analytics", "Google Analytics dan Search Console menunjukkan kata kunci "
                                  "mana yang benar-benar mendatangkan pelanggan."),
        ("Wajib ramah ponsel", "76% pencarian lokal datang dari ponsel; halaman yang lambat "
                               "langsung ditinggalkan sebelum menghubungi."),
        ("Sesuaikan per musim", "promo atau kata kunci bisa digeser mengikuti kebutuhan, "
                                "misalnya servis menjelang musim hujan."),
    ], gap=18, name_size=34, desc_size=24)
    s.para("Empat puluh enam persen pencarian di Google punya niat lokal, dan 88% orang yang "
           "mencari bisnis lokal menghubungi dalam 24 jam.", size=26, after=0)
    return s.render("ss_hc65_lokalseo_04_ukur.png", OUT_DIR)


def s5():
    s = mk(5)
    s.title([("VISIBILITAS ITU", SKY), "ASET LOKAL"], after=40)
    s.lead("Yang membedakan klinik dan bengkel yang tumbuh biasanya bukan anggaran, tetapi "
           "konsistensi merawat kanal digitalnya.", after=28)
    s.para("StudioSoft menyusun strategi local SEO yang selaras dengan layanan dan wilayah "
           "Anda.", size=30)
    s.h2("www.studiosoft.id", size=40)
    return s.render("ss_hc65_lokalseo_05_cta.png", OUT_DIR)


if __name__ == "__main__":
    print("StudioSoft Healthcare Carousel hc65 \u2014 local SEO 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)
