---
summary: "Mas Eko's long-term memory — context, decisions, preferences"
read_when: Every new session or bootstrapping workspace
---

## 👤 User Profile

| 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") |
| **Main Client** | Rolina Visa Services (visa agency, Bali) |
| **Preferred Deliverable** | DOCX with comparison tables & concrete numbers |

---

## 🎯 Current Priorities

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 | Type | Status |
|---|---------|------|--------|
| 1 | **Bali Usada Database** | Database | 🟢 URGENT |
| 2 | **Nago (Web + Discovery)** | Web | 🟢 Landing + quiz ✅ |
| 3 | **@balimentari (NLP/Hypnosis Konten)** | Content | 🟢 Active |
| 4 | **Web Psikolog Indra Surya** | Web Dev | 🟡 On hold |
| 5 | **Branding Tugus Purwa** | Branding | 🟡 On hold |
| 6 | **Rolina Visa — Meta Ads Campaign** | Advertising | 🟢 Active |
| 7 | **Resilience Space Konten** | Content | 🟡 On hold |
| 8 | **Object Imagery Hypnosis Ebook** | Produk Digital | 🟢 Concept ✅ |

---

## 📌 Core Business Decisions

### Rolina Visa — Ad Strategy
- **Business:** Visa services in Bali (since 2012), targeting inbound foreigners
- **USPs:** "Pertama di Bali", 20+ years experience
- **Target split:** AU (60% budget, casual English hooks) + NL (40% budget, dual Dutch+English, history angle)
- **Funnel:** TOFU (awareness) → MOFU (consideration) → BOFU (conversion) via WA/website
- **Competition:** 10 agencies mapped; key differentiators = pricing transparency, language support, speed tiers
- **Status:** DOCX proposal via chunked JS approach

### @balimentari — Content Universe
All carousels form one 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:** Setiap konten baru WAJIB menyebut "Nyambung ke: [prev content]" — non-negotiable.

#### Carousel Generation Framework
- **Formula:** Hook menohok → relate ke fenomena anak muda → kaitkan ke konsep psikologi
- **Top Resonant Themes:** Ghosting, overthinking, FOMO, self-sabotage, toxic productivity, cognitive dissonance, projection
- **Avoid:** Terlalu akademis, terlalu nge-judge, terlalu vague
- **Batch rule:** 3 ide per request, tidak boleh ulang tema yang sama dengan batch sebelumnya
- **14 unique themes from 18 ideas (batch 1–6):** Defense Mechanism, Cognitive Dissonance, Repetition Compulsion, Anchoring, Hypnotic Language, Bawah Sadar, NLP, Mirroring, Projection, Positive Illusion, Time Perception, Shadow Self, Secondary Gain (Supporter Setia), Meta Model NLP
- **Carousels generated + scheduled:** Anchor, Cognitive Dissonance, Repetition Compulsion, Hypnotic Language, Meta Model NLP, Supporter Setia Masalah
- **Approved but not yet generated:** Repression, Map Is Not The Territory, Power of Trance, Reframing

#### Posting Pattern
- **Cadence:** Daily at 06:00 WITA
- **Format:** IG Carousel 3:4
- **Caption:** Always request caption upon completion

---

## 🎨 @balimentari Brand Identity

- **Colors:** Deep teal blue (#1A5F7A) + Soft cream (#FFF8F0) + Orange (#FF9F43)
- **Mascot:** "Surya" — sun chibi
- **Style:** Flat vector, minimalis, modern, calming/edukatif
- **Format:** 3:4 (IG carousel); sans-serif bold for titles

---

## 🔧 VIOSTUDIO API — Core Reference

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

### Models & Credit Costs

| Model | Type | Credits | Notes |
|-------|------|---------|-------|
| `omni-flash` | Video (t2v, max 6s) | **1** | Best value; t2v only |
| `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:** `omni-flash` (1cr) → `veo-3.1-lite` (5cr) → higher models
- **Prompt language:** Bahasa Indonesia (more stable results)
- **Safety (mental health/hypnosis):** Avoid keywords "fight or flight", "stress active", "panic attack"
- **Aspect ratio:** Use `"3:4"` (1080×1440 px) for IG carousel. **Never** `"4:5"` or `"3/4"` (ERROR 400)
- **Text rendering:** Generate background-only images, overlay text via Python/PIL (AI text is imprecise)
- **Batch splitting:** Split into 3-4 slide batches to avoid timeout; sequential generate + poll ~5-10 min for 6-7 slides
- **Timeout retry:** Max 30x, 8s interval; HTTP 500 errors recoverable via retry

### Reels 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

---

## 🎬 OpenMontage — Local Video Pipeline

- **Repo:** `calesthio/OpenMontage`
- **Location:** `/app/working/workspaces/default/OpenMontage/`
- **Setup:** `make setup` (installs Python deps, Remotion, Piper TTS v1.4.2, HyperFrames v0.7.17, FFmpeg)

### Available Tools (No API Key — Free)
| Category | Tools |
|----------|-------|
| **Audio** | `piper_tts`, `audio_mixer`, `audio_enhance`, `freesound_music`, `pixabay_music`, `audio_probe` |
| **Video** | `video_stitch`, `clip_search`, `direct_clip_search`, `video_compose`, `hyperframes_compose` |
| **Compose** | Remotion, HyperFrames, FFmpeg |
| **Analysis** | `video_analyzer`, `scene_detect`, `frame_sampler`, `composition_validator`, `visual_qa` |
| **Enhance** | `color_grade`, `upscale`, `bg_remove`, `face_restore` |
| **Subtitle** | `subtitle_gen` |

### Constraints
- **Piper TTS:** ❌ Indonesian model **not available** (404 on HuggingFace). Use `en_US-lessac-medium` (63MB) for English narration.
- **Graphics tools & Video gen tools:** Require API key (OpenAI recommended, ~$5)
- **GPU tools (WAN 2.1):** Require PyTorch + GPU — use `requirements-gpu.txt`

### Video Compose Pattern (Piper TTS + Remotion)
1. Generate narration audio via `piper_tts` (model: `en_US-lessac-medium`)
2. Compose visual with Remotion: warm gradient background + kinetic typography (Quicksand font)
3. Output: 1080×1920 (9:16), 24fps, MP4 via FFmpeg

---

## 💬 Communication & Workflow Preferences

### Personality & Interaction
- **Inisiatif:** Langsung action, gas & semangat
- **Signal language:** "stop" = salah, "aman" = setuju, "udh/dgn/yg" = casual
- **Check-in:** Awal minggu + daily via Telegram, casual-friendly
- **Tone:** Santai, akrab (panggil "bre" / "Mas Eko"), kayak ngobrol sama temen
- **Humor:** Abu Nawas style, jokes garing

### Daily Content Pillars (4 konten rutin — langsung eksekusi, no review needed)
| Waktu (WITA) | Konten | Notes |
|-------------|--------|-------|
| 07:00 | Cuaca Bali | Multi-source cross-ref |
| 12:00 | WC / Sports Update | Kalau ada event |
| 22:00 | Berita harian | Politik → Ekonomi → Olahraga → Hiburan |
| 02:00 (setiap 2 hari) | Ide carousel @balimentari | 3 per batch |

### Workflow Rules (perlu review untuk konten baru/proyek)
1. **Review-first:** Always propose detailed concept before generating — never generate directly
2. **Caption delivery:** Always request caption upon carousel completion
3. **Clarity direction:** Always ask where ads/closing should direct the user
4. **Comparison tables:** Include concrete numbers (budget, estimates) whenever possible
5. **Content connectivity:** Setiap konten harus nyambung ke konten sebelumnya (lihat aturan @balimentari)

---

## 🔁 Cronjob — Automatic Daily Content Ideas

- **Job ID:** `226198d7`
- **Name:** "Ide Konten Psikologi Harian"
- **Schedule:** Every day 10:00 WITA (02:00 UTC) → Telegram `203050635`
- **Type:** Agent — generates 3 fresh content ideas each day
- **Output:** Nama konsep, hook, kenapa menarik, nyambung ke tema sebelumnya
- **⚠️ Rule:** Setiap ide WAJIB menyertakan "Nyambung ke: [tema sebelumnya]"

---

## 📡 Content Delivery & Scheduling

### 🔌 Repliz API (Social Media Scheduler)
- **Base URL:** `https://api.repliz.com`
- **Auth:** Basic `9332936724:tH8tV0K38psksdYyyzfRHiGcpGZ0DdB7`
- **Key endpoint:** `POST /public/schedule` — create scheduled post
- **IG @balimentari:** `6957dc8f1fab4cfd20463b82`
- **FB Bali Mentari:** `6957d0461fab4cfd2045bef6`

### Berita Harian — Structure
Fenomena Alam (kalau ada) → Politik → Ekonomi → Olahraga/Timnas → Hiburan
- Timnas Indonesia always highlight utama
- Rupiah & IHSG sebagai indikator ekonomi rutin

### Sports Update — Format
Results table → Star Performer → Top Scorers → Drama → Jadwal besok
- **Tone:** Santai, bahasa gaul anak Jaksel/Bali, banyak emoji, conversational
- **Framing:** "Argentina kasih pelajaran" bukan "Argentina menang 3-0"

### ⚽ World Cup 2026 — Key Records (for content reference)
| Record | Detail |
|--------|--------|
| 🐐 Most WC goals all-time | **Messi: 17 gol** (new record, surpassed Klose) |
| 🐢 Second place | **Mbappé: 16 gol** (tied Klose) |
| 🇵🇹 Only player to score in 6 WCs | **CR7: 10 gol** (2006–2026) |
| 🏋️ Norway's star | **Haaland** — brace vs Senegal & Iraq; Norway lolos knockout |

### Multi-Source Research Strategy
- **Sumber cuaca:** BMKG Instagram (paling update & ringkas), Detik Bali, Radarbali, Indobalinews, Tribun Bali, Bali Post, Kontan
- **Cross-reference:** Majority vote jika ada data konflik antar sumber (mis: Badung "Cerah" vs "Hujan Ringan")
- **Bali June pattern:** Cerah dominan awal bulan → hujan ringan mulai ~19 Juni di beberapa daerah

---

## 📋 Strategic Frameworks

### Competitor Analysis (Meta Ads)
1. Scan **Meta Ads Library** (`facebook.com/ads/library/`)
2. Catalog: website, positioning, languages, USP, pricing, services, contact
3. SWOT per competitor → identify gap
4. Funnel: **TOFU → MOFU → BOFU** + closing channel

### Multi-Market Ad Strategy
- Budget split by market size (e.g., AU 60% / NL 40%)
- AU = casual English; NL = dual Dutch+English
- Separate ad sets per country, different hooks

---

## 🛠️ Technical Workflow Patterns

### DOCX Generation (Node.js `docx`)
- **⚠️ `write_file` truncates ~27KB** — NEVER merge truncated files
- **✅ Chunking approach:** 6+ small JS files (<15KB each), concat with `cat chunk*.js > final.js && node final.js`
- **Quote rule:** Use **single quotes** for JS strings, **double quotes** inside content
- **Validate:** Run `node script.js` after each chunk

#### Chunking Strategy
1. `chunk0.js` — helpers
2. `chunk1.js` — document setup + first section
3. `chunk2–N.js` — remaining sections (1-2 per chunk)
4. `chunkN.js` — closing + output
5. Concat & run: `cat chunk*.js > output.js && node output.js`
6. Each chunk only needs syntax-error-free, not standalone-valid

### Browser Reliability
- `browser_use` frequently fails (CAPTCHAs, CDP timeouts)
- **Fallback:** `tavily_search` for web research
- Always test browser availability first

---

## 🧠 Installed Skills (MCP)

| Skill | Repo | Fungsi |
|-------|------|--------|
| **social** | coreyhaines31/marketingskills | Social media content |
| **content-strategy** | coreyhaines31/marketingskills | Content strategy |
