# Referensi: Presentasi Kenaikan Pangkat & Promosi Inovasi

## File Presentasi (Juli 2026)

| File | Path | Deskripsi |
|------|------|-----------|
| PPTX Final | `/home/ubuntu/workplace/chatbot/Presentasi_KIE_NAKESWAN_2026.pptx` | 13-slide presentasi kenaikan pangkat luar biasa |
| Source Docs | `/home/ubuntu/workplace/chatbot/Bukti Prestasi.docx` | Deskripsi inovasi chatbot KIE NAKESWAN |
| Source Docs | `/home/ubuntu/workplace/chatbot/DOC-20251110-WA0015.pptx` | Presentasi asli 15 slide (referensi konten) |
| Folder Foto | `/home/ubuntu/workplace/chatbot/foto/` | 7 foto dari Google Drive (folder ID: 14fFCnSBeiRDtmutR_xjEOs4JQ6l7JQ_6) |

## 13 Slide Structure (Presentasi_KIE_NAKESWAN_2026.pptx)

| # | Judul | Foto Disisipkan |
|---|-------|----------------|
| 1 | Cover | Tidak |
| 2 | Latar Belakang | `07_sosialisasi_peternak.jpg` |
| 3 | Identifikasi Masalah | Tidak |
| 4 | Solusi | `01_cuplikan_layar.jpg` |
| 5 | Cakupan Layanan | `05_pelaksanaan_webinar.jpg` |
| 6 | Arsitektur & Cara Kerja | `02_flyer_webinar.jpg` |
| 7 | Dasar Hukum | Tidak |
| 8 | Kemanfaatan Inovasi | `06_pelatihan_aeris.jpg` |
| 9 | Legalitas & Penghargaan | `03_foto_penghargaan.jpg` |
| 10 | Data & Interaksi | `04_foto_zoom_asia_pacific.jpg` |
| 11 | Kerangka Inovasi: Tusi | Tidak |
| 12 | Kesimpulan | Tidak |
| 13 | Terima Kasih | Tidak |

## Foto Google Drive (Folder: 14fFCnSBeiRDtmutR_xjEOs4JQ6l7JQ_6)

File IDs untuk download via `gdown`:

```
1n9d3NDFidnEaNtQEOmYQseEmy-6SNVdz → 01_cuplikan_layar.jpg        (1280×768,  157 KB)
1X7O_pj_QhhRVxw_Hu-ENLUVIuQ_rb712 → 02_flyer_webinar.jpg        (1131×1435, 215 KB)
18WYLgIf52742NCs4ANWKeZm1t-w7SlJQ → 03_foto_penghargaan.jpg     (4608×3072, 2.9 MB)
1jqoMpWnZVmsQipW8bb_BA8bw4K9CqTo4 → 04_foto_zoom_asia_pacific.jpg (2272×1278, 200 KB)
1mVJNo-OOIMThJwrc23RN7LlVOuOQ9kH6 → 05_pelaksanaan_webinar.jpg   (1440×900,  168 KB)
1U7CndXda3r3wHWzr9o_v5YFABoH8Fg3r → 06_pelatihan_aeris.jpg      (3840×2160, 701 KB)
1cmQ96f0Q2VKF9Ml3wmJIBiFMqpRDLOUo → 07_sosialisasi_peternak.jpg  (550×379,  82 KB)
```

Download script:
```python
import gdown, os
folder = "/home/ubuntu/workplace/chatbot/foto"
os.makedirs(folder, exist_ok=True)
file_ids = [
    ("1n9d3NDFidnEaNtQEOmYQseEmy-6SNVdz", "01_cuplikan_layar.jpg"),
    ("1X7O_pj_QhhRVxw_Hu-ENLUVIuQ_rb712", "02_flyer_webinar.jpg"),
    ...
]
for fid, fname in file_ids:
    gdown.download(f"https://drive.google.com/uc?id={fid}&export=download",
                   os.path.join(folder, fname), quiet=True)
```

## Tech Stack Pembuatan PPTX

- **Library**: `pptxgenjs` (Node.js) — buat dari scratch
- **Lokasi project**: `/home/ubuntu/workplace/chatbot/pptx_builder/`
- **Script build**: `update_slides.js`
- **Setup npm**: `npm init -y && npm install pptxgenjs react react-dom react-icons sharp`
- **Build**: `node update_slides.js`
- **Output**: `/home/ubuntu/workplace/chatbot/Presentasi_KIE_NAKESWAN_2026.pptx`

## Pitfalls PPTX (Lessons from Build, Juli 2026)

1. **Emoji dalam `addText()` corrompe file** — Tidak ada error saat build, tapi slide tidak render dengan benar. Gunakan angka/nomor untuk label bukan emoji langsung.
2. **`makeShadow()` factory function WAJIB** — `pptxgenjs` mutates shadow objects in-place. Jika reuse satu object shadow di multiple calls, nilai kedua corrupts. Selalu buat fresh object: `const makeShadow = () => ({ type: "outer", color: "000000", blur: 8, offset: 3, angle: 135, opacity: 0.12 })`
3. **Ukuran foto besar → resize sebelum sisipkan** — `03_foto_penghargaan.jpg` (4608×3072, 2.9 MB) harus di-resize. Gunakan `sharp` untuk resize.
4. **Konten slide terlalu banyak text → pisahkan ke kartu** — Gunakan card-based layout (shape + text) supaya tidak crowded.
5. **`markitdown` untuk QA konten** — `python -m markitdown file.pptx` untuk verifikasi teks per slide.

## Catatan Khusus

- Foto `03_foto_penghargaan.jpg` (2.9 MB) terlalu besar — perlu diresize sebelum disisipkan di slide
- Foto `06_pelatihan_aeris.jpg` (3840×2160, 4K) perlu resize juga
- Gunakan `sharp` di Node.js untuk resize: `sharp(input).resize(width, height).toFile(output)`
