@open-assets/open-assets 0.1.10 → 0.1.12

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.
@@ -0,0 +1,544 @@
1
+ ---
2
+ name: open-assets
3
+ description: Generate and manage app marketing assets (screenshots, icons, logos) using HTML/Tailwind with open-assets
4
+ user-invocable: true
5
+ ---
6
+
7
+ ## open-assets
8
+
9
+ open-assets is a dev server and export tool for app marketing assets — screenshots, icons, logos, OG images, favicons, and more — designed as HTML/CSS/SVG files rendered to PNG via Puppeteer. Think Storybook, but for marketing assets.
10
+
11
+ ## Running
12
+
13
+ ```bash
14
+ # Start dev server (preview + export UI)
15
+ open-assets dev
16
+
17
+ # Or with Tailwind
18
+ concurrently "npx @tailwindcss/cli -i src/styles.css -o dist/styles.css --watch" "open-assets dev"
19
+
20
+ # Headless render
21
+ open-assets render --collection screenshots --size iphone-6.9
22
+ open-assets render --collection icon --all
23
+ open-assets render --all
24
+ open-assets render --template 01-hero --all
25
+ open-assets render --force # ignore cache, re-render everything
26
+ ```
27
+
28
+ ## Concepts
29
+
30
+ | Term | Definition |
31
+ |------|-----------|
32
+ | **Collection** | A named group of related assets sharing the same source size and export sizes. One tab in the dev UI. |
33
+ | **Template** | A single source file (HTML or SVG) that produces one image per export size. |
34
+ | **Export Size** | A named output dimension that templates are rendered at (e.g., "iPhone 6.9" → 1320×2868). |
35
+ | **Source Size** | The dimensions the HTML template is authored at. Puppeteer scales from source → export size. |
36
+ | **Output** | An optional post-render action (e.g., write to Xcode `.appiconset`, copy SVG source). |
37
+
38
+ ## assets.json
39
+
40
+ The `assets.json` at the project root defines all asset collections. All collections follow the same unified schema — no `type` field needed.
41
+
42
+ ```json
43
+ {
44
+ "version": 1,
45
+ "name": "App Display Name",
46
+ "publicDir": "public",
47
+ "command": "npx open-assets render --all",
48
+ "collections": [
49
+ {
50
+ "id": "unique-id",
51
+ "label": "Tab Label",
52
+ "sourceSize": { "width": 440, "height": 956 },
53
+ "borderRadius": 4,
54
+ "templates": [
55
+ { "src": "src/screenshots/01-hero.html", "name": "01-hero", "label": "Hero" }
56
+ ],
57
+ "export": [
58
+ { "name": "iphone-6.9", "label": "iPhone 6.9\"", "size": { "width": 1320, "height": 2868 } }
59
+ ],
60
+ "outputs": [],
61
+ "customExport": { "defaultWidth": 1320, "defaultHeight": 2868 }
62
+ }
63
+ ]
64
+ }
65
+ ```
66
+
67
+ ### Collection Fields
68
+
69
+ | Field | Type | Description |
70
+ |-------|------|-------------|
71
+ | `id` | string | Unique identifier (used in CLI `--collection`) |
72
+ | `label` | string | Display name in UI |
73
+ | `sourceSize` | object | `{ width, height }` — dimensions templates are authored at |
74
+ | `borderRadius` | number | Border radius for preview frames (px) |
75
+ | `templates` | array | Source files: `{ src, name, label }` |
76
+ | `export` | array | Export sizes: `[{ name, label, size: { width, height }, outFile? }]` |
77
+ | `outputs` | array | Post-render actions (optional) |
78
+ | `customExport` | object | Custom size defaults for UI (optional) |
79
+
80
+ ### Output Types
81
+
82
+ | Type | Config | Description |
83
+ |------|--------|-------------|
84
+ | `xcode` | `{ "type": "xcode", "path": "..." }` | Render icon and write to Xcode asset catalog |
85
+ | `copy-source` | `{ "type": "copy-source", "format": "svg" }` | Copy source files to export directory |
86
+
87
+ ### Example Collections
88
+
89
+ **Screenshots** (many templates × many device sizes):
90
+ ```json
91
+ {
92
+ "id": "screenshots",
93
+ "label": "App Store Screenshots",
94
+ "sourceSize": { "width": 440, "height": 956 },
95
+ "borderRadius": 4,
96
+ "templates": [
97
+ { "src": "src/screenshots/01-hero.html", "name": "01-hero", "label": "Hero" },
98
+ { "src": "src/screenshots/02-features.html", "name": "02-features", "label": "Features" }
99
+ ],
100
+ "export": [
101
+ { "name": "iphone-6.9", "label": "iPhone 6.9\"", "size": { "width": 1320, "height": 2868 } },
102
+ { "name": "iphone-6.7", "label": "iPhone 6.7\"", "size": { "width": 1290, "height": 2796 } }
103
+ ]
104
+ }
105
+ ```
106
+
107
+ **App Icon** (1 template × many sizes + Xcode):
108
+ ```json
109
+ {
110
+ "id": "icon",
111
+ "label": "App Icon",
112
+ "sourceSize": { "width": 1024, "height": 1024 },
113
+ "borderRadius": 224,
114
+ "templates": [
115
+ { "src": "src/icon.html", "name": "icon", "label": "App Icon" }
116
+ ],
117
+ "export": [
118
+ { "name": "1024", "label": "1024px", "size": { "width": 1024, "height": 1024 } },
119
+ { "name": "180", "label": "180px", "size": { "width": 180, "height": 180 } }
120
+ ],
121
+ "outputs": [{ "type": "xcode", "path": "../MyApp/Assets.xcassets/AppIcon.appiconset" }]
122
+ }
123
+ ```
124
+
125
+ **Icon Explorations** (multiple concept variants):
126
+ ```json
127
+ {
128
+ "id": "icon-explorations",
129
+ "label": "Icon Explorations",
130
+ "sourceSize": { "width": 1024, "height": 1024 },
131
+ "borderRadius": 224,
132
+ "templates": [
133
+ { "src": "src/icons/concept-a.html", "name": "concept-a", "label": "Concept A" },
134
+ { "src": "src/icons/concept-b.html", "name": "concept-b", "label": "Concept B" }
135
+ ],
136
+ "export": [
137
+ { "name": "1024", "label": "1024px", "size": { "width": 1024, "height": 1024 } }
138
+ ]
139
+ }
140
+ ```
141
+
142
+ **Logo** (SVG variants + source copy):
143
+ ```json
144
+ {
145
+ "id": "logo",
146
+ "label": "Logo",
147
+ "sourceSize": { "width": 940, "height": 940 },
148
+ "templates": [
149
+ { "src": "src/logo.svg", "name": "logo", "label": "Logo" },
150
+ { "src": "src/logo-dark.svg", "name": "logo-dark", "label": "Dark" }
151
+ ],
152
+ "export": [
153
+ { "name": "1024", "label": "1024px", "size": { "width": 1024, "height": 1024 } },
154
+ { "name": "512", "label": "512px", "size": { "width": 512, "height": 512 } }
155
+ ],
156
+ "outputs": [{ "type": "copy-source", "format": "svg" }]
157
+ }
158
+ ```
159
+
160
+ **OG Images** (social cards):
161
+ ```json
162
+ {
163
+ "id": "og-images",
164
+ "label": "Social Cards",
165
+ "sourceSize": { "width": 1200, "height": 630 },
166
+ "templates": [
167
+ { "src": "src/og/default.html", "name": "default", "label": "Default OG" }
168
+ ],
169
+ "export": [
170
+ { "name": "og", "label": "OG Image", "size": { "width": 1200, "height": 630 } }
171
+ ]
172
+ }
173
+ ```
174
+
175
+ ## CLI Reference
176
+
177
+ ### All commands
178
+
179
+ | Command | Description |
180
+ |---------|-------------|
181
+ | `open-assets dev [dir]` | Start dev server with live preview and export UI |
182
+ | `open-assets render [dir]` | Render assets headlessly via CLI |
183
+ | `open-assets list [dir]` | List all collections and templates in the config |
184
+ | `open-assets validate [dir]` | Validate assets.json and check referenced files exist |
185
+ | `open-assets init [dir]` | Scaffold a new assets.json and example assets |
186
+ | `open-assets add collection [dir]` | Add a new collection (from presets or custom) |
187
+ | `open-assets add template [dir]` | Add a new template to an existing collection |
188
+ | `open-assets add size [dir]` | Add an export size to a collection |
189
+ | `open-assets skills [dir]` | Install Claude Code skills into a project |
190
+
191
+ ### render command flags
192
+
193
+ | Flag | Description |
194
+ |------|-------------|
195
+ | `--collection <id>` | Render only the collection with this ID |
196
+ | `--template <name>` | Render only the template with this name |
197
+ | `--size <name>` | Use a named export size from config |
198
+ | `--all` | Export at every size defined in the config |
199
+ | `--force` | Re-render all assets even if unchanged |
200
+ | `-o, --output <dir>` | Output directory (default: `./exports`) |
201
+ | `--json` | Output results as JSON |
202
+ | `-q, --quiet` | Suppress progress logs |
203
+
204
+ Flags compose naturally:
205
+ - `--collection screenshots --template 01-hero --size iphone-6.9` → single template, single size
206
+ - `--collection screenshots --template 01-hero --all` → one template, all sizes
207
+ - `--collection screenshots --size iphone-6.9` → all templates, one size
208
+
209
+ ### add commands
210
+
211
+ Interactive commands for managing the config without editing JSON by hand. All support `--config <path>` for custom config filenames.
212
+
213
+ #### `open-assets add collection`
214
+
215
+ Add a new asset collection. Choose from presets or configure custom dimensions and format.
216
+
217
+ **Presets:**
218
+ | Preset | Source Size | Format |
219
+ |--------|-----------|--------|
220
+ | App Store Screenshots | 440x956 | HTML |
221
+ | App Icon | 1024x1024 | HTML |
222
+ | Logo | 800x800 | SVG |
223
+ | Wordmark | 1200x400 | SVG |
224
+ | Feature Graphic (Google Play) | 1024x500 | HTML |
225
+ | OG Image / Social | 1200x630 | HTML |
226
+ | Custom | user-defined | HTML or SVG |
227
+
228
+ Creates a starter template file and adds the collection to `assets.json` with appropriate export sizes.
229
+
230
+ ```bash
231
+ open-assets add collection # interactive preset picker
232
+ open-assets add collection ./my-assets # in a specific directory
233
+ ```
234
+
235
+ #### `open-assets add template`
236
+
237
+ Add a new template (HTML or SVG) to an existing collection. Prompts for which collection, template name/label, and format. Creates the source file in the same directory as the collection's existing templates.
238
+
239
+ ```bash
240
+ open-assets add template # interactive
241
+ ```
242
+
243
+ #### `open-assets add size`
244
+
245
+ Add an export size to a collection. Choose from common device/platform presets or enter custom dimensions.
246
+
247
+ **Size presets include:**
248
+ - iPhone 6.9", 6.7", 6.5", 6.1"
249
+ - iPad 13", 12.9"
250
+ - Google Play Phone, 7" Tablet
251
+ - Mac App Store Retina
252
+ - OG Image, Twitter Card, Product Hunt Gallery
253
+ - Custom dimensions
254
+
255
+ ```bash
256
+ open-assets add size # interactive
257
+ ```
258
+
259
+ ### Output structure
260
+
261
+ `exports/{collection}/{size}/{template}.png`
262
+
263
+ ```
264
+ exports/
265
+ screenshots/
266
+ iphone-6.9/
267
+ 01-hero.png
268
+ 02-features.png
269
+ iphone-6.7/
270
+ 01-hero.png
271
+ icon/
272
+ 1024/
273
+ icon.png
274
+ logo/
275
+ svg/
276
+ logo.svg
277
+ 1024/
278
+ logo.png
279
+ ```
280
+
281
+ ## Creating New Screenshot HTML Files
282
+
283
+ Each screenshot is a standalone HTML file at fixed dimensions. You can create them manually or use `open-assets add template` to scaffold one.
284
+
285
+ Key rules:
286
+
287
+ 1. Set `width` and `height` on the body to match `sourceSize` in the config
288
+ 2. Set `overflow: hidden` on the body
289
+ 3. Reference compiled Tailwind CSS via `<link rel="stylesheet" href="../dist/styles.css" />`
290
+ 4. All paths are relative to the project root
291
+ 5. Put shared assets (images, logos, icons) in `publicDir` (default: `public/`)
292
+
293
+ Example template:
294
+
295
+ ```html
296
+ <!DOCTYPE html>
297
+ <html lang="en">
298
+ <head>
299
+ <meta charset="UTF-8" />
300
+ <meta name="viewport" content="width=440" />
301
+ <link rel="stylesheet" href="../dist/styles.css" />
302
+ </head>
303
+ <body class="m-0 p-0">
304
+ <div class="screenshot bg-white flex flex-col items-center">
305
+ <!-- Your screenshot content here -->
306
+ </div>
307
+ </body>
308
+ </html>
309
+ ```
310
+
311
+ After creating the file manually, add it to the `templates` array in the relevant collection in `assets.json`. Or use `open-assets add template` to do both steps at once.
312
+
313
+ ## Adding a New Collection
314
+
315
+ Use `open-assets add collection` to interactively add a collection from presets or with custom dimensions and format (HTML/SVG). This creates the starter template file and updates `assets.json` automatically.
316
+
317
+ Alternatively, add a new object to the `collections` array in `assets.json` manually. Each collection needs a unique `id`, a `sourceSize`, `templates`, and `export`.
318
+
319
+ ## Common Export Sizes
320
+
321
+ | Platform | Label | Width | Height |
322
+ |----------|-------|-------|--------|
323
+ | App Store | iPhone 6.9" | 1320 | 2868 |
324
+ | App Store | iPhone 6.7" | 1290 | 2796 |
325
+ | App Store | iPhone 6.5" | 1284 | 2778 |
326
+ | App Store | iPhone 6.1" | 1179 | 2556 |
327
+ | App Store | iPad 12.9" | 2048 | 2732 |
328
+ | Play Store | Phone | 1080 | 1920 |
329
+ | Play Store | Phone (tall) | 1080 | 2400 |
330
+ | Product Hunt | Gallery | 1270 | 760 |
331
+ | Web | OG Image | 1200 | 630 |
332
+ | Mac App Store | Retina | 2880 | 1800 |
333
+
334
+ ## Incremental Builds (assets.lock)
335
+
336
+ The `render` command maintains a `assets.lock` file with SHA256 checksums of source files. On subsequent renders, unchanged assets are skipped automatically. Use `--force` to re-render everything.
337
+
338
+ Note: only source HTML/SVG files are checksummed. Changes to referenced assets (images in publicDir, compiled CSS) will not trigger re-renders — use `--force` when those change.
339
+
340
+ ## File Structure Convention
341
+
342
+ ```
343
+ project/
344
+ assets.json
345
+ assets.lock # Auto-generated, add to .gitignore
346
+ public/ # Shared assets (images, logos, icons, photos)
347
+ logo-round.png
348
+ social/
349
+ youtube.svg
350
+ screenshots/ # Real app screenshots for use in templates
351
+ 01.png
352
+ src/
353
+ styles.css # Tailwind input
354
+ icon.html # App icon template
355
+ icons/ # Icon concept explorations
356
+ concept-a.html
357
+ concept-b.html
358
+ logo.svg # Vector logo template
359
+ screenshots/
360
+ 01-hero.html
361
+ 02-features.html
362
+ og/ # OG image templates
363
+ default.html
364
+ dist/
365
+ styles.css # Compiled Tailwind
366
+ exports/ # Rendered output (add to .gitignore)
367
+ ```
368
+
369
+ ---
370
+
371
+ ## Screenshot Design Best Practices
372
+
373
+ These guidelines are distilled from high-converting App Store listings. Follow them when creating screenshot HTML files.
374
+
375
+ ### Copywriting
376
+
377
+ - **Headlines: 3-6 words max**, large and bold. Every word must earn its place.
378
+ - **Lead with the benefit**, not the feature name. "Got Recipes?" not "Recipe Import Feature". "Save from anywhere" not "Multi-platform Import Support".
379
+ - **Use action words**: Save, Track, Cook, Get, Try, Discover, Create, Find.
380
+ - **First screenshot** = elevator pitch headline. This is the only one most users see.
381
+ - **Last screenshot** = CTA with social proof (reviews, ratings, badges).
382
+ - **Highlight the key word** in each headline with a colored background or different color.
383
+
384
+ ### Visual Hierarchy
385
+
386
+ First 1-2 screenshots should use large hero graphics with oversized headlines. The goal is to stop the scroll in the App Store.
387
+
388
+ **Oversized headline pattern** (44-86px):
389
+ ```html
390
+ <div class="text-[86px] font-black leading-[0.9] tracking-[-0.04em]">Got</div>
391
+ <div class="inline-block bg-brand-black text-white text-[86px] font-black px-[16px] pt-[6px] pb-[12px] rounded-[16px] mt-[4px]">Recipes?</div>
392
+ ```
393
+
394
+ **Highlighted keyword pattern** — wrap key words with a colored background pill:
395
+ ```html
396
+ <h1 class="text-[44px] font-extrabold leading-[1.18] tracking-[-0.03em]">
397
+ Save recipes from <span class="inline-block bg-brand-green text-white px-[10px] pt-[3px] pb-[5px] rounded-[10px]">anywhere</span>
398
+ </h1>
399
+ ```
400
+
401
+ ### Layout Patterns
402
+
403
+ Use a mix of these layouts across your 6-10 screenshots. Variety keeps users scrolling.
404
+
405
+ #### 1. Hero (Screenshot 1)
406
+ Oversized headline + logo + large background graphic bleeding off the edges.
407
+ ```html
408
+ <!-- Headline at top -->
409
+ <div class="relative z-10 pt-[28px] px-[24px]">
410
+ <div class="text-[86px] font-black">Got</div>
411
+ <div class="inline-block bg-brand-black text-white text-[86px] font-black px-[16px] rounded-[16px]">Recipes?</div>
412
+ </div>
413
+ <!-- Logo and rating centered -->
414
+ <div class="relative z-10 mt-[44px] flex flex-col items-center">
415
+ <img src="../../public/logo-round.png" width="64" height="64" />
416
+ <img src="../../public/rating.svg" width="365" height="191" class="mt-[8px]" />
417
+ </div>
418
+ <!-- Large image bleeding off bottom-right edge -->
419
+ <div class="absolute z-0" style="bottom: -350px; right: -176px; width: 792px; height: 792px;">
420
+ <img src="../../public/meal.svg" class="w-full h-full object-contain" />
421
+ </div>
422
+ ```
423
+
424
+ #### 2. Dual-Phone (Before/After or Feature Comparison)
425
+ Two phone mockups side by side with an arrow or VS indicator between them. Great for showing "messy website → clean recipe" transformations.
426
+
427
+ #### 3. Orbital (Integrations / Multi-Platform)
428
+ Center your app icon with platform logos on concentric orbital rings:
429
+ ```html
430
+ <div class="orbital-container" style="position: relative; width: 380px; height: 380px;">
431
+ <!-- Concentric ring borders -->
432
+ <div style="position: absolute; border-radius: 50%; border: 1px solid rgba(128,128,128,0.13); width: 240px; height: 240px; top: 70px; left: 70px;"></div>
433
+ <div style="position: absolute; border-radius: 50%; border: 1px solid rgba(128,128,128,0.13); width: 340px; height: 340px; top: 20px; left: 20px;"></div>
434
+ <!-- Center app icon -->
435
+ <div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">
436
+ <img src="../../public/logo-round.png" width="104" height="104" style="border-radius: 50%; box-shadow: 0 6px 20px rgba(0,0,0,0.18);" />
437
+ </div>
438
+ <!-- Platform icons at various positions on rings -->
439
+ <div style="position: absolute; top: 52px; left: 216px; opacity: 0.85;">
440
+ <img src="../../public/social/youtube.svg" width="68" height="68" style="border-radius: 50%;" />
441
+ </div>
442
+ </div>
443
+ ```
444
+
445
+ #### 4. Feature Showcase
446
+ Headline + phone mockup showing a real app screenshot.
447
+ ```html
448
+ <h1 class="text-[44px] font-extrabold tracking-[-0.03em] text-center">
449
+ Just the <span class="inline-block bg-brand-green text-white px-[10px] rounded-[10px]">recipe</span>
450
+ </h1>
451
+ <div class="phone phone-340">
452
+ <div class="phone-screen">
453
+ <img src="../../public/screenshots/05.png" style="width: 100%; height: 100%; object-fit: cover;" />
454
+ </div>
455
+ </div>
456
+ ```
457
+
458
+ #### 5. Review Carousel (Social Proof)
459
+ Staggered review cards with alternating left/right offset:
460
+ ```html
461
+ <div class="pl-5 pr-12">
462
+ <div style="background: white; border-radius: 18px; padding: 14px 18px; box-shadow: 0 4px 24px rgba(0,0,0,0.08);">
463
+ <div style="display: flex; justify-content: space-between; margin-bottom: 4px;">
464
+ <p style="font-size: 16px; font-weight: 800;">Username</p>
465
+ <div style="display: flex; gap: 1px;">
466
+ <svg viewBox="0 0 24 24" fill="#F2C94C" width="16" height="16"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
467
+ </div>
468
+ </div>
469
+ <p style="font-size: 16px; color: #4B5563;">"Their actual review text here."</p>
470
+ </div>
471
+ </div>
472
+ ```
473
+
474
+ #### 6. CTA (Final Screenshot)
475
+ Social proof badges + lifestyle photo fading at bottom:
476
+ ```html
477
+ <h1 class="text-[42px] font-extrabold tracking-[-0.03em]">
478
+ Time to cook, <span class="inline-block bg-brand-green text-white px-[10px] rounded-[10px]">chef</span>
479
+ </h1>
480
+ <!-- Badge pills -->
481
+ <div class="flex flex-wrap gap-2.5 justify-center">
482
+ <div style="display: inline-flex; align-items: center; gap: 10px; background: rgba(255,255,255,0.85); backdrop-filter: blur(12px); border: 1.5px solid rgba(0,0,0,0.06); border-radius: 100px; padding: 10px 20px 10px 14px;">
483
+ <span style="font-size: 16px; font-weight: 700;">No Ads</span>
484
+ </div>
485
+ </div>
486
+ <!-- Lifestyle photo with gradient fade -->
487
+ <div style="position: absolute; bottom: -80px; left: 0; right: 0; height: 320px;">
488
+ <div style="position: absolute; top: 0; left: 0; right: 0; height: 180px; background: linear-gradient(180deg, #FFFFFF 0%, rgba(255,255,255,0) 100%); z-index: 1;"></div>
489
+ <img src="../../public/kitchen-light.jpg" style="width: 100%; height: 100%; object-fit: cover;" />
490
+ </div>
491
+ ```
492
+
493
+ ### Typography
494
+
495
+ **Google Fonts** — add to the `<head>` of each HTML file:
496
+ ```html
497
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
498
+ ```
499
+
500
+ **Recommended pairings:**
501
+ - **Inter** (body) + **Fraunces** (display) — modern + editorial
502
+ - **DM Sans** (body) + **DM Serif Display** (headlines) — clean + elegant
503
+ - **Plus Jakarta Sans** (body) + **Playfair Display** (headlines) — geometric + classic
504
+ - **Outfit** (body) + **Cal Sans** (display) — startup-y + bold
505
+
506
+ **iOS-native feel** — use the system font stack:
507
+ ```css
508
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", system-ui, sans-serif;
509
+ ```
510
+
511
+ ### Icon and Asset Resources
512
+
513
+ | Source | URL | Use For |
514
+ |--------|-----|---------|
515
+ | **Lucide Icons** | https://lucide.dev | Clean UI icons (MIT licensed) |
516
+ | **Heroicons** | https://heroicons.com | UI icons by Tailwind team (MIT) |
517
+ | **Simple Icons** | https://simpleicons.org | Brand/platform logos (YouTube, Instagram, etc.) |
518
+ | **SVG Repo** | https://www.svgrepo.com | Decorative elements, arrows, squiggles |
519
+ | **Unsplash** | https://unsplash.com | Lifestyle photography for backgrounds |
520
+ | **Pexels** | https://www.pexels.com | Free stock photography |
521
+
522
+ ### Example Prompts
523
+
524
+ **Full screenshot set:**
525
+ ```
526
+ Now we want to make beautiful screenshots for this app. Install the open-assets skill
527
+ from https://github.com/parra-inc/open-assets. Look at the marketing doc and
528
+ demographics. Design 8 high-converting App Store screenshots that catch your eye as
529
+ you scroll. Use bold headlines with highlighted keywords, phone mockups with real app
530
+ screenshots, and close with reviews + a CTA. Export for iPhone 6.7" and 6.9".
531
+ ```
532
+
533
+ **Single screenshot iteration:**
534
+ ```
535
+ Update the hero screenshot (01-hero.html) to use a bigger headline at 86px with a
536
+ colored background on the key word. Add the app rating below the logo. Make the
537
+ background food photo bleed off the bottom-right edge for visual impact.
538
+ ```
539
+
540
+ **Adding a new export size:**
541
+ ```
542
+ Add Play Store screenshot sizes to the config. Use 1080x2400 as the export size.
543
+ The screenshots can share the same templates.
544
+ ```