---
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 | 🟢 Active — universe of subconscious psychology carousels |
| 4 | **Web Psikolog Indra Surya** | Web Dev | 🟡 On hold |
| 5 | **Branding Tugus Purwa** | Branding | 🟡 On hold |
| 6 | **Rolina Visa — Meta Ads Campaign** | Advertising | 🟢 **Active** — AU (60%) + NL (40%) targeting; DOCX proposal 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 since 2012, targeting foreigners entering Indonesia
- **USPs:** "Pertama di Bali", 20+ years experience
- **Kontak:** WA +62 895 0900 6600, Phone +62 361 487121, info@rolinavisaservices.com
- **Sosmed:** facebook.com/RolinaVisaServicesOfficial, instagram.com/rolinavisaservicesofficial
- **7 services:** Working, Study, Family, Diplomatic, Immigrate, Tourist, Transit + Stay Permit, Consultation, Retirement
- **Target markets:** Australia (#1 source, 1.63M arrivals 2025, ~25% of intl. tourism) & Netherlands (niche, historical ties, 99% fluent English)
- **Key competitors (10 analyzed):** Bali Visa Agency, Flado, eVisa Bali, Bahalap Uras, Peak Solutions, Rumaka Visa, VISALF Indonesia, Bali Legals, Get Bali Visa, Lets Move Indonesia

#### Competitor Intelligence (Pricing & Differentiators)
| Competitor | Key Differentiator | Pricing Snapshot |
|-----------|-------------------|-----------------|
| **Bali Visa Agency** | Since 2006; Pay AFTER successful submission to immigration | Tourist C1 60d ~IDR 2.15M; 1yr single $397–488; Multiple 1yr $397–520 |
| **Flado** | 10 languages, 11.8K+ clients, crypto payment (USDT/USDC), Telegram community | Tourist C1 Standard ~IDR 2.2M; Fast (5d) ~IDR 4.2M |
| **eVisa Bali** | 12+ years, licensed & certified | — |
| **Bahalap Uras** | Multi-language (EN/RU/FR), affordable | — |
| **Bali Visas** | PMA+KITAS bundles | PMA+KITAS 2yr IDR 35–60jt; KITAP IDR 40–60jt |
- **Status:** DOCX proposal in progress via chunked JS approach

### @balimentari — Content Universe Structure

All carousels form a **single interconnected series** on subconscious psychology:

```
Bawah Sadar (foundation)
  ├─ Contoh Bawah Sadar (application)
  ├─ Critical Factor / Si Penjaga Gerbang (mechanism)
  │    ├─ Self-Sabotage (manifestation)
  │    ├─ Denial (defense form)
  │    └─ Secondary Gain (hidden benefit)
  ├─ Afirmasi Gak Work (problem)
  │    └─ Fake It Till You Make It (solution)
  ├─ Trauma Lebih Nempel (memory mechanism)
  │    └─ Projection (trauma manifestation)
  └─ Comfort Zone (barrier to change)
```

> **Rule:** Every new content proposal must explicitly connect to previous content in this universe. Higher approval rate when "Nyambung ke: [prev content]" is stated.

---

## 🔧 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:** AI image models (incl. `gpt-image-2.0`) produce imprecise text (wrong font, typos, layout). **Best practice:** Generate background-only images, then overlay text manually via Python/PIL — far cleaner result
- **Batch splitting:** Split into batches of 3-4 slides to avoid timeout. Sequential generate + poll ~5-10 min for 6-7 slides
- **Timeout handling:** 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)
- **⚠️ `write_file` truncates ~27KB** — NEVER merge truncated files
- **✅ Chunking approach:** Split into 6+ small JS files (<15KB each), concat with `cat chunk*.js > final.js && node final.js`
- **Quote rule:** Use **single quotes** for JS string delimiters, **double quotes** inside content — eliminates escape characters entirely
- **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 standalone validity — just syntax-error-free within itself

---

## 🧠 Installed Skills (MCP)

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