# Daily Notes — 11 Agustus 2026

## 🗓️ Konteks Sesi
- Sesi panjang soal sistem "1 artikel tiap hari di semua website" + voice-over video Amari Roof.
- Sesi di-urushi saat runtime pre-compaction flush.

---

## ⏰ SISTEM ARTIKEL HARIAN (WEB — pipeline_artikel_harian.py)

**Cron sudah terpasang:** `0 2 * * *` (UTC) = **09:00 WIB** tiap hari.
- Runner: `run_artikel_harian.sh` → loop semua `cfg_*.py` (kecuali `*_update.py`) → `python3 pipeline_artikel_harian.py <cfg>`.
- Log per run: `artikel_harian_YYYY-MM-DD.log`.

**Cara pipeline:** WordPress REST API, Yoast SEO, featured image dari Pexels, WA button, schedule 09:00, log ke `log_pipeline_harian.jsonl`.

**13 website config:** cfg_abimata.py, cfg_apotek.py, cfg_das.py, cfg_dmark.py, cfg_ekaduta.py, cfg_everybe.py, cfg_leit.py, cfg_nucleasoft.py, cfg_rsia.py, cfg_ssc.py, cfg_tsc.py, cfg_tslaw.py, cfg_yasma.py (+ cfg_dmark_update.py). StudioSoft TIDAK ada di pipeline WP (punya 266 artikel tapi buat sosmed).

**Duplikat 11 Agu yang SUDAH dihapus (sisakan 1/website):**
- DAS (dasindonesia.com, user bambangbot): hapus id 8159, sisakan 8157 (Servis AC Mobil).
- Nucleasoft (otomasibisnispintar.com): hapus id 4306 & 4307, sisakan 4305 (Cara Menerapkan AI di Bisnis).
- Post ini status **future/scheduled** jam 09:00 WIB (bukan publish) — itu sebabnya filter tanggal `2026-08-1` (UTC) gak nangkep.

**Duplikat KONTEN 12 Agu yang SUDAH dihapus** (isi identik dgn 11 Agu, beda tanggal):
- Abimata: hapus id 28001, sisakan 27955.
- Apotek: hapus id 4380, sisakan 4379.

**Credential WP (terkonfirmasi):**
- DAS: dasindonesia.com, bambangbot / `VzXR 72KF NJWn XxHI MhJN B9Hs`
- Nucleasoft: otomasibisnispintar.com, bambangbot / (`VvC3 w...` — lengkap di cfg_nucleasoft.py)

**Guard anti-duplikat** dipasang di pipeline — batasin 1 post per website per tanggal.

### 🔴 AKAR MASALAH (BELUM TERSELESAIKAN — butuh keputusan Bos)
- Config `cfg_*.py` berisi artikel yang **ditulis manual & isinya TIDAK pernah berubah**. Pipeline tiap jalan publish konten sama ke tanggal berikutnya → **duplicate content** (buruk SEO).
- Supaya "1 artikel UNIK/hari/website" jalan, butuh **13 artikel fresh tiap hari**.
- Sumber artikel utuh: `artikel_seo/` cuma 12 file (apotek_ 3, das_ 3, studiosoft_ 3, ttalaw_ 3) — belum semua 13 website.
- `stok_artikel_augustus.json` cuma judul+link+tanggal (buat sosmed, bukan isi artikel web).

### 🗳️ Keputusan Bos: PILIH **(B)** (11 Agu)
- **(B)** = pakai stok artikel unik yang sudah ada per website → bangun runner ambil 1 unik/hari → nyalakan cron. Dijalankan sekarang.

### 📊 HASIL PEMETAAN STOK (solusi B, 11 Agu):
- **EveryBe**: 10 artikel utuh (`everybe/everybe_10_artikel.py`) - HTML, slug, cat [12]&[86], meta_desc.
- **Apotek**: 10 konten utuh (`artikel_seo/apotek_*.txt` = bahaya-antibiotik, cara-mengatasi-demam-anak, vitamin-daya-tahan) — 3 file utuh + lainnya.
- **Abimata**: 10 artikel (`10_artikel_abimata.txt` — ARTIKEL 1..10, format judul+deskripsi singkat).
- **TSC**: 35 file (`the-skin-code-articles/*.md` — Format SEO Data+Konten markdown:H1, meta, slug, focus kw, kategori, tags).
- **Nucleasoft**: 54 file (`nucleasoft-articles/*.md`), unused=2.
- **DAS**: 38 file (`artikel-das/*.md` + `artikel-das-20/*.md`), unused=2.
- **LEIT**: ~25 file (`artikel_leit_*.md`, `LEIT*.md`, `leit_artikel_*.md`) banyak judul.
- **TSLaw**: 4 file (`artikel_seo/ttalaw_*.txt` + `artikel_seo_tslaw_pendampingan.md`), unused=9.
- **SSC**: 3 file (`artikel_ssc*.md`), unused=1.
- **Yasma**: 200 judul topik (`200_judul_yasma_natura_lengkap.txt`) TAPI belum ada konten utuh → butuh generate/pilih dulu.
- **StudioSoft**: 4 file tapi TIDAK di pipeline WP artikel.
- **YANG NOL/belum konten = Yasma** → sumber konten harus digenerate dari 200 judul.
- `stok_artikel_augustus.json` = HANYA judul+link+date (untuk sosmed), BUKAN isi artikel web.

**Format stok tiap sumber BEDA** (md SEO, txt meta+slug, py dict) → perlu KONVERTOR per sumber jadi format `cfg_*.py` (artikel: judul, slug, meta_desc, focus_kw, cta_*, image_url, categories, tags, content[type p/h2/ul]).

**Rencana eksekusi (B):**
1. Bangun index stok per website + konvertor (baca stok → list artikel format cfg).
2. Runner/cron jam 9 ambil 1 artikel BELUM terpakai per website → publish schedule 09:00 WIB → tandai sudah dipakai (tracker file, misal `artikel_used_tracker.json`).
3. Guard anti-duplikat di pipeline sudah aktif (1 post/website/tanggal).
4. Yasma: generate konten dari 200 judul (butuh langkah terpisah) atau pending dulu.

**Implementasi yang SUDAH jalan:** pipeline_artikel_harian.py (guard kuat: skip kalau domain sudah punya post utk tanggal sasaran), run_artikel_harian.sh (loop cfg_*.py kecuali *_update), cron `0 2 * * *` (=09:00 WIB) — TAPI config masih isi artikel manual lama → belum aman dipakai rutin sampai runner stok (B) siap.

---

## 🎥 VOICE-OVER VIDEO AMARI ROOF (PADEL)

**Script VO:** "Ingin lapangan padel yang sejuk, minim bising, dan tetap hemat listrik di siang hari? Rahasianya bukan di AC, tapi di atapnya. Pilih Amari Roof."
- **Atap harus DIAM/stable** (tidak bergerak) di video.

**Yang udah dibikin:**
- Frames diekstrak dari `adegan_background_Atap_tidak_b---80f1750e-9573-4679-81a4-314417bc1c58.mp4` (10s, 720×1280 portrait, 24fps, ada audio).
- TTS natural dibuat: `voice-1786425478172---1c9732f1-7379-489c-837a-04ef28840e76.mp3` (13.18s).
- Video+VO dirakit: `work_amari/amari_roof_vo.mp4` (14.2s, video di-extend hold frame + audio VO) — sudah dikirim via MEDIA.

**Voice CLONE (Jawa) — tujuan Bos:**
- Referensi: video `ok_sekarang_buatkan_video_kont---c8e81dee-0e56-44ff-bd60-9eabeddaf8e7.mp4` → audio `audio/ref_voice.wav` (10s WAV mono 44.1kHz).
- Audio sudah diupload ke Replicate `/v1/files` (URL `https://api.replicate.com/v1/files/NzQ4N2YzMmEtNGY2Zi00MDk3LWJmZmEtZTZiMzA3MmUwY2Q1.wav`) DAN catbox (`https://files.catbox.moe/zmzrl0.wav`).
- **BLOCKED:** Akun Replicate `mantapman` (Uky Handoko) **credit < $5** → 429 rate limit + 422 "Invalid version/not permitted" pada `lucataco/xtts-v2` & `minimax/voice-cloning`. Bukan masalah script/URL.
- **Bos bilang "kemahalan Replicate"** → cari jalur gratis.
- **Solusi yang dipertimbangkan:** Coqui XTTS v2 lokal (clone dari ref_voice.wav, support Indonesia).

### ⚠️ Belum dikonfirmasi Bos: apakah video referensi ada WAJAH terlihat (buat lip-sync) — aku gak bisa verifikasi visual (no image model).

---

## 🔧 Live checks & skrip yang kubahas
- `run_artikel_harian.sh` — runner artikel harian (di cron 09:00 WIB).
- Pipeline: `pipeline_artikel_harian.py <config.py>`.
- Log: `log_pipeline_harian.jsonl`, `artikel_harian_YYYY-MM-DD.log`.
- Credential WP klien di file `cfg_*.py` masing-masing.

---

## 🔑 Replika kunci / aset
- **Replicate API key** ada di TOOLS.md (~line 340), token `r8_b85…eXSY` (akun valid, username `mantapman`).
- **Pexels** diblokir keyword kesehatan (pregnancy, newborn, baby care, dll) → TOPIC_MAP alias aman.
- Home: `/home/mantapman/.hermes/profiles/atun/workspace`.

## 📈 Lesson learned
- Post pipeline sering berstatus **future/scheduled**, bukan publish → cek duplikat harus include status `future` & pakai tanggal GMT (UTC), bukan WIB.
- Config `cfg_*.py` bisa reusable tapi isi konten TIDAK berubah → akar duplicate content. Anti-duplikat harus di **runner/pipeline** cek "1 post per tanggal per website" (jang cek slug di tanggal sama) karena slug bisa beda tiap run.

## WP Rocket Cache Rebuild — GAGAL (2026-08-11 ~17:16 UTC)
Cron `curl homepage ?nocache` semua 11 domain klien → HTTP 000 timeout (connect OK, TLS OK, tapi TIDAK ada response HTTP sama sekali; hang sampai max-time 20s).
Domain: studiosoft.id, yasmanatura.co.id, otomasibisnispintar.com, tslaw.id, rsia.kendangsari.com, theskincodeclinic.com, apotekpamekasan.com, everybeofficial.com, dmark.id, surabaya-skincentre.com, abimataconsultant.com.
- Internet keluar normal (google 200).
- TCP + TLS handshake sukses (cert terkirim) tapi request menggantung → server/hosting tidak membalas.
- Terjadi di GET / polos, ?nocache, HTTP/1.1, dan ke IP langsung (103.175.217.138) dengan Host header.
- Kesimpulan: masalah di sisi server/network hosting klien (down/block/WAF), BUKAN cron script. Perlu cek manual hosting.

## WP Rocket Cache Rebuild (18:10 UTC / 01:10 WIB)
- Trigger cache rebuild semua 11 klien via curl homepage + wp-cron.php, timeout 12s
- Semua domain 200 OK: studiosoft.id, yasmanatura.co.id, otomasibisnispintar.com, tslaw.id, rsia.kendangsari.com, theskincodeclinic.com, apotekpamekasan.com, everybeofficial.com, dmark.id, surabaya-skincentre.com, abimataconsultant.com
