---
summary: "Mas Eko's context, priorities, and working style — long-term memory"
read_when: Every new session or bootstrapping workspace
---

## 👤 User Profile — Mas Eko

| Field | Value |
|-------|-------|
| **Nama** | Mas Eko |
| **Role** | Freelance advertiser / Meta Ads specialist |
| **Timezone** | Asia/Bali (GMT+8) |
| **Lokasi** | Bali |
| **Kontak** | Telegram (ID: 203050635) |
| **Jam aktif** | Setelah ~23:20 WITA |
| **Klub favorit** | PSG (UCL 2026 retained ✅) |
| **Pemain favorit** | Budi Sudarsono ("Si Piton") |
| **Current Main Client** | Rolina Visa Services (visa agency in Bali) |
| **Preferred Deliverable** | DOCX with detailed comparison tables & concrete numbers |

---

## 🎯 Focus Areas (Deadline: End of June 2026)

1. **Portfolio web & konten profesional**
2. **Case Study CRM** — Baliusada + Praktik Psikolog
3. **Freelance marketplace profile** — minimal 1 aktif
4. **Produk digital** — minimal 1 ide jelas

---

## ⚡ Active Projects

| # | Project | Tipe | Status |
|---|---------|------|--------|
| 1 | **Bali Usada Database** | Database | 🟢 URGENT |
| 2 | **Nago (Web + Discovery)** | Web | 🟢 Landing + quiz ✅ |
| 3 | **@balimentari (NLP/Hypnosis Konten)** | Content | 🟢 Box Breathing Reels ✅ |
| 4 | **Web Psikolog Indra Surya** | Web Dev | 🟡 On hold |
| 5 | **Branding Tugus Purwa** | Branding | 🟡 On hold |
| 6 | **Rolina Visa — Meta Ads Campaign** | Advertising | 🟢 **Active** — targeting AU (60%) + NL (40%); competitor research & proposal done; building final DOCX via chunked JS |
| 7 | **Resilience Space Konten** | Content | 🟡 On hold |
| 8 | **Object Imagery Hypnosis Ebook** | Produk Digital | 🟢 Concept ✅ |

### Rolina Visa — Key Context
- **Business:** Visa services in Bali, targeting foreigners entering Indonesia
- **USPs:** "Pertama di Bali" (since 2012), 20+ years experience
- **7 services:** Working, Study, Family, Diplomatic, Immigrate, Tourist, Transit visas + Stay Permit, Consultation, Retirement
- **Target markets:** Australia (#1 source, 1.63M arrivals in 2025) & Netherlands (niche, strong Indonesia-Netherlands ties)
- **Key competitors analyzed:** 10 agencies (Bali Visa Agency, Flado, eVisa Bali, Bahalap Uras, Peak Solutions, etc.)
- **Status:** DOCX proposal in progress — rebuilding via chunking approach after truncation issues

---

## 🔧 VIOSTUDIO API — Core Reference

| Detail | Value |
|--------|-------|
| **API Key** | `vio_sk_vA8llIYm51J3oyXtfevrM92yUBJ8-3IS1sIn6xydF8o` |
| **Base URL** | `https://api.viostudio.id/v1` |

### Model & Credit Costs

| Model | Type | Credits | Notes |
|-------|------|---------|-------|
| `omni-flash` | Video (t2v, max 6s) | **1 ⭐** | Best value; t2v only (no i2v) |
| `nano-banana-pro` | Image | 3 | — |
| `gpt-image-2.0` | Image | 5 | Preferred image model |
| `veo-3.1-lite` | Video (i2v/t2v) | 5 | Good fallback |
| `veo-3.1-fast` | Video (i2v/t2v) | 50 | Fast but expensive |
| `veo-3.1-quality` | Video (i2v/t2v) | 100 | Best quality |

### ⚙️ Production Rules
- **Model priority ladder:** `omni-flash` (1cr/6s) → revisions → `veo-3.1-lite` (5cr) → higher models
- **Prompt language:** Bahasa Indonesia (more stable results)
- **Content safety (mental health/hypnosis):** Avoid keywords "fight or flight", "stress active", "panic attack"
- **i2v** = image-to-video | **t2v** = text-to-video

### 🖼️ Image Generation Critical Notes
- **Aspect ratio:** Use `"3:4"` (1080×1440 px) for IG feed/carousel. **DO NOT** use `"4:5"` or `"3/4"` (ERROR 400)
- **Text rendering:** `gpt-image-2.0` can generate text but often imprecise (wrong font, typos, layout issues). Better generate background-only then overlay text manually via Python/PIL
- **Batch splitting:** 6-7 slides sequential generate + poll takes 5-10 min. Split into 2 batches (3-4 slides each) to avoid timeout
- **Timeout handling:** Script needs retry logic (max 30x, 8s interval). HTTP 500 errors sometimes occur but retry works

### 📽️ Reels Production Workflow
1. Generate 9:16 images (`gpt-image-2.0` preferred)
2. Upload to `/v1/assets`
3. Animate via i2v model
4. Poll `/v1/generations/{id}` every 8–15s

---

## 🎨 @balimentari Brand Identity

- **Warna:** Deep teal blue (#1A5F7A) + Soft cream (#FFF8F0) + Orange (#FF9F43)
- **Mascot:** "Surya" — sun chibi
- **Style:** Flat vector illustration, minimalis, modern aesthetic
- **Format:** 3:4 aspect ratio (Instagram carousel)
- **Font:** Sans-serif bold untuk judul
- **Vibe:** Calming, profesional, edukatif, relatable

---

## 💬 Communication Style

- **Inisiatif:** Langsung action, jangan ditunggu; gas & semangat
- **Signal:** "stop" = salah, "aman" = setuju, "udh/dgn/yg" = casual tone
- **Check-in:** Awal minggu + daily via Telegram, friendly-emoji-casual
- **Humor:** Abu Nawas style, jokes garing
- **Workflow preferences:**
  - Tawarin konsep detail dulu sebelum generate (user review dulu)
  - Caption selalu diminta setiap kali carousel selesai
  - Setiap konten harus nyambung ke konten sebelumnya (satu universe)
  - Konsep prompt harus matang di tahap review, jangan langsung generate
  - Suka tabel perbandingan detail & angka konkret (budget, estimates)
  - Minta arah "closing" — kemana ads mengarahkan user (WA, website, landing page)

---

## 📋 Strategic Frameworks

### Competitor Analysis (for Meta Ads)
1. Scan **Meta Ads Library** for active competitors (`facebook.com/ads/library/`)
2. Catalog: website, positioning, languages, USP, pricing, services, contact
3. SWOT per competitor
4. Identify gap client can fill
5. Recommend funnel: **TOFU** (awareness) → **MOFU** (consideration) → **BOFU** (conversion) + closing channel

### Multi-Market Ad Strategy
- **Budget split** by market size (e.g., AU 60% / NL 40%)
- **Language:** AU = casual English; NL = dual Dutch+English
- **Hooks differ by market:** AU = proximity + value; NL = history + culture
- **Separate ad sets** per country with different creative

---

## 🛠️ Technical Workflow Patterns

### Browser Reliability
- Browser tools (`browser_use`) frequently fail due to CAPTCHAs & CDP timeouts
- **Fallback:** Use `tavily_search` for web research
- **Always test** browser availability first before depending on it

### DOCX Generation (Node.js `docx` package)
- **⚠️ Large files get truncated** by `write_file` (~27KB limit) — NEVER merge truncated files
- **✅ Chunking approach:** Split into 6+ small JS files (<15KB each), then `cat chunk*.js > final.js && node final.js`
- **Quote rule:** Use **single quotes** for JS string delimiters, **double quotes** inside content text — eliminates need for escape characters
- **Common pitfalls:** Smart quotes (`"..."`) cause parse errors; missing `width` param in `cell(text, width)`; extra closing brackets in `TableRow` structures
- **Validate:** Run `node script.js` after each chunk addition, fix errors incrementally

### Chunking Strategy (Generalizable)
1. `chunk0.js` — all helper functions
2. `chunk1.js` — document setup + first section
3. `chunk2–N.js` — remaining sections (1–2 per chunk)
4. `chunkN.js` — closing brackets + output logic
5. Concat & run: `cat chunk*.js > output.js && node output.js`
6. **Principle:** Each chunk doesn't need to be standalone valid — just syntax-error-free within itself

---

## 🧠 Installed Skills (MCP)

| Skill | Repo | Fungsi |
|-------|------|--------|
| **social** | coreyhaines31/marketingskills | Konten sosmed |
| **content-strategy** | coreyhaines31/marketingskills | Strategi konten |
