appshot-cli 0.9.1 → 1.0.0

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.
Files changed (57) hide show
  1. package/README.md +208 -98
  2. package/dist/cli.js +6 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/build.d.ts.map +1 -1
  5. package/dist/commands/build.js +9 -0
  6. package/dist/commands/build.js.map +1 -1
  7. package/dist/commands/frame.d.ts.map +1 -1
  8. package/dist/commands/frame.js +11 -2
  9. package/dist/commands/frame.js.map +1 -1
  10. package/dist/commands/mcp.d.ts +3 -0
  11. package/dist/commands/mcp.d.ts.map +1 -0
  12. package/dist/commands/mcp.js +19 -0
  13. package/dist/commands/mcp.js.map +1 -0
  14. package/dist/commands/skill.d.ts +3 -0
  15. package/dist/commands/skill.d.ts.map +1 -0
  16. package/dist/commands/skill.js +119 -0
  17. package/dist/commands/skill.js.map +1 -0
  18. package/dist/core/compose.d.ts +1 -0
  19. package/dist/core/compose.d.ts.map +1 -1
  20. package/dist/core/compose.js +85 -140
  21. package/dist/core/compose.js.map +1 -1
  22. package/dist/core/layout-utils.d.ts +12 -0
  23. package/dist/core/layout-utils.d.ts.map +1 -0
  24. package/dist/core/layout-utils.js +28 -0
  25. package/dist/core/layout-utils.js.map +1 -0
  26. package/dist/core/text-utils.d.ts +1 -1
  27. package/dist/core/text-utils.d.ts.map +1 -1
  28. package/dist/core/text-utils.js +5 -9
  29. package/dist/core/text-utils.js.map +1 -1
  30. package/dist/mcp/cli-options.d.ts +112 -0
  31. package/dist/mcp/cli-options.d.ts.map +1 -0
  32. package/dist/mcp/cli-options.js +158 -0
  33. package/dist/mcp/cli-options.js.map +1 -0
  34. package/dist/mcp/server.d.ts +2 -0
  35. package/dist/mcp/server.d.ts.map +1 -0
  36. package/dist/mcp/server.js +1149 -0
  37. package/dist/mcp/server.js.map +1 -0
  38. package/dist/services/doctor.d.ts.map +1 -1
  39. package/dist/services/doctor.js +2 -1
  40. package/dist/services/doctor.js.map +1 -1
  41. package/dist/templates/registry.d.ts.map +1 -1
  42. package/dist/templates/registry.js +49 -159
  43. package/dist/templates/registry.js.map +1 -1
  44. package/dist/utils/filename-caption.d.ts +9 -0
  45. package/dist/utils/filename-caption.d.ts.map +1 -0
  46. package/dist/utils/filename-caption.js +19 -0
  47. package/dist/utils/filename-caption.js.map +1 -0
  48. package/dist/version.d.ts +2 -0
  49. package/dist/version.d.ts.map +1 -0
  50. package/dist/version.js +5 -0
  51. package/dist/version.js.map +1 -0
  52. package/package.json +7 -4
  53. package/skill/SKILL.md +225 -0
  54. package/skill/references/fonts.md +55 -0
  55. package/skill/references/gradients.md +69 -0
  56. package/skill/references/templates.md +170 -0
  57. package/skill/references/troubleshooting.md +228 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-caption.d.ts","sourceRoot":"","sources":["../../src/utils/filename-caption.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS1D"}
@@ -0,0 +1,19 @@
1
+ import path from 'path';
2
+ /**
3
+ * Convert a filename to a human-readable caption.
4
+ * Examples:
5
+ * "hello-world.png" → "Hello World"
6
+ * "my_screenshot.png" → "My Screenshot"
7
+ * "app-home_screen.PNG" → "App Home Screen"
8
+ */
9
+ export function filenameToCaption(filename) {
10
+ const name = path.basename(filename, path.extname(filename));
11
+ return name
12
+ .replace(/[-_]/g, ' ')
13
+ .replace(/\s+/g, ' ')
14
+ .trim()
15
+ .split(' ')
16
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
17
+ .join(' ');
18
+ }
19
+ //# sourceMappingURL=filename-caption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-caption.js","sourceRoot":"","sources":["../../src/utils/filename-caption.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,OAAO,IAAI;SACR,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const APP_VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,QAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module';
2
+ const require = createRequire(import.meta.url);
3
+ const pkg = require('../package.json');
4
+ export const APP_VERSION = pkg.version ?? '0.0.0';
5
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAyB,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appshot-cli",
3
- "version": "0.9.1",
3
+ "version": "1.0.0",
4
4
  "description": "Generate App Store–ready screenshots with frames, gradients, and captions",
5
5
  "bin": {
6
6
  "appshot": "bin/appshot.js"
@@ -23,13 +23,15 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@inquirer/prompts": "^7.8.3",
26
+ "@modelcontextprotocol/sdk": "^1.25.2",
26
27
  "commander": "^12.0.0",
27
28
  "fuzzy": "^0.1.3",
28
29
  "inquirer": "^12.0.0",
29
30
  "inquirer-autocomplete-standalone": "^0.8.1",
30
- "openai": "^5.13.1",
31
+ "openai": "^6.16.0",
31
32
  "picocolors": "^1.0.0",
32
- "sharp": "^0.33.5"
33
+ "sharp": "^0.33.5",
34
+ "zod": "^4.3.5"
33
35
  },
34
36
  "devDependencies": {
35
37
  "@types/node": "^24.3.0",
@@ -47,7 +49,8 @@
47
49
  "dist",
48
50
  "bin",
49
51
  "frames",
50
- "fonts"
52
+ "fonts",
53
+ "skill"
51
54
  ],
52
55
  "license": "MIT",
53
56
  "homepage": "https://github.com/chrisvanbuskirk/appshot",
package/skill/SKILL.md ADDED
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: appshot
3
+ description: Create and manage App Store screenshot projects using appshot MCP tools. This skill should be used when users want to generate professional App Store screenshots with device frames, gradients, and captions. Triggers include requests to create screenshot projects, add captions, apply styling, or build final screenshots.
4
+ ---
5
+
6
+ # AppShot Screenshot Generator
7
+
8
+ ## Overview
9
+
10
+ AppShot generates App Store-ready screenshots with device frames, gradient backgrounds, and captions. This skill orchestrates the appshot MCP tools to create complete screenshot projects.
11
+
12
+ ## Available MCP Tools
13
+
14
+ | Tool | Purpose |
15
+ |------|---------|
16
+ | `appshot.init` | Initialize new project structure |
17
+ | `appshot.captions` | Read/write/auto-generate caption text |
18
+ | `appshot.gradients` | List/apply gradient presets |
19
+ | `appshot.backgrounds` | Configure background images |
20
+ | `appshot.fonts` | List/validate available fonts |
21
+ | `appshot.config` | Modify device-specific settings |
22
+ | `appshot.build` | Generate final screenshots |
23
+ | `appshot.validate` | Check App Store compliance |
24
+ | `appshot.specs` | View App Store specifications |
25
+ | `appshot.doctor` | System diagnostics |
26
+ | `appshot.presets` | App Store preset configurations |
27
+ | `appshot.localize` | AI-powered caption translation |
28
+ | `appshot.languages` | Discover available translations |
29
+ | `appshot.frame` | Apply device frames only |
30
+ | `appshot.export` | Export for Fastlane |
31
+ | `appshot.clean` | Remove generated files |
32
+
33
+ ## Project Workflow
34
+
35
+ ### 1. Initialize Project
36
+
37
+ ```
38
+ appshot.init with force: true
39
+ ```
40
+
41
+ Creates the project structure:
42
+ ```
43
+ .appshot/
44
+ ├── config.json # Main configuration
45
+ └── captions/
46
+ ├── iphone.json # Caption files per device
47
+ ├── ipad.json
48
+ ├── mac.json
49
+ └── watch.json
50
+ screenshots/
51
+ ├── iphone/ # Place screenshots here
52
+ ├── ipad/
53
+ ├── mac/
54
+ └── watch/
55
+ final/ # Generated output
56
+ ```
57
+
58
+ ### 2. Add Captions
59
+
60
+ List existing captions:
61
+ ```
62
+ appshot.captions with device: "iphone", action: "list"
63
+ ```
64
+
65
+ Set a caption:
66
+ ```
67
+ appshot.captions with device: "iphone", action: "set", filename: "home.png", caption: "Welcome Home", language: "en"
68
+ ```
69
+
70
+ Auto-generate captions from filenames:
71
+ ```
72
+ appshot.captions with device: "iphone", action: "auto"
73
+ ```
74
+ This converts filenames like `home-screen.png` → "Home Screen"
75
+
76
+ Bulk set multiple captions:
77
+ ```
78
+ appshot.captions with device: "iphone", action: "bulk-set", captions: "{\"home.png\": \"Welcome\", \"settings.png\": \"Settings\"}"
79
+ ```
80
+
81
+ Add translations:
82
+ ```
83
+ appshot.captions with device: "iphone", action: "set", filename: "home.png", caption: "Bienvenido", language: "es"
84
+ ```
85
+
86
+ ### 3. Apply Styling
87
+
88
+ List gradient presets:
89
+ ```
90
+ appshot.gradients with action: "list"
91
+ ```
92
+
93
+ Apply a gradient:
94
+ ```
95
+ appshot.gradients with action: "apply", preset: "ocean"
96
+ ```
97
+
98
+ Set background image:
99
+ ```
100
+ appshot.backgrounds with action: "set", image: "./bg.jpg", fit: "cover"
101
+ ```
102
+
103
+ Configure device settings:
104
+ ```
105
+ appshot.config with device: "iphone", frameScale: 0.85, captionPosition: "above"
106
+ ```
107
+
108
+ ### 4. Build Screenshots
109
+
110
+ Build all devices and languages:
111
+ ```
112
+ appshot.build
113
+ ```
114
+
115
+ Build specific devices:
116
+ ```
117
+ appshot.build with devices: ["iphone", "ipad"]
118
+ ```
119
+
120
+ Build with App Store presets:
121
+ ```
122
+ appshot.build with presets: ["iphone-6-9", "ipad-13"]
123
+ ```
124
+
125
+ ### 5. Frame Only (No Background)
126
+
127
+ Apply device frames without gradients or captions:
128
+ ```
129
+ appshot.frame with input: "./screenshots/iphone"
130
+ ```
131
+
132
+ Frame with output directory:
133
+ ```
134
+ appshot.frame with input: "./screenshots/iphone", outputDir: "./framed"
135
+ ```
136
+
137
+ Frame recursively:
138
+ ```
139
+ appshot.frame with input: "./screenshots", recursive: true
140
+ ```
141
+
142
+ Preview what would be framed:
143
+ ```
144
+ appshot.frame with input: "./screenshots/iphone", dryRun: true
145
+ ```
146
+
147
+ ### 6. Validate
148
+
149
+ Check App Store compliance:
150
+ ```
151
+ appshot.validate
152
+ ```
153
+
154
+ ## Common Scenarios
155
+
156
+ ### New iPhone-Only Project
157
+
158
+ 1. `appshot.init` with `force: true`
159
+ 2. User adds screenshots to `screenshots/iphone/`
160
+ 3. `appshot.captions` - set captions for each screenshot
161
+ 4. `appshot.gradients` - apply preferred gradient
162
+ 5. `appshot.build` with `devices: ["iphone"]`
163
+
164
+ ### Multi-Language App Store Submission
165
+
166
+ 1. `appshot.init` with `force: true`
167
+ 2. `appshot.captions` - add English captions
168
+ 3. `appshot.localize` with `languages: ["es", "fr", "de", "ja"]`
169
+ 4. `appshot.build` with `languages: ["en", "es", "fr", "de", "ja"]`
170
+ 5. `appshot.validate`
171
+
172
+ ### Quick Styling Update
173
+
174
+ 1. `appshot.gradients` with `action: "list"` to see options
175
+ 2. `appshot.gradients` with `action: "apply", preset: "sunset"`
176
+ 3. `appshot.build`
177
+
178
+ ### Quick Auto-Caption Project
179
+
180
+ When filenames are descriptive (e.g., `home-screen.png`, `settings_page.png`):
181
+
182
+ 1. `appshot.init` with `force: true`
183
+ 2. User adds screenshots to `screenshots/iphone/`
184
+ 3. `appshot.captions` with `device: "iphone", action: "auto"`
185
+ 4. `appshot.gradients` with `action: "apply", preset: "ocean"`
186
+ 5. `appshot.build` with `devices: ["iphone"]`
187
+
188
+ Captions are auto-generated from filenames (hyphens/underscores become spaces, title case applied).
189
+
190
+ ### Frame Only (Design Mockups)
191
+
192
+ For quick device mockups without backgrounds or captions:
193
+
194
+ 1. `appshot.frame` with `input: "./screenshots/iphone", outputDir: "./framed"`
195
+
196
+ Output has transparent background - perfect for presentations, design comps, or overlaying on custom backgrounds.
197
+
198
+ ## Device Resolutions
199
+
200
+ ### Required for App Store
201
+ - **iPhone 6.9"**: 1290x2796 or 1320x2868
202
+ - **iPad 13"**: 2064x2752 or 2048x2732
203
+
204
+ ### Optional
205
+ - **Mac**: 2880x1800 (16:10)
206
+ - **Watch Ultra**: 410x502
207
+
208
+ ## Configuration Options
209
+
210
+ ### Frame Positioning
211
+ - `frameScale`: 0.1-1.5 (default: 0.9)
212
+ - `framePosition`: 0-100 or "center"
213
+ - `captionPosition`: "above", "below", "overlay"
214
+
215
+ ### Caption Styling
216
+ - `captionSize`: Font size in pixels
217
+ - `marginTop`: Top margin for caption
218
+ - `marginBottom`: Bottom margin for caption
219
+
220
+ ## Resources
221
+
222
+ - `references/templates.md` - All 8 templates with styles, colors, and recommendations
223
+ - `references/gradients.md` - All 24 gradient presets with colors
224
+ - `references/fonts.md` - All 10 embedded font families
225
+ - `references/troubleshooting.md` - Common errors and solutions
@@ -0,0 +1,55 @@
1
+ # Embedded Fonts
2
+
3
+ 10 font families bundled with appshot, always available without system installation.
4
+
5
+ ## Modern UI Fonts
6
+
7
+ | Font | Variants | Best For |
8
+ |------|----------|----------|
9
+ | **Inter** | Regular, Bold, Italic, Bold Italic | Clean, modern interfaces |
10
+ | **Poppins** | Regular, Bold, Italic, Bold Italic | Friendly, geometric headings |
11
+ | **Montserrat** | Regular, Bold, Italic, Bold Italic | Professional, versatile |
12
+ | **DM Sans** | Regular | Modern, geometric |
13
+
14
+ ## Web-Safe Fonts
15
+
16
+ | Font | Variants | Best For |
17
+ |------|----------|----------|
18
+ | **Roboto** | Regular, Bold, Italic, Bold Italic | Android-style, neutral |
19
+ | **Open Sans** | Regular | Highly readable body text |
20
+ | **Lato** | Regular, Bold, Italic, Bold Italic | Warm, humanist sans-serif |
21
+ | **Work Sans** | Regular | Modern web typography |
22
+
23
+ ## Monospace Fonts
24
+
25
+ | Font | Variants | Best For |
26
+ |------|----------|----------|
27
+ | **JetBrains Mono** | Regular, Bold, Italic, Bold Italic | Code, technical apps |
28
+ | **Fira Code** | Regular, Bold | Code with ligatures |
29
+
30
+ ## Font Recommendations by App Type
31
+
32
+ | App Category | Recommended Font |
33
+ |--------------|------------------|
34
+ | Finance/Business | Inter, Montserrat |
35
+ | Social/Lifestyle | Poppins, Lato |
36
+ | Productivity | Open Sans, Work Sans |
37
+ | Developer Tools | JetBrains Mono, Fira Code |
38
+ | Health/Fitness | Roboto, DM Sans |
39
+
40
+ ## Usage
41
+
42
+ List embedded fonts:
43
+ ```
44
+ appshot.fonts with action: "embedded"
45
+ ```
46
+
47
+ Validate a font:
48
+ ```
49
+ appshot.fonts with action: "validate", font: "Inter"
50
+ ```
51
+
52
+ Configure font in project:
53
+ ```
54
+ appshot.config with device: "iphone", font: "Montserrat Bold"
55
+ ```
@@ -0,0 +1,69 @@
1
+ # Gradient Presets
2
+
3
+ 24 built-in gradient presets organized by category.
4
+
5
+ ## Warm
6
+
7
+ | ID | Name | Colors | Direction |
8
+ |----|------|--------|-----------|
9
+ | `sunset` | Sunset | #FF5733 → #FFC300 | top-bottom |
10
+ | `sunrise` | Sunrise | #F37335 → #FDC830 | diagonal |
11
+ | `autumn` | Autumn | #D38312 → #A83279 | top-bottom |
12
+ | `peach` | Peach | #FFCCCC → #FF6B6B | top-bottom |
13
+
14
+ ## Cool
15
+
16
+ | ID | Name | Colors | Direction |
17
+ |----|------|--------|-----------|
18
+ | `ocean` | Ocean | #0077BE → #33CCCC | top-bottom |
19
+ | `arctic` | Arctic | #72EDF2 → #5151E5 | diagonal |
20
+ | `mint` | Mint | #00B09B → #96C93D | left-right |
21
+ | `lavender` | Lavender | #9796F0 → #FBC7D4 | top-bottom |
22
+
23
+ ## Vibrant
24
+
25
+ | ID | Name | Colors | Direction |
26
+ |----|------|--------|-----------|
27
+ | `rainbow` | Rainbow | #FF0080 → #FF8C00 → #40E0D0 | left-right |
28
+ | `neon` | Neon | #FF006E → #8338EC → #3A86FF | diagonal |
29
+ | `tropical` | Tropical | #FA709A → #FEE140 | top-bottom |
30
+ | `candy` | Candy | #FF61D2 → #FE9090 → #FFCC5C | left-right |
31
+
32
+ ## Subtle
33
+
34
+ | ID | Name | Colors | Direction |
35
+ |----|------|--------|-----------|
36
+ | `pastel` | Pastel | #E8D8F5 → #D6E6FF | top-bottom |
37
+ | `mist` | Mist | #E0EAFC → #CFDEF3 | top-bottom |
38
+ | `pearl` | Pearl | #F5F5F5 → #E8E8E8 → #F0F0F0 | diagonal |
39
+ | `cloud` | Cloud | #FFFFFF → #F0F0F0 | top-bottom |
40
+
41
+ ## Monochrome
42
+
43
+ | ID | Name | Colors | Direction |
44
+ |----|------|--------|-----------|
45
+ | `noir` | Noir | #000000 → #434343 | top-bottom |
46
+ | `graphite` | Graphite | #283048 → #859398 | diagonal |
47
+ | `charcoal` | Charcoal | #1C1C1C → #494949 | top-bottom |
48
+ | `silver` | Silver | #B8B8B8 → #E8E8E8 | diagonal |
49
+
50
+ ## Brand
51
+
52
+ | ID | Name | Colors | Direction |
53
+ |----|------|--------|-----------|
54
+ | `instagram` | Instagram | #833AB4 → #FD1D1D → #FCB045 | diagonal |
55
+ | `twitter` | Twitter Blue | #1DA1F2 → #14171A | top-bottom |
56
+ | `spotify` | Spotify | #1DB954 → #191414 | diagonal |
57
+ | `apple` | Apple | #A1C4FD → #C2E9FB | diagonal |
58
+
59
+ ## Usage
60
+
61
+ To apply a gradient:
62
+ ```
63
+ appshot.gradients with action: "apply", preset: "<id>"
64
+ ```
65
+
66
+ To list gradients by category:
67
+ ```
68
+ appshot.gradients with action: "list", category: "warm"
69
+ ```
@@ -0,0 +1,170 @@
1
+ # Template Reference
2
+
3
+ 8 professional templates for App Store screenshots.
4
+
5
+ ## Template Selection Guide
6
+
7
+ | App Type | Recommended Template |
8
+ |----------|---------------------|
9
+ | Developer tools, CLI, OSS | `nerdy` |
10
+ | Business, productivity | `corporate` |
11
+ | Games, entertainment | `playful` |
12
+ | Lifestyle, premium | `elegant` |
13
+ | Finance, fintech | `bold` |
14
+ | Social, consumer | `modern` |
15
+ | Health, wellness | `minimal` |
16
+ | Custom backgrounds | `showcase` |
17
+
18
+ ---
19
+
20
+ ## modern
21
+
22
+ **Modern Vibrant** - Eye-catching gradient with floating device and clean captions
23
+
24
+ - **Category:** modern
25
+ - **Background:** Purple-pink diagonal gradient (`#667eea` → `#764ba2` → `#f093fb`)
26
+ - **Caption:** Above device, SF Pro Display, dark text (`#021d2f`)
27
+ - **Best for:** Consumer apps, social apps, general-purpose
28
+
29
+ ```
30
+ appshot.template with template: "modern"
31
+ ```
32
+
33
+ ---
34
+
35
+ ## minimal
36
+
37
+ **Minimal Clean** - Soft pastel background with elegant typography
38
+
39
+ - **Category:** minimal
40
+ - **Background:** Warm peach gradient (`#ffecd2` → `#fcb69f`)
41
+ - **Caption:** Above device, Helvetica Neue, dark text (`#1b2a3a`)
42
+ - **Best for:** Health apps, wellness, lifestyle
43
+
44
+ ```
45
+ appshot.template with template: "minimal"
46
+ ```
47
+
48
+ ---
49
+
50
+ ## bold
51
+
52
+ **Bold Impact** - Dark dramatic gradient with large device and overlay captions
53
+
54
+ - **Category:** bold
55
+ - **Background:** Dark purple diagonal gradient (`#0f0c29` → `#302b63` → `#24243e`)
56
+ - **Caption:** Overlay at bottom, SF Pro Display, white text
57
+ - **Best for:** Finance apps, security, premium features
58
+
59
+ ```
60
+ appshot.template with template: "bold"
61
+ ```
62
+
63
+ ---
64
+
65
+ ## nerdy
66
+
67
+ **Nerdy OSS** - Grid-lined midnight background with JetBrains Mono captions
68
+
69
+ - **Category:** bold
70
+ - **Background:** Auto-detect (uses background.png if present)
71
+ - **Caption:** Overlay at bottom, JetBrains Mono Bold, mint green (`#7CFFCB`)
72
+ - **Best for:** Developer tools, CLI apps, open source projects
73
+
74
+ ```
75
+ appshot.template with template: "nerdy"
76
+ ```
77
+
78
+ **Note:** Place a grid/terminal background image at `screenshots/iphone/background.png` for best results.
79
+
80
+ ---
81
+
82
+ ## elegant
83
+
84
+ **Elegant Professional** - Sophisticated monochrome with floating device
85
+
86
+ - **Category:** elegant
87
+ - **Background:** Silver gradient (`#8e9eab` → `#eef2f3`)
88
+ - **Caption:** Below device, Georgia serif, dark text (`#132235`)
89
+ - **Best for:** Luxury apps, premium services, professional tools
90
+
91
+ ```
92
+ appshot.template with template: "elegant"
93
+ ```
94
+
95
+ ---
96
+
97
+ ## showcase
98
+
99
+ **Showcase** - Feature your app with custom backgrounds
100
+
101
+ - **Category:** professional
102
+ - **Background:** Auto-detect with cyan fallback (`#4facfe` → `#00f2fe`)
103
+ - **Caption:** Above device, SF Pro Display, white text
104
+ - **Best for:** Apps with strong visual branding, custom marketing assets
105
+
106
+ ```
107
+ appshot.template with template: "showcase"
108
+ ```
109
+
110
+ **Tip:** Add your branded background to `screenshots/iphone/background.png`
111
+
112
+ ---
113
+
114
+ ## playful
115
+
116
+ **Playful Energy** - Bright, fun gradients perfect for games and entertainment apps
117
+
118
+ - **Category:** playful
119
+ - **Background:** Pink-yellow diagonal gradient (`#fa709a` → `#fee140` → `#fa709a`)
120
+ - **Caption:** Above device, SF Pro Display, white text
121
+ - **Best for:** Games, kids apps, entertainment, social
122
+
123
+ ```
124
+ appshot.template with template: "playful"
125
+ ```
126
+
127
+ ---
128
+
129
+ ## corporate
130
+
131
+ **Corporate Professional** - Clean, professional look for business and productivity apps
132
+
133
+ - **Category:** professional
134
+ - **Background:** Blue-teal gradient (`#0077BE` → `#33CCCC`)
135
+ - **Caption:** Above device, Helvetica, dark text (`#0f1e2d`)
136
+ - **Best for:** Business apps, B2B, enterprise, productivity
137
+
138
+ ```
139
+ appshot.template with template: "corporate"
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Applying Templates
145
+
146
+ ```
147
+ # Apply a template
148
+ appshot.template with template: "nerdy"
149
+
150
+ # Preview without applying
151
+ appshot.template with preview: "modern"
152
+
153
+ # List all templates
154
+ appshot.template with list: true
155
+ ```
156
+
157
+ ## Customizing After Template
158
+
159
+ Templates set a starting point. Customize further with:
160
+
161
+ ```
162
+ # Change gradient
163
+ appshot.gradients with action: "apply", preset: "sunset"
164
+
165
+ # Adjust device positioning
166
+ appshot.config with device: "iphone", frameScale: 0.85, framePosition: 30
167
+
168
+ # Change caption position
169
+ appshot.config with device: "iphone", captionPosition: "below"
170
+ ```