@dedesfr/prompter 0.8.8 → 0.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +57 -5
- package/dist/commands/init.js.map +1 -1
- package/package.json +1 -1
- package/skills/doc-builder/SKILL.md +115 -0
- package/skills/doc-builder/references/ui-patterns.md +394 -0
- package/skills/document-translator/SKILL.md +58 -0
- package/skills/gamma-builder/SKILL.md +134 -0
- package/skills/ui-ux-pro/SKILL.md +224 -233
- package/skills/ui-ux-pro-v2/SKILL.md +344 -0
- package/skills/ui-ux-pro-v2/assets/design-spec-template.md +173 -0
- package/skills/ui-ux-pro-v2/references/component-patterns.md +255 -0
- package/skills/ui-ux-pro-v2/references/design-principles.md +167 -0
- package/src/cli/index.ts +1 -1
- package/src/commands/init.ts +63 -5
- package/docs/product-spec.md +0 -151
- package/docs/tasks.md +0 -3
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# System Flowcharts - UI Pattern Documentation
|
|
2
|
+
|
|
3
|
+
> Reusable pattern for generating interactive system flowchart documentation pages.
|
|
4
|
+
> Mintlify-inspired Classic Light theme, featuring a left sidebar, top navbar, and Mermaid.js diagrams.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
- [Design Tokens](#design-tokens)
|
|
11
|
+
- [Typography](#typography)
|
|
12
|
+
- [Page Structure](#page-structure)
|
|
13
|
+
- [Components](#components)
|
|
14
|
+
- [Top Navigation Bar](#top-navigation-bar)
|
|
15
|
+
- [Left Sidebar](#left-sidebar)
|
|
16
|
+
- [Main Content Area](#main-content-area)
|
|
17
|
+
- [Flowchart Container](#flowchart-container)
|
|
18
|
+
- [Mermaid Diagram](#mermaid-diagram)
|
|
19
|
+
- [Module Cards Grid](#module-cards-grid)
|
|
20
|
+
- [Flow Steps (Timeline)](#flow-steps-timeline)
|
|
21
|
+
- [Badges](#badges)
|
|
22
|
+
- [Legend](#legend)
|
|
23
|
+
- [Mermaid Configuration](#mermaid-configuration)
|
|
24
|
+
- [JavaScript Behavior](#javascript-behavior)
|
|
25
|
+
- [Responsive Breakpoints](#responsive-breakpoints)
|
|
26
|
+
- [Usage Template](#usage-template)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Design Tokens
|
|
31
|
+
|
|
32
|
+
### Color Palette
|
|
33
|
+
|
|
34
|
+
| Token | Value | Usage |
|
|
35
|
+
| -------------------- | ------------------------------ | ------------------------ |
|
|
36
|
+
| `--color-primary` | `#0F172A` | Slate 900 - Dark text |
|
|
37
|
+
| `--color-brand` | `#18E299` | Primary brand green |
|
|
38
|
+
| `--color-brand-light`| `#d4fae8` | Light brand background |
|
|
39
|
+
| `--color-brand-deep` | `#0fa76e` | Deep brand accent text |
|
|
40
|
+
| `--color-white` | `#ffffff` | Main content background |
|
|
41
|
+
| `--color-warning` | `#F59E0B` | Amber - Warnings |
|
|
42
|
+
| `--color-error` | `#EF4444` | Red - Errors/Rejections |
|
|
43
|
+
| `--color-info` | `#3B82F6` | Blue - Standard Process |
|
|
44
|
+
| `--color-gray-50` | `#F9FAFB` | Standard light background|
|
|
45
|
+
| `--color-gray-100` | `#F3F4F6` | Subtle hover background |
|
|
46
|
+
| `--color-gray-500` | `#6B7280` | Secondary text (slate) |
|
|
47
|
+
| `--color-gray-700` | `#374151` | Primary body text |
|
|
48
|
+
| `--color-gray-900` | `#111827` | Headings and strong text |
|
|
49
|
+
| `--color-border` | `#E5E7EB` | Standard borders |
|
|
50
|
+
| `--color-border-medium`| `#D1D5DB` | Hover borders |
|
|
51
|
+
|
|
52
|
+
### Core Layout Dimensions
|
|
53
|
+
|
|
54
|
+
| Token | Value | Usage |
|
|
55
|
+
| ------------------------ | -------- | -------------------------- |
|
|
56
|
+
| `--sidebar-width` | `260px` | Width of left sidebar |
|
|
57
|
+
| `--header-height` | `60px` | Height of top sticky nav |
|
|
58
|
+
| `--content-max-width` | `880px` | Max width of reading pane |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Typography
|
|
63
|
+
|
|
64
|
+
### Fonts
|
|
65
|
+
|
|
66
|
+
| Font | Weight | Usage |
|
|
67
|
+
| ---------------- | ------------------ | ---------------------------------- |
|
|
68
|
+
| **Inter** | 400, 500, 600, 700 | Body, headings, main UI elements |
|
|
69
|
+
| **Geist Mono** | 400, 500, 600 | Code, tags, badges, step numbers |
|
|
70
|
+
|
|
71
|
+
### Google Fonts Import
|
|
72
|
+
|
|
73
|
+
```html
|
|
74
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Page Structure
|
|
80
|
+
|
|
81
|
+
The layout follows a two-column documentation structure:
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<body>
|
|
85
|
+
<div class="layout">
|
|
86
|
+
<header class="topbar">
|
|
87
|
+
<!-- Logo and Breadcrumbs -->
|
|
88
|
+
</header>
|
|
89
|
+
|
|
90
|
+
<div class="layout-body">
|
|
91
|
+
<aside class="sidebar">
|
|
92
|
+
<!-- Sidebar Navigation Links -->
|
|
93
|
+
</aside>
|
|
94
|
+
|
|
95
|
+
<main class="main-content">
|
|
96
|
+
<div class="content-container">
|
|
97
|
+
<!-- Page Header (Title, Subtitle, Summary Pills) -->
|
|
98
|
+
<!-- Flowchart Containers per section -->
|
|
99
|
+
</div>
|
|
100
|
+
</main>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</body>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Components
|
|
109
|
+
|
|
110
|
+
### Top Navigation Bar
|
|
111
|
+
|
|
112
|
+
Sticky header with branding and dynamic breadcrumbs.
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<header class="topbar">
|
|
116
|
+
<div class="topbar-logo">
|
|
117
|
+
<svg>...</svg> Docs Logo
|
|
118
|
+
</div>
|
|
119
|
+
<div class="topbar-breadcrumbs">
|
|
120
|
+
<!-- Breadcrumb items -->
|
|
121
|
+
<span class="active" id="breadcrumb-current">Current Section</span>
|
|
122
|
+
</div>
|
|
123
|
+
</header>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Key styles:**
|
|
127
|
+
- `position: fixed`, `height: 60px`
|
|
128
|
+
- Background: `rgba(255, 255, 255, 0.85)` with `backdrop-filter: blur(12px)`
|
|
129
|
+
- Border bottom: `1px solid var(--color-border)`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Left Sidebar
|
|
134
|
+
|
|
135
|
+
Fixed navigation menu replacing traditional horizontal tabs.
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<aside class="sidebar">
|
|
139
|
+
<div class="sidebar-group">
|
|
140
|
+
<div class="sidebar-group-title">Category Name</div>
|
|
141
|
+
<nav class="sidebar-nav">
|
|
142
|
+
<button class="sidebar-link active" data-tab="overview">
|
|
143
|
+
<span>Overview</span>
|
|
144
|
+
</button>
|
|
145
|
+
<button class="sidebar-link" data-tab="section-1">
|
|
146
|
+
<span>Section 1</span>
|
|
147
|
+
</button>
|
|
148
|
+
</nav>
|
|
149
|
+
</div>
|
|
150
|
+
</aside>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Key styles:**
|
|
154
|
+
- Fixed below topbar, width `260px`
|
|
155
|
+
- Background: `var(--color-gray-50)`
|
|
156
|
+
- Links (`.sidebar-link`): Clean layout with `font-size: 0.875rem`
|
|
157
|
+
- Active State: Background `var(--color-brand-light)`, text `var(--color-brand-deep)`
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### Main Content Area
|
|
162
|
+
|
|
163
|
+
Responsive container for readability.
|
|
164
|
+
|
|
165
|
+
```html
|
|
166
|
+
<main class="main-content">
|
|
167
|
+
<div class="content-container">
|
|
168
|
+
<div class="page-header">
|
|
169
|
+
<div class="eyebrow">Category</div>
|
|
170
|
+
<h1>Main Document Title</h1>
|
|
171
|
+
<p class="subtitle">Document description</p>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</main>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Key styles:**
|
|
178
|
+
- Margin-left matches sidebar width (`260px`)
|
|
179
|
+
- Content max-width constrained to `880px`
|
|
180
|
+
- `padding: 3rem 2rem 5rem` for generous vertical whitespace
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### Flowchart Container
|
|
185
|
+
|
|
186
|
+
Wrapper that shows/hides content based on active sidebar link.
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<section class="flowchart-container" id="tab-id">
|
|
190
|
+
<!-- Content for this section -->
|
|
191
|
+
</section>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Key styles:**
|
|
195
|
+
- `display: none` by default, `display: block` when `.active`
|
|
196
|
+
- Fast entry animation: `fadeIn 0.4s ease` (opacity + translate)
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### Mermaid Diagram
|
|
201
|
+
|
|
202
|
+
Container for Mermaid.js rendered flowcharts.
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<div class="mermaid-container">
|
|
206
|
+
<h3>Diagram Title</h3>
|
|
207
|
+
<p class="mermaid-caption">Diagram explanation text.</p>
|
|
208
|
+
<pre class="mermaid">
|
|
209
|
+
flowchart TD
|
|
210
|
+
A["Start"] --> B["Process"]
|
|
211
|
+
B --> C{"Decision"}
|
|
212
|
+
C -->|Yes| D["Success"]
|
|
213
|
+
C -->|No| E["Handle Error"]
|
|
214
|
+
</pre>
|
|
215
|
+
</div>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Container styles:**
|
|
219
|
+
- Border: `1px solid var(--color-border)`
|
|
220
|
+
- Border radius: `12px`
|
|
221
|
+
- `overflow-x: auto` allows wide diagrams to scroll horizontally inside the container.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
### Module Cards Grid
|
|
226
|
+
|
|
227
|
+
Overview cards for system modules/features.
|
|
228
|
+
|
|
229
|
+
```html
|
|
230
|
+
<div class="modules-grid">
|
|
231
|
+
<article class="module-card">
|
|
232
|
+
<h3>Module Name</h3>
|
|
233
|
+
<p>Short description of the module.</p>
|
|
234
|
+
<div class="badge-row">
|
|
235
|
+
<span class="badge badge-module">Label</span>
|
|
236
|
+
</div>
|
|
237
|
+
</article>
|
|
238
|
+
</div>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Key styles:**
|
|
242
|
+
- Grid: `repeat(auto-fill, minmax(320px, 1fr))`
|
|
243
|
+
- Pure white background, subtle `1px solid var(--color-border)` borders
|
|
244
|
+
- Hover effect: elevates shadow and darkens border to `--color-border-medium`
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### Flow Steps (Timeline)
|
|
249
|
+
|
|
250
|
+
Vertical timeline with connected step cards.
|
|
251
|
+
|
|
252
|
+
```html
|
|
253
|
+
<div class="flow-section">
|
|
254
|
+
<h3>Timeline Title</h3>
|
|
255
|
+
<div class="flow-grid">
|
|
256
|
+
<article class="flow-step">
|
|
257
|
+
<span class="dot"></span>
|
|
258
|
+
<h4>Step Title</h4>
|
|
259
|
+
<p>Description</p>
|
|
260
|
+
</article>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Key styles:**
|
|
266
|
+
- Timeline line: `::before` on `.flow-grid` (2px wide, gray-200)
|
|
267
|
+
- Connection dot: rendered via `.dot` element (16px circle, white center, brand green border)
|
|
268
|
+
- Steps inherit hover-elevation styles from `.module-card`
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
### Badges
|
|
273
|
+
|
|
274
|
+
Inline status indicators.
|
|
275
|
+
|
|
276
|
+
```html
|
|
277
|
+
<span class="badge badge-module">MODULE</span>
|
|
278
|
+
<span class="badge badge-status">DEFAULT</span>
|
|
279
|
+
<span class="badge badge-warning">WARNING</span>
|
|
280
|
+
<span class="badge badge-error">ERROR</span>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
| Class | Background | Text Color |
|
|
284
|
+
| ---------------- | ---------------------- | ------------------- |
|
|
285
|
+
| `.badge-module` | `var(--brand-light)` | `var(--brand-deep)` |
|
|
286
|
+
| `.badge-status` | `var(--gray-100)` | `var(--gray-700)` |
|
|
287
|
+
| `.badge-warning` | `#FEF3C7` (Amber 100) | `#D97706` (Amber 600)|
|
|
288
|
+
| `.badge-error` | `#FEE2E2` (Red 100) | `#DC2626` (Red 600) |
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### Legend
|
|
293
|
+
|
|
294
|
+
Contextual legend placed after diagrams.
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<div class="legend">
|
|
298
|
+
<h3>Legend</h3>
|
|
299
|
+
<div class="legend-items">
|
|
300
|
+
<div class="legend-item"><div class="legend-icon is-user"></div><span>User Action</span></div>
|
|
301
|
+
<div class="legend-item"><div class="legend-icon is-system"></div><span>System Process</span></div>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**Icon borders:**
|
|
307
|
+
- User: Brand Green
|
|
308
|
+
- System: Slate 900
|
|
309
|
+
- Warning: Amber
|
|
310
|
+
- Process: Blue
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Mermaid Configuration
|
|
315
|
+
|
|
316
|
+
The design applies custom light-mode variables directly via the `mermaid.initialize` block to harmonize with the UI:
|
|
317
|
+
|
|
318
|
+
```javascript
|
|
319
|
+
mermaid.initialize({
|
|
320
|
+
startOnLoad: false,
|
|
321
|
+
theme: 'base',
|
|
322
|
+
themeVariables: {
|
|
323
|
+
darkMode: false,
|
|
324
|
+
background: '#F9FAFB',
|
|
325
|
+
mainBkg: '#ffffff',
|
|
326
|
+
primaryColor: '#111827',
|
|
327
|
+
primaryTextColor: '#374151',
|
|
328
|
+
primaryBorderColor: '#18E299',
|
|
329
|
+
lineColor: '#1f2937',
|
|
330
|
+
secondaryColor: '#F3F4F6',
|
|
331
|
+
tertiaryColor: '#E5E7EB',
|
|
332
|
+
fontFamily: 'Inter, system-ui, sans-serif',
|
|
333
|
+
fontSize: '13px',
|
|
334
|
+
edgeLabelBackground: '#ffffff',
|
|
335
|
+
clusterBkg: '#F9FAFB',
|
|
336
|
+
clusterBorder: '#E5E7EB'
|
|
337
|
+
},
|
|
338
|
+
flowchart: {
|
|
339
|
+
useMaxWidth: true,
|
|
340
|
+
htmlLabels: true,
|
|
341
|
+
curve: 'basis',
|
|
342
|
+
padding: 24,
|
|
343
|
+
wrappingWidth: 200
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## JavaScript Behavior
|
|
351
|
+
|
|
352
|
+
### Navigation & Breadcrumbs
|
|
353
|
+
|
|
354
|
+
Clicking a `.sidebar-link` sets active classes on the link and matching `.flowchart-container`. It also extracts the link text and updates `#breadcrumb-current`, scrolling the user back to the top of the content area.
|
|
355
|
+
|
|
356
|
+
### Mermaid Lazy Rendering
|
|
357
|
+
|
|
358
|
+
Diagrams render only when their corresponding section is activated:
|
|
359
|
+
|
|
360
|
+
```javascript
|
|
361
|
+
const renderTab = async (tabId) => {
|
|
362
|
+
if (renderedTabs.has(tabId)) return;
|
|
363
|
+
const container = document.getElementById(tabId);
|
|
364
|
+
if (!container) return;
|
|
365
|
+
|
|
366
|
+
const diagrams = container.querySelectorAll('.mermaid');
|
|
367
|
+
if (!diagrams.length) {
|
|
368
|
+
renderedTabs.add(tabId);
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (document.fonts?.ready) await document.fonts.ready;
|
|
373
|
+
await mermaid.run({ querySelector: `#${tabId} .mermaid` });
|
|
374
|
+
renderedTabs.add(tabId);
|
|
375
|
+
};
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Scroll Animations
|
|
379
|
+
|
|
380
|
+
`.animate-on-scroll` elements fade and slide up automatically via `IntersectionObserver`.
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Responsive Breakpoints
|
|
385
|
+
|
|
386
|
+
### Tablets & Mobile (`max-width: 1024px`)
|
|
387
|
+
|
|
388
|
+
The dual-pane UI gracefully collapses:
|
|
389
|
+
|
|
390
|
+
| Component | Change |
|
|
391
|
+
| ---------------- | --------------------------------------------- |
|
|
392
|
+
| Sidebar | Hidden (`display: none`) |
|
|
393
|
+
| Main Content | `margin-left: 0`, full width, reduced padding |
|
|
394
|
+
| Topbar Logo | Returns to intrinsic width |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: document-translator
|
|
3
|
+
description: "Translate text or documents between English and Indonesian with native-speaker fluency. Use this skill whenever the user wants to translate content to/from Indonesian (Bahasa Indonesia), convert English text to Indonesian or vice versa, or needs localization help for Indonesian audiences. Also trigger when the user mentions 'terjemahkan', 'translate to Bahasa', or pastes text in either language asking for conversion to the other."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Document Translator — English ↔ Indonesian
|
|
7
|
+
|
|
8
|
+
You are a professional bilingual translator specializing in English and Indonesian (Bahasa Indonesia). Your translations read as if written by an educated native speaker of the target language — not as translations at all.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
### Think like a native writer, not a translator
|
|
13
|
+
The goal is not word-for-word accuracy but meaning-for-meaning fidelity. Indonesian and English structure ideas differently. Indonesian favors active constructions with "me-" prefixes, uses particles like "lah", "pun", "kah" for nuance, and often places context before the main clause. English tends toward tighter subordination and explicit connectors. Respect these differences — restructure sentences so they flow naturally in the target language.
|
|
14
|
+
|
|
15
|
+
### Preserve register and tone
|
|
16
|
+
A formal business report should stay formal. A casual blog post should stay casual. Indonesian has distinct register markers — "Anda" vs "kamu" vs "kalian", "mohon" vs "tolong", "berkenan" vs "mau". Match the register of the original. When the source is ambiguous, default to the register most common for that document type (e.g., formal for contracts, semi-formal for articles, casual for social media).
|
|
17
|
+
|
|
18
|
+
### Cultural adaptation over literal translation
|
|
19
|
+
Some concepts don't translate directly. Idioms, humor, cultural references, and domain-specific jargon need adaptation, not transliteration. For example:
|
|
20
|
+
- "It's raining cats and dogs" → "Hujan deras sekali" (not a literal translation of the idiom)
|
|
21
|
+
- "Break a leg!" → "Semoga sukses!" (cultural equivalent)
|
|
22
|
+
- Currency, date formats, measurement units — adapt when the document is clearly intended for the target audience; preserve when the document is referential (e.g., quoting a foreign source)
|
|
23
|
+
|
|
24
|
+
### Handle Indonesian-specific grammar carefully
|
|
25
|
+
Indonesian grammar has subtleties that machine translations often miss:
|
|
26
|
+
- **Affixation**: me-, ber-, di-, ke-...-an, pe-...-an prefixes/suffixes change word class and meaning. Use them correctly — "menulis" (to write, active), "ditulis" (written, passive), "penulisan" (the act of writing), "penulis" (writer).
|
|
27
|
+
- **Passive voice**: Indonesian has two passive forms — "di-" passive (formal) and "ter-" passive (unintentional/stative). Choose the right one. "Pintu itu dibuka oleh dia" (he opened the door) vs "Pintu itu terbuka" (the door happened to open).
|
|
28
|
+
- **Particles**: "pun", "lah", "-kah" add emphasis, softening, or question marking. Use them where natural — their absence can make Indonesian text feel robotic.
|
|
29
|
+
- **Pronouns**: Indonesian rarely repeats pronouns where context makes the subject clear. Don't over-insert "dia", "mereka", etc. where a native speaker would omit them.
|
|
30
|
+
|
|
31
|
+
## Translation Process
|
|
32
|
+
|
|
33
|
+
1. **Detect direction**: Determine whether translating EN→ID or ID→EN based on the source text language.
|
|
34
|
+
|
|
35
|
+
2. **Analyze the source**: Before translating, understand:
|
|
36
|
+
- Document type (legal, technical, creative, conversational, academic)
|
|
37
|
+
- Register and tone
|
|
38
|
+
- Any domain-specific terminology
|
|
39
|
+
- Formatting structure (headings, lists, tables, code blocks)
|
|
40
|
+
|
|
41
|
+
3. **Translate in meaning-units**, not sentence-by-sentence. Sometimes two English sentences become one Indonesian sentence, or vice versa, if that's what sounds natural.
|
|
42
|
+
|
|
43
|
+
4. **Preserve formatting exactly**: Headings stay as headings. Bold stays bold. Lists stay as lists. Tables keep their structure. Code blocks are untranslated (only translate comments within code if requested). Markdown formatting, HTML tags, or any structural markup must be preserved.
|
|
44
|
+
|
|
45
|
+
5. **Handle untranslatable terms**: Technical terms, brand names, proper nouns, and widely-adopted loanwords (like "software", "database", "startup") should be kept in their original form unless there's a well-established Indonesian equivalent in common use (e.g., "perangkat lunak" for software is acceptable in formal/academic contexts but "software" is more natural in tech contexts).
|
|
46
|
+
|
|
47
|
+
## Output Format
|
|
48
|
+
|
|
49
|
+
- Always save the translated result to a markdown file. Derive the filename from the original filename or content topic — e.g., `translated-<original-name>.md` or `translated-<slug>.md`. Tell the user the path after saving.
|
|
50
|
+
- Write ONLY the translated text into the file — no preamble, no "Here is the translation:" header.
|
|
51
|
+
- Match the exact formatting of the input (headings, bold, lists, tables, code blocks, etc.).
|
|
52
|
+
- If the user asks for explanations of translation choices, append them at the end of the markdown file after a `---` separator under a `## Translation Notes` heading.
|
|
53
|
+
|
|
54
|
+
## Edge Cases
|
|
55
|
+
|
|
56
|
+
- **Mixed-language input**: If the source contains both English and Indonesian (common in Indonesian tech/business writing), translate only the portions in the source language to the target language. Ask the user if unclear.
|
|
57
|
+
- **Slang and colloquial language**: Translate to equivalent register in the target language. Indonesian slang ("gue", "lu", "nggak", "emang") maps to casual English; formal Indonesian maps to formal English.
|
|
58
|
+
- **Ambiguous requests**: If the user just pastes text without specifying direction, translate to the other language (English text → Indonesian, Indonesian text → English). If the text language is ambiguous, ask.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gamma-builder
|
|
3
|
+
description: Transform documents, reports, articles, or unstructured text into polished, structured presentation outlines optimized for Gamma AI. Use this skill whenever the user wants to create a presentation, slide deck, or pitch from existing content — even if they don't mention "Gamma" explicitly. Trigger on phrases like "turn this into slides", "make a presentation from this", "create a deck", "slide outline", "presentation from this doc", or any request to convert text into presentation format.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Gamma Builder
|
|
7
|
+
|
|
8
|
+
Transform any document or text into a Gamma AI-ready presentation outline. The output is structured so it can be copy-pasted directly into Gamma AI's text input.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
### Phase 1 — Clarification (always do this first)
|
|
13
|
+
|
|
14
|
+
When the user provides a document or text, gather four parameters before generating anything. Use `AskUserQuestion` if available, otherwise ask inline. If the user already provided these details upfront, skip to Phase 2.
|
|
15
|
+
|
|
16
|
+
Ask:
|
|
17
|
+
|
|
18
|
+
1. **Output Language** — Which language for the presentation?
|
|
19
|
+
- `English`
|
|
20
|
+
- `Indonesian` (Bahasa Indonesia)
|
|
21
|
+
|
|
22
|
+
2. **Presentation Length** — How many slides?
|
|
23
|
+
- 5 for brief overview, 10-12 for standard, 15-20 for in-depth
|
|
24
|
+
|
|
25
|
+
3. **Tone** — Pick one:
|
|
26
|
+
- `Formal` — Corporate, polished, authoritative
|
|
27
|
+
- `Casual` — Conversational, approachable, friendly
|
|
28
|
+
- `Technical` — Data-driven, precise, jargon-appropriate
|
|
29
|
+
- `Inspirational` — Motivational, story-driven, energizing
|
|
30
|
+
|
|
31
|
+
4. **Audience** — Who will view this?
|
|
32
|
+
- e.g., C-suite, investors, engineering team, marketing, students, clients
|
|
33
|
+
|
|
34
|
+
5. **Visual Style** — How should slides feel?
|
|
35
|
+
- `Minimal` — Clean, whitespace-heavy, few words per slide
|
|
36
|
+
- `Data-heavy` — Charts, statistics, tables, metrics-focused
|
|
37
|
+
- `Image-focused` — Visual-first, imagery cues on every slide
|
|
38
|
+
- `Balanced` — Mix of text, data, and visual elements
|
|
39
|
+
|
|
40
|
+
### Phase 2 — Content Transformation
|
|
41
|
+
|
|
42
|
+
With all four parameters in hand, transform the source material through these steps:
|
|
43
|
+
|
|
44
|
+
#### 1. Content Analysis
|
|
45
|
+
- Read the entire document
|
|
46
|
+
- Identify the core thesis / main message
|
|
47
|
+
- Extract key arguments, data points, supporting evidence
|
|
48
|
+
- Note quotes, statistics, or visual-worthy content
|
|
49
|
+
- Identify the natural narrative arc
|
|
50
|
+
|
|
51
|
+
#### 2. Information Architecture
|
|
52
|
+
- Map content to the target slide count
|
|
53
|
+
- Group related ideas into logical slide clusters
|
|
54
|
+
- Prioritize based on the specified audience
|
|
55
|
+
- Cut redundancies and filler
|
|
56
|
+
- Follow this flow: **Hook → Context → Core Content → Evidence → Takeaway/CTA**
|
|
57
|
+
|
|
58
|
+
#### 3. Tone Adaptation
|
|
59
|
+
Rewrite all text to match the selected tone — this matters because the same content lands very differently depending on delivery:
|
|
60
|
+
|
|
61
|
+
| Tone | Language Style |
|
|
62
|
+
|------|---------------|
|
|
63
|
+
| Formal | Precise language, third-person, no contractions |
|
|
64
|
+
| Casual | "you/we" language, contractions, relatable phrasing |
|
|
65
|
+
| Technical | Preserve jargon, include specs, data-first language |
|
|
66
|
+
| Inspirational | Power verbs, rhetorical questions, story hooks |
|
|
67
|
+
|
|
68
|
+
#### 4. Visual Style Integration
|
|
69
|
+
Each style drives how much content goes on a slide and what visual placeholders to include:
|
|
70
|
+
|
|
71
|
+
| Style | Content Rule | Visual Cues |
|
|
72
|
+
|-------|-------------|-------------|
|
|
73
|
+
| Minimal | Max 3 bullet points, short phrases only | Suggest whitespace |
|
|
74
|
+
| Data-heavy | Include specific data throughout | `[Chart]`, `[Graph]`, `[Table]` placeholders with data descriptions |
|
|
75
|
+
| Image-focused | Text supported by imagery | `[Image: description]` on every slide |
|
|
76
|
+
| Balanced | Mix text blocks with visuals naturally | Mixed placeholders |
|
|
77
|
+
|
|
78
|
+
## Output Format
|
|
79
|
+
|
|
80
|
+
Generate the output in exactly this structure — it's designed for direct copy-paste into Gamma AI — then **save it to a markdown file** named after the presentation title (e.g., `my-presentation-title.md`) in the current working directory using the Write tool.
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Title: [Presentation Title]
|
|
84
|
+
Subtitle: [Subtitle or tagline]
|
|
85
|
+
Target: [X] slides | Tone: [Selected Tone] | Audience: [Specified Audience] | Style: [Visual Style] | Language: [English/Indonesian]
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
Slide 1: [Slide Title]
|
|
90
|
+
[Slide content — concise text, bullet points, or statement]
|
|
91
|
+
[Image: description] or [Chart: description] (if applicable)
|
|
92
|
+
Speaker Notes: [What the presenter should say/elaborate on]
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
Slide 2: [Slide Title]
|
|
97
|
+
[Slide content]
|
|
98
|
+
[Visual placeholder if applicable]
|
|
99
|
+
Speaker Notes: [Notes]
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
(Continue for all slides...)
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Slide [X]: [Closing Slide Title]
|
|
108
|
+
[Call to action, summary, or closing statement]
|
|
109
|
+
[Visual placeholder if applicable]
|
|
110
|
+
Speaker Notes: [Final delivery notes]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Quality Checklist
|
|
114
|
+
|
|
115
|
+
These aren't arbitrary rules — each one exists because Gamma presentations fail when they're violated:
|
|
116
|
+
|
|
117
|
+
- **Specific slide titles** — "Why Margins Dropped 12% in Q3" beats "Overview". Generic titles signal lazy thinking and lose the audience.
|
|
118
|
+
- **Max 40 words per slide body** (unless Data-heavy style) — Gamma renders slides visually; walls of text break the layout and kill engagement.
|
|
119
|
+
- **Strong opening hook** — The first slide must grab attention, not bore with an agenda. Lead with a provocative stat, question, or bold claim.
|
|
120
|
+
- **Clear closing CTA** — End with what you want the audience to do or remember, not a generic "Thank you."
|
|
121
|
+
- **Logical narrative flow** — A stranger should follow the story without the source document. Each slide should feel like it naturally leads to the next.
|
|
122
|
+
- **Preserve all key data** — Statistics and data points from the source must survive the transformation. They're the evidence.
|
|
123
|
+
- **Consistent tone** — A casual slide in a formal deck is jarring. Maintain the selected tone throughout.
|
|
124
|
+
- **Hit the slide count** — Stay within ±1 of the target. Going way over or under means the information architecture is off.
|
|
125
|
+
- **Self-contained content** — Never reference "the document" or "as mentioned." The presentation stands alone.
|
|
126
|
+
|
|
127
|
+
## Important Constraints
|
|
128
|
+
|
|
129
|
+
- **Rewrite, don't copy-paste.** Distill and restructure everything from the source. Raw paragraphs dropped into slides are not a presentation.
|
|
130
|
+
- **Don't fabricate.** Only use information that's in or reasonably inferred from the source document.
|
|
131
|
+
- **Include visual placeholders** with specific, descriptive prompts (e.g., `[Image: aerial view of solar farm at sunset]` not just `[Image: relevant photo]`). Gamma AI uses these to generate or find visuals. **Always write image prompts in English**, regardless of the selected output language.
|
|
132
|
+
- **Create narrative arc** even from dry or unstructured source material. That's the whole point of the transformation.
|
|
133
|
+
- If the source is **too short** for the requested slide count, tell the user and suggest a better count.
|
|
134
|
+
- If the source is **too long**, prioritize the most impactful content and note what was condensed or omitted.
|