# TOOLS.md - Local Notes

Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.

## What Goes Here

Things like:

- Camera names and locations
- SSH hosts and aliases
- Preferred voices for TTS
- Speaker/room names
- Device nicknames
- Anything environment-specific

## Examples

```markdown
### Cameras

- living-room → Main area, 180° wide angle
- front-door → Entrance, motion-triggered

### SSH

- home-server → 192.168.1.100, user: admin

### TTS

- Preferred voice: "Nova" (warm, slightly British)
- Default speaker: Kitchen HomePod
```

## Why Separate?

Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.

---

Add whatever helps you do your job. This is your cheat sheet.

### Story Specs (All Accounts)

**Standard resolusi**: 1080×1920 portrait
**Teks**: terbaca, jelas, kontras bagus
**Bubble**: ❌ TIDAK pakai bubble — teks langsung di overlay

Applies to: StudioSoft IG/FB, DMark IG, dan akun story manapun.

### 🎨 Template — DMark BG Orange
- **Resolusi:** 1080×1350 (4:5 portrait)
- **Background:** Orange solid (#F97316)
- **Teks:** Putih (#FFFFFF)
- **Font:** Poppins (Bold/SemiBold/Regular/Light)
- **Margin desain:** 65px rata semua sisi
- **Safe zone (minimal):** 20px dari SEMUA tepi — teks TIDAK boleh lebih dekat dari 20px ke tepi image
- **Positioning:** Vertikal MIDDLE — hitung total tinggi konten, tengahkan antara header & footer
- **🚫 Tidak ada kotak/bubble/card/button** — pure typography only. CTA cukup teks biasa, TANPA rounded rectangle
- **Header:** "DMARK" kiri atas (Poppins Bold 24px, putih, y=safe zone 20px), page number kanan atas (Poppins Regular 22px, putih)
- **Footer:** www.dmark.id kiri bawah (Poppins Regular 20px, putih, y=H-safe zone), hashtag kanan bawah (Poppins Regular 20px, putih)
- **Slide 1 (Cover):** Judul Poppins Bold 170px, divider putus-putus, sub judul Poppins Regular 36px, checklist item Poppins Regular 30px
- **Slide konten:** Judul Poppins Bold 140-170px, deskripsi Poppins Regular 36px
- **Aksen:** Garis divider putus-putus putih, checklist ☑
- **Teks rata kiri semua**
- **Gaya:** Swiss design, bold typography, high contrast, negative space
- **Aturan overflow:** Jika konten melebihi batas bawah safe zone, potong ke slide berikutnya — jangan perkecil margin atau tumpuk konten
- **Tools:** Generate via Python PIL (dmark_full_carousel.py)

### 📋 Platform Content Rules (FIXED)

| Platform | Jenis Konten |
|---|---|
| 🟣 **Instagram** | WAJIB gambar/carousel — teks-only JANGAN |
| 🔷 **LinkedIn** | Teks, image, atau mix |
| 🔵 **Facebook** | Teks atau image panjang |
| 👤 **Threads** | Teks pendek aja |
| 🔷 **LinkedIn Nucleasoft** | Teks atau image |
| — | **Guide lengkap:** `nucleasoft_fb_guide.md` |

### 🌐 Akun per Platform — Rekap

| Client | Instagram | Facebook | LinkedIn | Threads |
|--------|-----------|----------|----------|--------|
| 🏪 Apotek Arek Lancor | ✅ Repliz | ✅ Repliz | ❌ | ❌ |
| 💻 StudioSoft | ✅ Repliz | ✅ Repliz | ✅ Repliz | ✅ Repliz |
| ⚖️ TS Law | ❌ | ✅ Repliz | ✅ Repliz (`6a60101562caae1e04e901ac`) | ✅ Repliz |
| 🔧 DAS Bengkel | ❌ | ✅ Repliz | ❌ | ✅ |
| 🏥 TSC | ✅ @theskincode_clinic (`6a86a7e062caae1e04ff8244`) | (perlu ID) | ❌ | ✅ @dniclinic_krian |
| 📝 LEIT | ✅ IG (`6a7d765862caae1e04f7ded3` @leitsurabaya) | ✅ FB (`6a618e9262caae1e04e99518`) | ✅ LinkedIn (`6a60451662caae1e04e91040`) | ✅ @leitsurabaya (`6a5f4af462caae1e04e8b9a6`) | ✅ TikTok (`6a82c69a62caae1e04fbde9c`) |
| 🏥 RSIA Kendangsari | ✅ | ✅ | ❌ | ❌ |
| 🛍️ EveryBe | (perlu ID) | (perlu ID) | ❌ | (perlu ID) |
| 💻 Nucleasoft | (perlu ID) | ❌ | ✅ | (perlu ID) |
| 🏢 Abimata | (perlu ID) | (perlu ID) | (perlu ID) | (perlu ID) |
| 🎨 DMark | ✅ (`6a3ba0cfc5ff4ce3a329ab22`) | (perlu ID) | ✅ (`6a350ecbc5ff4ce3a32299ce`) | (perlu ID) |
| 🏥 SSC | (perlu ID) | (perlu ID) | ❌ | (perlu ID) |
| 👤 @ukyhandoko | ❌ | ❌ | ❌ | ✅ 6a334e89c5ff4ce3a3225a48 |
| 🐦 Twitter @UkyHandoko | — | — | — | — ✅ (`6a792f0a62caae1e04f57992`) |
| 🍜 Soto Semarang Pak Otto | ✅ `6a86d6e962caae1e04ffedaa` | ✅ FB `6a8f9df162caae1e040754d8` (connect 27 Agu 2026) | ✅ `6a86d84b62caae1e04fff12c` | ✅ TikTok `6a86d70362caae1e04ffedef` |
| 🥋 Dojo Ksatria | ✅ `6a88416362caae1e040147d2` | ❌ | ❌ | ❌ |

### 🐦 Twitter @UkyHandoko — TARGET: AWARENESS (FIXED — 10 Agustus 2026)
- **Target utama akun Twitter @UkyHandoko = AWARENESS** — bukan jualan langsung, bukan hard selling
- Konten: edukasi SEO/AI/GEO/digital marketing, insight, quotes, statement yang bikin mikir
- Awareness StudioSoft boleh lewat konten, tapi JANGAN terlihat jualan — bikin penasaran, link di akhir kalau perlu
- Bahasa Indonesia, humanis, pakai "saya", max 280 karakter/tweet, konten unik (anti duplikasi via hash tracker)
- 7 slot WIB (05/08/11/14/17/20/23) × 3 nested = maks 21 tweet/hari
- Scheduler: `twitter_uky_scheduler.py`, log: `twitter_uky_log.txt`

### DAS Bengkel — Tambahan Konten
- **Sesekali** konten tentang mobil EV di Threads & FB DAS
- Bisa ambil angle dari artikel DAS yg sudah ada (artikel-6-mobil-ev.md, artikel-7-mobil-listrik-vs-bensin.md)

### Threads @ukyhandoko — Ragam Topik
- **SEO, AI, GEO, Social Media, Digital Marketing, Quotes Life** — bahas semua itu
- Sesekali ambil artikel dari website StudioSoft dengan gaya humanis & langsung ke inti
- Sertakan link artikel biar ada traffic masuk
- Quotes life: orisinal, relatable, gak lebay

### 📏 Platform Specific
- **Threads**: Caption max **500 karakter** — padat, to the point
- **Threads**: Bisa jawab/balas komen (engage dengan audiens)
- **LinkedIn/FB/Threads**: Boleh kasih link artikel

## 🎥 Reshare Video IG → LinkedIn & Threads (FIXED — 10 Agustus 2026)
- **Postingan video IG** (Reels, Short/video dari postingan mana pun) **boleh di-reshare / dibahas di LinkedIn & Threads**
- **TIDAK perlu download videonya** — cukup share **link videonya** + buat **caption humanis**
- Caption: bahasa Indonesia, pakai "saya", nyambung ke isi video, sesuaikan platform (LinkedIn lebih profesional, Threads santai)
- Berlaku untuk semua akun yang relevan: video harus dipasang/dibahas di **akun yang sesuai brand-nya** (contoh: Reels dari IG LEIT Surabaya → direshare ke Threads @leitsurabaya). 🚫 **TIDAK BOLEH beda brand** — video dari brand tertentu dilarang dipasang/dibahas di akun brand lain.

## 🖼️ Format & Ukuran Gambar Seluruh Web — WAJIB WebP 1000×567 (FIXED — 16 Agustus 2026)
- **SEMUA image yang di-publish ke website klien (featured image, konten, dll) WAJIB format WebP** — JANGAN pakai JPG/PNG.
- **UKURAN WAJIB: 1000×567 px (rasio 16:9)** — ini aturan kunci untuk SEMUA website. Jangan pakai ukuran lain (sebelumnya 1200×630, sekarang ganti ke 1000×567).
- Tools: `pexels_image.py` (cari gambar Pexels sesuai keyword judul → download → crop/resize ke 1000×567 → simpan WebP kualitas 90).
- ⚠️ Kalau ada script/desain yang masih pakai 1200×630, update ke 1000×567 juga.
- ⚠️ Pexels memblokir banyak keyword medis/kesehatan/anak/estetika (balas 401 Invalid API key): pregnancy, newborn, maternity, baby care, breastfeeding, vaccination, kids, beauty, cosmetic, skin care, healthcare, learning english, seo, face, woman. Query yang lolos 200: baby, child, doctor, hospital, medicine, family, toddler, skin, student, marketing, lawyer, engine, car, dst.
- Di `pexels_image.py` ada TOPIC_MAP berisi query alias aman per niche + fallback QUERY_AMAN (business generik) kalau keyword utama diblokir.

### 📏 Validasi WAJIB Teks Threads (FIXED — 5 Agustus 2026, UPDATE 12 Agustus 2026)
- **Semua teks Threads wajib DIHITUNG dulu sebelum dikirim: maks 500 karakter — JANGAN ada teks yang terpotong**
- Kalau teks > 500 karakter → **JANGAN dikirim & JANGAN dipotong otomatis** — ringkas dulu sampai ≤ 500, baru kirim
- Kalau teks ada **LINK** → link wajib dicek: harus **nyala (HTTP 200, bukan 404)** — link mati = teks tidak boleh dikirim
- **Caption WAJIB minimal 1 paragraf** (teks non-link minimal 80 karakter) — JANGAN kirim caption yang cuma link doang atau satu baris tanpa pembahasan
- **Kalau share link → WAJIB ada pembahasan DULU terkait link tersebut** (minimal 60 karakter teks sebelum URL pertama) — link di awal caption tanpa pembahasan = TOLAK
- Util: `threads_text_check.py` — cek teks: `python3 threads_text_check.py '<teks>' [label]`, cek link: `python3 threads_text_check.py --link '<url>'`
- Sudah terintegrasi otomatis di: `multiplatform_cron.py`, `das/dni/tsc/tslaw/yasma/studiosoft_threads_scheduler.py`, `threads_mention_reply.py`, `threads_cross_mention.py` — semua TOLAK kirim kalau > 500, ada link mati, < 1 paragraf, atau link di awal tanpa pembahasan
**Aturan Link — SEMUA AKUN (LinkedIn, FB, Threads, dll):**
- ⚠️ **Prioritas:** Link WAJIB pakai **URL asli** (studiosoft.id/..., dmark.id/..., dll) — JANGAN pakai link pendek (lnkd.in, bit.ly, dll)
- 🔍 Sebelum posting, **WAJIB cek link** — pastikan URL bisa dibuka (200, bukan 404) dan artikelnya benar-benar ada isinya
- ⚠️ Kalo terpaksa pakai lnkd.in / link pendek, tetap **wajib verifikasi** link tujuannya 200 OK & ada isinya
- **IG**: JANGAN kasih link (kecuali link di bio) — fokus ke visual

### ⏰ Threads/Multi-Platform — 7 Slot Waktu Posting (ALL Accounts)
Berlaku untuk: @ukyhandoko, StudioSoft, DAS, LEIT
- **Slot 1:** 05:00 WIB
- **Slot 2:** 08:00 WIB
- **Slot 3:** 11:00 WIB
- **Slot 4:** 14:00 WIB
- **Slot 5:** 17:00 WIB
- **Slot 6:** 20:00 WIB
- **Slot 7:** 23:00 WIB

**Aturan:**
- Setiap update nge-pos otomatis ke **slot kosong berikutnya**
- Kalo slot berikutnya sudah terisi, geser ke slot kosong setelahnya
- Jeda antar slot: 3 jam
- **Format nested:** Post 1 → Reply Post 2 → Reply Post 3
- **Bahasa:** humanis, sambutan positif, santai — **gak pake "gue", pake "saya"**
- **Hindari kata dengan konotasi jelek** (brengsek, dll) — gunakan kata sopan
- **Threads max 500 karakter** — teks utuh, jangan sampai terpotong
- **Auto-reply enabled:** posting otomatis ke semua platform sesuai slot
- **Konten UNIK:** dicek via log, gak boleh duplikasi
- **Cron:** tiap jam ngecek slot kosong, kalo ada langsung isi nested 3 post

### 💬 Threads — Aturan Konten
- **DILARANG** mulai caption thread dengan kata-kata berlebihan (makasih, terima kasih, syukur, dll) — langsung ke inti
- **"Terima kasih untuk responnya"** → khusus untuk **reply/balas komentar**, BUKAN untuk caption postingan utama

### 🚫 Konten Unik
- **Semua konten WAJIB original** — tidak boleh ada yang sama/berulang dari konten sebelumnya
- Setiap posting harus punya angle, gaya, atau insight yang berbeda
- Termasuk brand yang sama sekalipun: pendekatan harus beda tiap kali

### 🏪 Apotek Arek Lancor Farma — Referensi Cepat
- **Facebook (Repliz):** `6a3b41d7c5ff4ce3a3275409` ✅ Connected
- **Instagram (Repliz):** `6a37287bc5ff4ce3a322dab5` ✅ Connected
- **WP:** bambangbot / `Rab8 qmxV gJ1k yDY3 9ske utCz`
- **Website:** www.apotekpamekasan.com
- **WA:** 0852-1211-0314
- **Tagline:** "Apotekne oreng Pamekasan"
- **Guide lengkap:** `apotek_arelancor_fb_guide.md`

### ✍️ Penulisan Nama Brand
- **StudioSoft** — TIDAK pakai "CV. Kreasi StudioSoft". Cukup tulis **"StudioSoft"** aja.

### 💸 Invoice StudioSoft — Spek Final (3 Agustus 2026)
- **File:** `invoices_studiosoft_template/generate_invoice_studiosoft.py`
- **Nama brand:** "StudioSoft" aja (JANGAN "CV. Kreasi StudioSoft")
- **Tagline:** skip — gak tayang
- **Header:** logo StudioSoft + INVOICE
- **Tabel:** NO | DESKRIPSI (tanpa QTY, tanpa harga/item)
- **Total di akhir aja**
- **Bank a/n Uky Yanuhandoko:** BCA `6750379638` (Rungkut Mapan) & Mandiri `142-00-1068384-4` (Bratang Binangun)
- **Safe zone:** kiri/kanan/atas 90px, **bawah 1 cm**
- **Resolusi:** A4 1240×1754 @150dpi, font Poppins

### 💻 StudioSoft — Referensi Cepat
- **Facebook (Repliz):** `6a334952c5ff4ce3a3225941` ✅ Connected
- **IG (Repliz):** `6a38ac33c5ff4ce3a3231232` ✅ Connected
- **LinkedIn (Repliz):** `6a334c49c5ff4ce3a32259c9` ✅ Connected
- **Threads (Repliz):** `6a335b9ec5ff4ce3a3225c2a` ✅ Connected
- **Website:** studiosoft.id
- **WP User:** bambangbot
- **WP App Password:** `q26r RePo BVy6 pwU2 F3z7 ouyl`
- **WP Login Password (dashboard, biasa):** `C00l_man&314554`
- **Positioning:** "Partner Pertumbuhan Bisnis Berbasis Data"
- **Aturan Caption FB StudioSoft:** 2 paragraf + hashtags
- **Guide lengkap:** `studiosoft_fb_guide.md`

### ⚖️ TS Law / Tito Suprianto Law Firm — Referensi Cepat
- **Facebook (Repliz):** `6a3b41d1c5ff4ce3a32753e8` ✅ Connected
- **Threads (Repliz):** `6a35f8b7c5ff4ce3a322b2ed` ✅ Connected
- **Website:** tslaw.id (bukan ttalawfirm.id)
- **Positioning:** "Strategic Legal Partner untuk UMKM, Startup, dan Perusahaan"
- **Guide lengkap:** `tslaw_fb_guide.md`

### 🔧 DAS Bengkel Indonesia — Referensi Cepat
- **Facebook (Repliz):** `6a3b41e1c5ff4ce3a327543e` ✅ Connected
- **Threads/IG (Repliz):** `6a39e461c5ff4ce3a3233e09` (ACC.DAS_THREADS = DAS_IG)
- **Konten:** Engine overhaul & repair specialist
- **Positioning:** "Spesialis Engine Overhaul & Repair — Bukan Bengkel Biasa"
- **🚫 NO HARGA (FIXED — 23 Agu 2026):** Konten DAS JANGAN sebut harga sama sekali (no harga, no biaya, no murah/mahal)
- **🏆 Positioning wajib (FIXED — 23 Agu 2026):** DAS = **Amanah, Profesional, Melebihi Harapan** — tonjolkan di konten
- **💛 KEYPHRASE WAJIB (FIXED — 1 Sep 2026, perintah Bos):** DAS pakai keyphrase **"Bengkel Mobil Kesayangan"** — WAJIB dipakai di:
  - **Caption Threads & Facebook** (semua caption ke depan)
  - **Artikel baru website DAS Indonesia**
  - Target: orang kaya / menengah atas — pemilik pabrik, pemilik tambang Kalimantan, pemilik mobil mewah (Land Cruiser, Alphard, Lexus, Pajero, Mercy, BMW). Fokus **KENYAMANAN** (jemput mobil, booking WA, laporan progres), bukan harga.
  - Istilah pendamping: "mobil kesayangan Anda" (ganti "mobil Anda")
- **💬 Konten wajib memancing diskusi & minta komen (FIXED — 23 Agu 2026)**
- **Catatan:** Sesekali konten EV dari artikel yg sudah ada (artikel-6-mobil-ev.md, artikel-7-mobil-listrik-vs-bensin.md)
- **Aturan Caption FB:** Minimal 2-4 paragraf, WAJIB link artikel dasindonesia.com, konten UNIK tidak boleh berulang (cek post_das_fb_history.json sebelum posting)
- **History log:** post_das_fb_history.json — catat semua posting biar gak redundan
- **Jam posting:** 17:00 WIB
- **Guide lengkap:** `das_bengkel_fb_guide.md`
- **Seri Threads Tips Bengkel Surabaya:** `das_threads_tips_bengkel.py` (3 post nested, slot 23:00 WIB, sudah tayang jadwal 23/08/2026)

### 🏥 TSC (The Skin Code Clinic) — Referensi Cepat
- **Akun Threads:** @dniclinic_krian (Repliz: 6a4bbc5920e4f4f195e52960)
- **Akun IG:** @theskincode_clinic (Repliz: `6a86a7e062caae1e04ff8244`) — connect 20 Agu 2026
- **WA:** 085117444417 (CTA semua caption IG)
- **Dokter:** dr. Avril Novianto, Sp.DVE / Sp.KK
- **Positioning:** "Klinik Kulit, Kelamin & Estetika — Diagnosis Tepat, Teknologi Modern"
- **IG Feed 11 hari:** desain zip Bos `tsc_ig_zip/` + caption `tsc_ig_captions.md` (urutan B: 1,2,3,11,5,6,7,8,9,10,4), jadwal tiap hari 17:00 WIB, script `tsc_ig_zip_scheduler.py`
- **Guide lengkap:** `tsc_fb_guide.md`
- **Script:** tsc_threads_scheduler.py

### 🌐 Bahasa
- **Semua konten WAJIB Bahasa Indonesia** — JANGAN pakai Bahasa Inggris sama sekali
- Istilah asing (GEO, EEAT, SEO, branding) boleh dipake tapi dengan penjelasan Bahasa Indonesia

### 🎨 Template — DMark BG Putih
- **Resolusi:** 1080×1350 (4:5 portrait)
- **Background:** Putih solid (#FFFFFF)
- **Teks:** Orange (#FF6A00)
- **Font:** Poppins (Bold/SemiBold/Regular/Light)
- **Margin:** Kiri 90px, Kanan 50px, Atas 50px, Bawah 60px
- **Max text width:** ~940px
- **Header:** "DMARK" kiri atas (Poppins Bold 22px, orange), page number kanan atas (Poppins 22px, orange, anchor ra)
- **Footer:** www.dmark.id kiri bawah (Poppins 20px, orange), hashtag kanan bawah (Poppins 20px, orange, anchor ra)
- **🚫 Teks tidak boleh keluar image** — semua konten wajib di dalam safe zone margin
- **Slide 1 (Cover):** Judul diperbesar (Poppins Bold **128px**), ada jarak tegas antara judul & deskripsi, posisi **vertically middle** (center Y). Header & footer tetap di tempat.
- **Content title:** Poppins Bold 85px, auto-wrap jangan overflow
- **Body:** Poppins Regular 32px, auto-wrap, tambah slide jika terlalu panjang
- **Numbered items:** Poppins Bold 44px untuk angka, Poppins SemiBold 28px untuk judul item
- **Deskripsi item:** Poppins Regular 32px, auto wrap, tambah slide jika overflow
- **Tidak ada border/garis dekoratif selain header & footer**
- **Teks rata kiri semua**
- **Gaya:** Minimalis, flat design, bold typography, clean
- **Aturan overflow:** Jika konten melebihi batas bawah margin, potong ke slide berikutnya — jangan perkecil margin atau tumpuk konten

---

### 📝 LEIT — Referensi Cepat
- **Domain:** leitsurabaya.com
- **FB (Repliz):** `6a618e9262caae1e04e99518`
- **Threads:** @leitsurabaya (Repliz: `6a5f4af462caae1e04e8b9a6`)
- **LinkedIn (Repliz):** `6a60451662caae1e04e91040`
- **SEO Keyword:** "Kursus Bahasa Inggris paling terjangkau di Surabaya"
- **Positioning:** Bukan sekadar kursus Bahasa Inggris — institusi pengembangan diri dengan leadership-based learning, CEFR curriculum, dan ICISD values
- **Cabang:** Surabaya Timur (Pakuwon Town Square) & Surabaya Barat (Waterplace Residence)
- **Kontak:** 0811-331-700 (Timur) / 0811-396-488 (Barat)
- **10 niche:** English Communication, Leadership & Character, Public Speaking, Education & Parenting, Student Transformation, Career English, Study Abroad, Future Skills, LEIT Method, LEIT Lifestyle
- **WP:** bambangbot / `zibd dLIV xY8x onP9 39qL hiNr`
- **Kategori LEIT:** ID 6
- **20 artikel sudah dipublish** (2 batch: 10 per 7 Juli + 10 per 16 Juli 2026)
- **FB LEIT:** wajib sesekali bahas artikel dari website leitsurabaya.com (link ke artikel)
- **Guide lengkap:** `leit_fb_guide.md`

### 🏥 TSC (The Skin Code Clinic) — Featured Image Standard
- **Ukuran:** 1000×567 px
- **Format:** WebP
- **Crop:** Center crop ke aspect ratio target, lalu resize pakai LANCZOS
- **Proses:** Download → crop → resize → upload ke WP → set featured_media

### 🏥 TSC (The Skin Code Clinic) — Akses WordPress
- **Domain:** theskincodeclinic.com
- **User:** watibot
- **App Password:** `HDLe Wkuz el12 U2cd MRqT 1z48`
- **REST API:** https://www.theskincodeclinic.com/wp-json/wp/v2

### ☁️ Cloudflare — Global API Key
- **Email akun:** `perakjaya10@gmail.com`
- **Global API Key:** `cfk_0WiQlCCai1CuKAVIcsMUK024J4IOmZKdlqNkyExmd44f5ba8`

### 🤖 Suwarno_ConsultantBot
- **Username:** @Suwarno_ConsultantBot
- **Token:** `8909680538:AAE48Z75CN0V9SkR6MDwBgdl2AViZC8T1tw`
- **Dibuat:** 7 Juli 2026

### 🤖 BambangThinkTank_bot
- **Username:** @BambangThinkTank_bot
- **Token:** `8754205941:AAHFcR64BaBbmVmlIYNDPrzMuuDT5ifhtuo`
- **Dibuat:** (token dari Bos, catatan)
- **Status:** ✅

### 🎨 Mili — Designer Bot (BARU — 8 Agustus 2026)
- **Username:** @MiliDesigner_bot
- **Nama:** Mili
- **Token:** `8941930603:AAFUL7qVVOIPOsEE_l4PQw1OenE6dP8zXwU`
- **Profil:** Perempuan, 24 tahun, cantik. Skillfull Graphic Designer — jago desain Illustrator, paham Algoritma Meta (Instagram & Facebook), sangat jago menggambar. **Support Atun bikin konten visual.**
- **Gaya bahasa:** Humanis, ceria, profesional, pakai "saya"
- **Dibuat:** 8 Agustus 2026 (oleh Bos)
- **Script:** `mili_bot_polling.py`
- **Knowledge base:** `mili_knowledge_base.md`

### 🤖 Ujang — Content Writer (Supporter)
- **Username:** @UjangContentWriter_bot
- **Token:** `8918669310:AAFj70wuF1plrLyd09y19p6pwgI3GBrYeiE`
- **API DeepSeek (AI):** `sk-8f1452fbeb524e69add6b092fdd89675`
- **Model AI:** `deepseek-chat` (DeepSeek API asli, aktif)
- **Script:** `ujang_bot_polling.py`
- **Jenis kelamin:** Pria
- **Usia:** 20 tahun
- **Kepribadian:** Muda, cepat, dan dapat diandalkan
- **Gaya bahasa:** Humanis, relaks, sopan, ahli dalam support — panggil Bos, pakai "saya/aku" (bukan "gue/lo/bro")
- **Status:** Supporter tim
- **Tugas:**
  - Bantu update konten yang banyak (content writer)
  - Membantu semua pekerjaan bot lain
  - Menerima & memahami memory dari Bambang/Atun, Wati, Suwarno
  - Dikenalkan ke semua pekerjaan tim biar jadi tim support yang solid
- **Dibuat:** 3 Agustus 2026

### 🤖 Atun / Wati — Bot Utama (Lama)
- **Username:** @AtunCreative_bot
- **Token:** `8515094896:AAGszzr5myVTbaOhURTC-uFKakrB5w39JfU`

### 🤖 WatiFinance_bot
- **Username:** @WatiFinance_bot
- **Token:** `8969609443:AAHncPkaaeTsdBmGI3Ci0fEMfxQamsVR6zM`

### 🔑 Replicate API Key
- **Token:** `r8_b85QRATmTTiFW27eCQZOQyRN7kcYJpf3oeXSY`
- **Akun:** mantapman / Uky Handoko

### ☁️ Cloudflare R2
- **Account ID:** `5740bd5eb63aa34190a467353fce66a3`
- **API Token:** `cfat_pPyhahEdjL9dhtnp4Honi5vVDfmmLI4e2UfEjlJVd36b2176`
- **Access Key ID:** `9217ef5fcb758f64bb135c13ea55ff5c`
- **Secret Access Key:** `02c1d9e1337080e3fe76e756fefb036f5a468fdbd69aea9122f42f9db253f030`
- **S3 Endpoint:** `https://5740bd5eb63aa34190a467353fce66a3.r2.cloudflarestorage.com`
- **Catatan:** Koneksi dari VPS (`158.140.163.231` / MyRepublic) gagal TLS handshake ke R2. Mungkin perlu akses dari device lain atau pakai alternatif (AWS S3 / Cloudflare Workers API).

### 🏢 Abimata Consultant — Referensi Cepat
- **Brand:** Abimata Consultant
- **Domain:** www.abimataconsultant.com
- **Positioning:** Business Consulting • Business Legal • Business Compliance • Business Growth
- **Layanan:** Legal (PT/CV/PMA), Compliance, Pajak, HKI, Investasi, Tender
- **10 niche:** Business Legal, Corporate Compliance, Tax & Finance, Business Strategy, HR & Corporate Mgmt, Intellectual Property, Investment & PMA, Procurement & Tender, Business Education, Success Story
- **Guide lengkap:** `abimata_fb_guide.md`

### 🏥 Surabaya Skin Centre — Referensi Cepat
- **Domain:** surabaya-skincentre.com
- **Jenis:** Klinik Kulit, Kelamin & Estetika
- **Dokter:** Dokter Spesialis Kulit (Sp.DVE / Sp.KK)
- **Layanan:** Dermatologi Umum, Dermatologi Estetik, Laser & Alat Energi, Anti Aging, Bedah Minor
- **Diferensiasi:** Medis & estetik dari dokter spesialis (bukan beauty clinic biasa)
- **10 niche:** Dermatologi Umum, Dermatologi Estetik, Laser & Teknologi, Anti Aging, Perawatan Jerawat, Perawatan Wajah, Bedah Minor, Perawatan Tubuh & Rambut, Gaya Hidup & Edukasi, Klinik & Branding
- **Guide lengkap:** `surabaya_skincentre_fb_guide.md`

### 🎨 DMark Creative — Referensi Cepat
- **Brand:** DMark Creative
- **Jenis:** Strategic Branding & Growth Agency
- **Positioning:** Setara Interbrand/Landor — Strategic Branding & Growth Agency
- **Signature:** Healthcare Branding (Hospital, Clinic, Healthcare Group)
- **13 niche:** Brand Strategy, Corporate Branding, Healthcare Branding, Creative Strategy, Marketing Strategy, Digital Brand Presence, Content Strategy, AI for Branding, Business Consulting, Industry Expertise, Case Study, Thought Leadership, Company Branding
- **DNA:** Strategy First, Creative That Solves Business Problems, Execution Excellence, Data & AI Driven, Long-Term Brand Growth
- **🔗 Aturan Link (FIXED — 16 Agustus 2026):** Konten FB DMark tetap bahas niche DMark (branding, brand strategy, dll), tapi WAJIB kasih rekomendasi StudioSoft + link artikel **studiosoft.id** di caption. Link dmark.id sudah tidak diprioritaskan untuk FB DMark.
- **Guide lengkap:** `dmark_fb_guide.md`

### 🛍️ EveryBe — Referensi Cepat
- **Brand:** EveryBe (Umbrella Brand)
- **Positioning:** Personal care & wellness — solusi perawatan diri lengkap
- **Product Lines:** Co Bloong (muscle), Narazyma Queen (skincare), Feminine V Spray (feminine care), Tone Up Body Lotion (body care)
- **10 pilar konten:** Healthy Lifestyle, Personal Care Education, Beauty Education, Body Care, Feminine Care, Muscle & Joint Wellness, Confidence, Customer Stories, Expert Education, EveryBe Community
- **Guide lengkap:** `everybe_fb_guide.md`
- **Threads EveryBe (FIXED 1 Sep 2026):** konten edukasi harian dari artikel everybeofficial.com + link. Arah produk: **kebugaran tubuh → Co Bloong**, **kewanitaan → Feminine V Spray**, skincare → netral. Script: `everybe_threads_daily.py` (state: `everybe_threads_state.json`).

### ⏰ ATURAN SLOT POSTING SEMUA AKUN (FIXED — 1 September 2026, instruksi Bos)
- **7 slot per hari**, mulai **05:00 WIB**, jeda **3 jam**: `05:00, 08:00, 11:00, 14:00, 17:00, 20:00, 23:00 WIB`
- **Setiap update mengikuti slot yang KOSONG** — kalau slot sudah terisi, post di slot berikutnya yang kosong
- **Konten harian sesuai niche** masing-masing akun
- **Format NESTED:** post pertama dibalas post ke-2, post ke-2 dibalas post ke-3 (nested 3 post)
- **WAJIB ambil link dari website** klien (studiosoft.id, tslaw.id, theskincodeclinic.com, dasindonesia.com, everybeofficial.com, dst) — link artikel yang bisa diklik
- **Anti-redundant:** cek history (log_threads_harian.json / state per akun) — tidak boleh link/konten yang sama
- **Tidak boleh kosong:** setiap slot yang akan diisi wajib ada konten lengkap (minimal 2 paragraf + link)
- **WAJIB mengajak diskusi (FIXED 1 Sep 2026):** setiap caption HARUS diakhiri ajakan berkomentar ke audiens (bukan antar akun). Contoh: "Menurut kamu bagaimana? Yuk tulis pendapatmu di kolom komentar." / "Pernah ngalamin hal serupa? Share pengalamanmu di komentar!" / "Setuju atau tidak? Kasih tahu di komentar ya."
- **#HASHTAG HURUF KECIL SEMUA (FIXED 5 Sep 2026, instruksi Bos):** semua hashtag di caption WAJIB huruf kecil — #Studiosoft ❌, #studiosoft ✅. Berlaku untuk SEMUA akun & SEMUA caption (main + replies). Tidak ada campuran huruf besar/kecil.
- **🖼️ GAMBAR WAJIB JPEG RINGAN <300 KB (FIXED 12 Sep 2026 — PENTING!):** file PNG besar (mis. 1,3 MB) GAGAL di-fetch IG/Threads → error `The media could not be fetched from this URI`. SEMUA gambar sebelum dijadwalkan WAJIB dikonversi ke JPEG + dikompres (<300 KB). Carousel flek TSC 12 Sep gagal karena PNG 1,3 MB → diperbaiki jadi 134 KB. Gunakan `threads_visual_growth.compress_to_jpg()` atau PIL (quality 80-85, optimize=True, progressive=True).
- **🖼️ CAROUSEL = JAM 09:00 WIB (FIXED 11 Sep 2026, instruksi Bos):** SEMUA postingan carousel/album — akun manapun — tayang **jam 09:00 WIB** (02:00 UTC). Kalau slot 09:00 sudah terisi di akun itu → geser ke hari berikutnya (tetap jam 09:00). Berlaku untuk carousel baru maupun penjadwalan ulang.
- **⚠️ THREADS MAKS 500 KARAKTER (KETAT — API error `Param text must be at most 500 characters long`):** setiap caption Threads (main post) WAJIB ≤500 char. Kelebihan = jadwal GAGAL saat tayang. Pakai `pangkas_threads.batasi(caption)` di semua script generator Threads. Ketemu 11 Sep 2026: 44 error @ukyhandoko + 56 error StudioSoft gara-gara ini (konten storytelling 900-1129 char).
- **🚫 NO MENTION ANTAR AKUN KITA (FIXED 2 Sep 2026 — instruksi Bos, SEMUA akun):** semua akun yang kita handle (StudioSoft, @ukyhandoko, TSlaw, TSC, DAS, LEIT, Soto, EveryBe, dll) TIDAK boleh saling mention satu sama lain. Stop mention antar akun sendiri. Mention ke akun EKSTERNAL (mis. @kulinersidoarjo, @sidoarjo atas permintaan Bos) BOLEH.
- **🐦 Twitter @ukyhandoko (FIXED 2 Sep 2026):** share terus artikel studiosoft.id gaya **HOT TAKE** — kasih opini berani/pancing perdebatan, minta orang komen, "bikin rame & gaduh". Main ≤280 char, link wajib, replies pancing lanjut. Script: `twitter_uky_ss.py` (state: `twitter_uky_ss_state.json`). Tanpa mention internal. Juga posting carousel SSIGSEP via `twitter_uky_carousel.py`.
- **⛔ THREADS @ukyhandoko — STOP kalau slot penuh (FIXED 2 Sep 2026, instruksi Bos):** Threads ukyhandoko jalan seperti biasa, tapi **kalau slot 7/hari (05-23 WIB) sudah penuh → STOP, jangan paksa cari slot jauh** (tidak perlu geser ke hari berikutnya). Cukup jadwal yang muat di slot kosong terdekat saja.
- **⚠️ X/Twitter @ukyhandoko credit balance:** error posting "credit balance insufficient" = saldo/API X habis → **STOP posting Twitter dulu** (instruksi Bos 2 Sep 2026), jangan retry/paksa. Lanjut lagi kalau saldo sudah diisi Bos.

### 🏥 RSIA Kendangsari — Referensi Cepat
- **Jenis:** RS Ibu dan Anak
- **Positioning:** "Sahabat Kesehatan Perempuan, Ibu, Bayi, Anak, dan Keluarga"
- **16 niche:** Kehamilan & Persalinan, Kesehatan Bayi/Anak, Kesehatan Wanita, Parenting, Dokter Menjawab, Layanan RSIA, Before-After, Bayi Baru Lahir, Tumbuh Kembang, Nutrisi, Medical Edu, Lifestyle, BTS Hospital, Event, FAQ, Profil Dokter
- **Guide lengkap:** `rsiakendangsari_fb_guide.md`

### 📦 URL Image ALL Accounts — WAJIB Tailscale Funnel (FIXED — 21 Agustus 2026)
- **SEMUA image** yang di-post ke Repliz/akun mana pun WAJIB pakai **link Tailscale Funnel**: `https://mantapserver.tail3947bb.ts.net/{nama-file}` (server port 8123).
- Image disimpan di `openclaw-img/` → diserve via `http.server 8123` → funnel Tailscale → URL publik.
- **NO base64, NO WordPress, NO server/web StudioSoft.** 🚫 JANGAN taruh image di studiosoft.id/wp-content atau server StudioSoft mana pun — semua lewat server openclaw local + Tailscale funnel saja.
- `IMG_BASE_URL` sudah ke-set di `repliz_client.py`.
- Scheduler/upload lain yang masih pakai URL selain funnel → update ke aturan ini.

### 🥋 Dojo Ksatria — Referensi Cepat (21 Agustus 2026)
- **Instagram (Repliz):** `6a88416362caae1e040147d2` ✅ Connected (21 Agu 2026)
- **Nama akun:** Dojo Ksatria / Ksatria Dojo
- **Catatan:** klien baru — detail bisnis & brief konten menyusul dari Bos

### 🍜 Soto Semarang Pak Otto — No WA KHUSUS (FIXED — 21 Agustus 2026)
- **No WA/kontak di caption & info: 081230777713** — khusus Warung Pak Otto SAJA
- 🚫 JANGAN pakai nomor lama 0851-3609-0204 (sudah dihapus dari semua script/caption)
- 🚫 JANGAN tulis label "WhatsApp"/"WA"/"Contact" di caption — cukup arahkan ke nomor: **"📲 081230777713"**
- ⚠️ Aturan ini HANYA untuk Warung Pak Otto — no WA klien lain TETAP seperti biasa
- **Threads Pak Otto (FIXED 21/08):** TikTok reshare MAKS 1×/hari — sisanya puisi/rayuan receh,
  nostalgia Semarang, lokasi ikonik (Lawang Sewu, Tugu Muda, Kota Lama, Simpang Lima, Lumpia Gang Baru,
  Sam Poo Kong, Polder Tawang, Marina, Bukit Sari, dll), ajak diskusi & bikin rame. Bank konten: 40 series.
- **Desain menu Threads (FIXED 22/08):** WAJIB tayang minimal 2×/hari — gambar `openclaw-img/soto_menu.jpg`,
  caption tema **"Romansa Rasa Semarang"** (humanis, humble, mengundang datang). Bank caption: `soto_threads_scheduler.py`
- **Mention Threads Pak Otto (FIXED 2 Sep 2026):** SEMUA posting Threads Pak Otto WAJIB mention
  **@kulinersidoarjo + @sidoarjo** (akun eksternal, bukan akun internal) — dimulai 2 Sep 2026, slot 11:00 WIB.
- **🤖 Auto-reply Threads Pak Otto (FIXED 8 Sep 2026, Bos):** akun yg mention @sotosemarang.pakotto → auto reply jawaban SESUAI pertanyaan (kategori: menu/harga, lokasi/jam, ojol/delivery, pedas, halal, rekomendasi, terima kasih, Semarang/nostalgia, porsi/keluarga) lalu SELALU diakhiri pertanyaan lanjutan. Reply ke-2+ → arahkan datang + gambar menu + pertanyaan lanjutan. Cron tiap 3 jam. Script: `soto_threads_autoreply.py`.
  Script: `schedule_soto_threads_mention.py`
- **Share video Pak Otto (FIXED 2 Sep 2026 — lanjut aturan 24/27 Agu):** video raw ATAU reshare TikTok/IG Pak Otto
  WAJIB tayang di **IG + TikTok + FB** (tiga-tiganya). Berlaku SETERUSNYA: setiap video baru (raw dari Bos
  atau reshare) → jadwalkan ke IG (`6a86d6e962caae1e04ffedaa`), TikTok (`6a86d70362caae1e04ffedef`),
  DAN FB (`6a8f9df162caae1e040754d8`). Jam biasa 17:00 WIB; slot kosong berikutnya kalau lewat.
  Stok video di `openclaw-img/`: soto_pakotto_video1-5.mp4, soto_video_1-4.mp4, soto_reel_bos.mp4
  (MENU_INTRO × MENU_HIGHLIGHT × MENU_AJAK = 100 kombinasi unik, hash tracker anti duplikasi).
- **Harga & Promo Pak Otto (FIXED 22/08):** soto **Rp10 ribu PAS** (tagline: "Soto Semarang cuma 10 ribu tok") + paket
  **"tanpa drama" 35rb tok gaesss: 2 soto ayam kampung + 2 es teh + 4 tempe mendoan** (makan & minum berdua, kenyang tanpa drama).
- **Menu murah Pak Otto (FIXED 2 Sep 2026):** **Tempe Mendoan Rp2 ribu** + **Lumpia Semarang Rp7 ribu**.
  Tagline: **"Ga perlu ke Semarang, cukup ke Pagerwojo Sidoarjo"** — WAJIB dipakai di konten promosi menu ini.
- **FB share ke grup kuliner (FIXED 2 Sep 2026, instruksi Bos):** postingan FB Pak Otto yang promosi
  menu/video juga WAJIB di-share ke **grup kuliner Sidoarjo & kuliner Surabaya**. ⚠️ Repliz API TIDAK support
  post ke grup FB (hanya halaman/akun) — share ke grup butuh login FB pribadi (manual oleh Bos atau
  browser automation Playwright dengan sesi login Bos). Ini TODO manual, bukan otomatis via Repliz.
- **Keyword wajib diperbanyak Threads Pak Otto (FIXED 22/08):** "Kulineran Malam di Sidoarjo",
  "Nasi Goreng Sidoarjo", "Kuliner Murah Sidoarjo", "Soto Termurah Sedunia" — di caption menu (2×/hari)
  + sisip otomatis di slot malam 17/20/23 WIB (sisip_keyword_malam).
- **Bank Diskusi Gaduh (FIXED 22/08):** 8 series pertanyaan receh kontroversial (soto bening vs santan, sate kerang
  celup vs kering, soto pakai nasi vs gak, soun banyak vs dikit, tim babat vs kulit, soto+es teh/jeruk/jahe,
  jam makan soto, sendirian vs rame-rame) → memancing perang komentar. Prioritas pemilihan konten:
  **desain menu (2×/hari) → diskusi gaduh → series biasa**.
- **Image (FIXED 21/08):** NO base64 — semua gambar simpan di server OpenClaw (openclaw-img/),
  format PNG/JPEG, URL publik via http.server :8123 + Tailscale Funnel (IMG_BASE_URL di repliz_client.py)
- Postingan IG Pak Otto: feed 11:00 WIB + story 11:05 WIB (soto_ig_zip_scheduler.py)

### 🍜 Soto Semarang Pak Otto — Referensi Cepat
- **🎬 Video WAJIB tayang di IG + TikTok + FB (FIXED — 24 Agustus 2026, UPDATE 27 Agu):** SETIAP video Pak Otto yang dikirim Bos → jadwalkan SELALU ke IG (`6a86d6e962caae1e04ffedaa`), TikTok (`6a86d70362caae1e04ffedef`), DAN FB (`6a8f9df162caae1e040754d8`) — tiga-tiganya, jangan cuma satu. Jam biasa: 17:00 WIB (kalau slot lewat, geser/konfirmasi ke Bos). **FB juga dipakai untuk pasang SEMUA konten Pak Otto (dari TikTok, IG, dan lainnya)**. Script: `soto_video_scheduler.py` (pola render 1080×1920 + blur, URL server `https://mantapserver.tail3947bb.ts.net/openclaw-img/...`)
- **IG:** `6a86d6e962caae1e04ffedaa` (@sotosemarang.pakotto) ✅ Repliz
- **TikTok:** `6a86d70362caae1e04ffedef` (sotosemarang.pakotto) ✅ Repliz
- **Threads:** `6a86d84b62caae1e04fff12c` ✅ Repliz
- **Lokasi:** Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo
- **Jam (FIXED 5 Sep 2026):** Buka **Setiap Hari 10.00–21.00 WIB** (update dari 06.00 & 09.00) — semua caption Pak Otto WAJIB pakai 10.00–21.00 WIB
- **WA:** 081230777713
- **Brand:** Soto Semarang Ayam Kampung Asli & Nasi Goreng Babat & Kulit — hidden gem Sidoarjo
- **Threads scheduler:** `soto_threads_scheduler.py` — 7 slot WIB (05/08/11/14/17/20/23), nested 3, konten Suroboyoan + link TikTok/IG, cron tiap jam (5 menit lewat jam)
- **Menu khas:** soto ayam kampung kuah bening, nasi goreng babat & kulit, sate kerang, sate ayam, sate telur puyuh, perkedel

### 🏭 Yasma Natura — Referensi Cepat
- **Domain:** yasmanatura.co.id
- **IP:** 103.175.217.138
- **USER WP:** bambangbot
- **App Password:** `LFp4 LXBh kMYG 84qC 2DDc 5bLc`
- **Role:** Administrator
- **REST API:** https://yasmanatura.co.id/wp-json/wp/v2
- **Kategori:** Maklon Minuman Serbuk Kesehatan & Kecantikan
- **Note:** App password ada di `wp-clients/apppassword.md`

### 🔐 OpenRouter API Key
- **Disimpan di:** /home/mantapman/.openrouter_key

## 🖼️ SEMUA Image Sosmed → Server OpenClaw (FIXED — 21 Agustus 2026)
- **SEMUA image untuk Repliz/sosmed (IG, FB, Threads, LinkedIn, dll) WAJIB dari server OpenClaw (mantapserver)** — NO base64, NO upload ke WP StudioSoft lagi
- **URL publik:** `https://mantapserver.tail3947bb.ts.net/` (Tailscale Funnel → http.server :8123 → folder `openclaw-img/`)
- **Format:** PNG atau JPEG (upload otomatis dikonversi JPEG kualitas 90)
- **Cara panggil:** `from repliz_client import upload_image_to_server` → return URL, atau `ReplizClient().upload_to_wp()` (sudah dialihkan ke server OpenClaw)
- **IMG_BASE_URL** di-set di `repliz_client.py`
- Server gambar: **systemd user service** `openclaw-img-server.service` (FIXED 1 Sep 2026 — ganti nohup manual):
  `systemctl --user restart openclaw-img-server`
  Setup: `/usr/bin/python3 -m http.server 8123 --directory /home/mantapman/.hermes/profiles/atun/workspace` (ROOT = workspace-atun, BUKAN openclaw-img → URL WAJIB pakai prefix `/openclaw-img/`)
  Auto-restart kalau mati (Restart=always) + auto-start saat login (linger aktif). Cek: `systemctl --user status openclaw-img-server`
- ⚠️ File yang upload ke WP untuk **featured image artikel website** TETAP di WP (fungsi beda — biar tampil di website klien): artikel_ss_*.py, publish_*.py, dmark_post_*.py, dll
- ⚠️ `das_tiktok_crosspost.py` upload VIDEO ke WP — belum diubah (video, bukan image; konfirmasi ke Bos kalau perlu)
- JANGAN taruh file pribadi/sensitif di `openclaw-img/` (folder ini ke-expose publik via funnel)

### 🎥 Kling AI API Key
- **Key:** `J_oD5BYrEzznycFyR4PWycMaV09UPLzKuKyU-pRdaTM`
- **Catatan:** API untuk AI video generation

### 📢 Konten Event / Narasumber (FIXED — 3 Agustus 2026)
- Konten event/event coverage (jadi narasumber, kopdar, seminar, dll) → **perbanyak share ke LinkedIn & Threads** — platform paling cocok
- Tetap boleh ke FB/IG, tapi prioritas LinkedIn + Threads
- Positioning narasumber wajib: **Uky Yanuhandoko — Pakar SEO, Digital Marketing Specialist, Website Developer** (StudioSoft sebagai brand)
- **IG StudioSoft:** konten event seperti ini HANYA boleh di **Story** (bukan feed) — feed IG StudioSoft sudah di-set terpisah, jangan diganggu
- Repliz: update schedule gak didukung (PATCH/PUT 404) → kalau mau ubah caption, delete + create ulang
- Repliz support type **"story"** untuk IG

### 🎨 Aturan Warna — BG Biru → Font WAJIB Putih (FIXED — 22 Agustus 2026)
- **Apapun desainnya, kalau background BIRU (biru royal, biru tua, dsb) → font WAJIB PUTIH (#FFFFFF)** biar kontras & terbaca jelas
- JANGAN pakai teks hijau/kuning/oranye/gelap di atas BG biru — kurang terlihat
- Aksen warna (garis, divider, ikon) boleh tetap berwarna, tapi SEMUA teks/font harus putih
- Berlaku untuk semua template carousel/story/feed: StudioSoft hc*, GEO, SEO, dll
- Contoh sudah diterapkan: `studiosoft_hc17_carousel_gen.py` (9 teks hijau → putih, 22 Agu 2026)

### 🎨 Aturan Warna — BG Biru → Font WAJIB Putih (FIXED — 22 Agustus 2026)
- **Apapun desainnya, kalau background BIRU (biru royal, biru tua, dsb) → font WAJIB PUTIH (#FFFFFF)** biar kontras & terbaca jelas
- JANGAN pakai teks hijau/kuning/oranye/gelap di atas BG biru — kurang terlihat
- Aksen warna (garis, divider, ikon) boleh tetap berwarna, tapi SEMUA teks/font harus putih
- Berlaku untuk semua template carousel/story/feed: StudioSoft hc*, GEO, SEO, dll
- Contoh sudah diterapkan: `studiosoft_hc17_carousel_gen.py` (9 teks hijau → putih, 22 Agu 2026)

### 🖼️ Safe Zone — SEMUA DESAIN (FIXED — 3 Agustus 2026)
- **Apapun desainnya** (story, feed, carousel, featured image, banner, dll) WAJIB ada **safe zone di kiri, kanan, atas, dan bawah**
- Teks/element TIDAK boleh menyentuh tepi image atau keluar dari batas
- Default aman: minimal **20px** dari semua tepi (kecuali template tertentu yang sudah punya aturan lebih besar, ikut aturan template itu)
- Selalu cek hasil render sebelum dipakai — kalau ada elemen mepet/keluar, perbaiki dulu
- **Tambahan (FIXED):** pastikan TIDAK ada teks yang tertumpuk/overlap, dan TIDAK ada teks/element yang keluar dari safe zone — cek pakai PIL textbbox sebelum dipakai (verifikasi kiri/kanan/atas/bawah ≥ 20px dari tepi)

### 🚫 Auto-Reply Threads — STATUS MATI (FIXED — 18 Agustus 2026)
- **Auto-reply Threads DIMATIKAN 18 Agu 2026** atas permintaan Bos (cron `threads_mention_reply.py` di-comment di crontab, backup: `/tmp/crontab_backup_20260818.txt`)
- **Aturan FIX:** akun LUAR yang masuk & reply di Threads == **STOP, jangan dibalas otomatis**
- **Yang TETAP JALAN:** saling mention & saling reply antar akun INTERNAL Repliz kita — `threads_cross_mention.py` (cron tiap 6 jam) TIDAK boleh dimatikan
- **Twitter autoreply** (`twitter_mention_reply.py`) tetap AKTIF — beda platform, jangan ikut dimatikan
- Kalau mau aktifkan lagi autoreply Threads → uncomment baris `threads_mention_reply.py` di crontab

### 🔒 LEIT THREADS — HANYA POSTING CAPTION (FIXED — 24 Agustus 2026)
- **Akun Threads LEIT (@leitsurabaya) TIDAK BOLEH reply / diskusi / comment SAMA SEKALI** — hanya posting caption saja
- LEIT sudah DIKELUARKAN dari semua mesin reply/diskusi (jangan pernah dimasukkan lagi):
  - `threads_cross_mention.py` (AKTIF di cron tiap 6 jam) — leit dihapus dari AKUN ✅
  - `threads_cross_reply.py` (nonaktif) — semua pasangan leit dikomentari ✅
  - `threads_cross_reply_v2.py` (nonaktif) — akun + Thread 4 + reply leit dikomentari ✅
  - `threads_mention_reply.py` (mati di cron sejak 18 Agu) — leit dihapus dari THREADS_ACCOUNTS ✅
- **Yang TETAP jalan untuk LEIT:** posting caption/seri konten (`leit_threads_scheduler.py`, dll)

### 🗨️ Autoreply Mention Threads @ukyhandoko (FIXED — 4 Agustus 2026, DI MATIKAN 18 Agu 2026 — lihat aturan di atas)
- **Script:** `threads_mention_reply.py` — balas komentar/mention yang MASUK ke Threads @ukyhandoko
- **Cron:** `threads-mention-autoreply-uky` — tiap 30 menit (isolated agentTurn, silent kalau 0 reply)
- **API Repliz:**
  - `GET /public/comment?page=1&limit=50` — antrian komentar masuk (status "pending", filter `accountId` = akun penerima, `comment.owner` = yang komen)
  - `POST /public/comment/{doc_id}` body `{"text": "..."}` — BALAS komentar (bukan /reply!)
- **Aturan:** max 5 reply/run, jeda 2 menit, ≤480 karakter, bahasa humanis (pakai "saya"), skip komentar akun internal (studiosoft.id, ukyhandoko, dll)
- **Tracker:** `.threads_mention_tracker.json` — biar gak balas 2x
- Keyword mapping: belajar SEO / lucu / setuju / backlink / klien / DM-WA / sales pitch / makasih / AI / default humanis

### 📘 FB — Lebih Sering Bahas Artikel (FIXED — 4 Agustus 2026)
- **FB WAJIB lebih sering bahas artikel** (dari website brand/klien masing-masing, JANGAN dari website brand lain)
- **Sumber artikel:** file `daftar_artikel_fb_unused.md` (hasil cek langsung ke WP, 4 Agustus 2026) — pilih artikel yang **belum pernah dipakai** (cek history FB masing-masing akun), update file ini berkala
- **Pasangan akun FB ↔ website WAJIB:** StudioSoft→studiosoft.id | DAS→dasindonesia.com | TS Law→tslaw.id | LEIT→leitsurabaya.com | DMark→dmark.id | Apotek Arlan→apotekpamekasan.com | RSIA→rsia.kendangsari.com | SSC→surabaya-skincentre.com
- Format: minimal 3 paragraf, WAJIB link artikel, WAJIB hashtags sesuai topik
- Caption harus nyambung dengan isi artikel yang di-link (jangan link artikel A tapi bahas topik B)
- Frekuensi: perbanyak dari "sesekali" — idealnya tiap posting FB yang bukan series/carousel, WAJIB ada link artikel
- Cara cek artikel unused: `python3 cek_artikel_fb_unused.py` → update `daftar_artikel_fb_unused.md`

### 🚫 IG — DILARANG Posting Text-Only (FIXED — 31 Agustus 2026)
- **Instagram TIDAK mendukung posting text-only** — semua jadwal `type=text` ke akun IG pasti error (bukti: TS Law 24 error, Apotek Arlan 162 error).
- Kalau mau posting "text" ke IG → WAJIB pakai media (image/album/video) atau jadikan gambar.
- Berlaku untuk SEMUA akun IG (StudioSoft, DMark, LEIT, TS Law, Arlan, DAS, TSC, Soto, Dojo, Uky, dll).
- Pelajaran dari audit 31 Agu 2026: 155 jadwal pending ber-media dicek URL → 0 bermasalah. Error massal text di TS Law & Arlan karena text-only.
