File: README.md
App Store & Google Play Screenshots Generator
A skill for AI coding agents that scaffolds a production-ready Next.js editor for App Store and Google Play marketing screenshots. It gives you a connected canvas, real device frames, inspector controls, persistent project state, and one-click export bundles at store-ready sizes.
Example screenshots generated with this skill were accepted for Bloom Coffee Shelf Recipe on the App Store.
What It Does
- Builds a full screenshot editor instead of a static one-off page
- Turns raw app captures into ad-style slides with big readable copy
- Lets phones, captions, and decorative elements span adjacent screenshots on one connected canvas
- Keeps older projects safe with isolated-screen export mode until you opt into connected crops
- Saves every deck to
app-store-screenshots.json, so the project is git-trackable and resumable - Uploads picked screenshots into
public/screenshots/uploaded/<hash>.png - Supports iOS, iPad, Android phone, Android tablet, and Play Store feature graphic decks
- Exports exact PNG bundles for all required App Store and Google Play sizes
- Supports locales, RTL-aware copy/layout guidance, reusable themes, and in-place project migration
Current Editor UI
- Connected canvas - view the whole screenshot strip at once, drag elements across screen boundaries, then export each screen as a precise crop.
- Isolated mode - preserve legacy decks where offscreen elements should not leak into neighboring exports.
- Screen sidebar - add, select, and drag-to-reorder screens with live thumbnails.
- Inspector - edit layout, labels, headlines, screenshots, element stacking, and transforms from the right panel.
- Platform switcher - keep iOS and Android decks side by side while sharing the same editor workflow.
- Device selector - design for iPhone, iPad, Android phone, Android tablets, and feature graphic formats.
- Autosave - writes to disk through
/api/projectand mirrors tolocalStoragefor instant reloads. - Export bundle - downloads a zip organized by platform, device, resolution, and locale.
Tip: when capturing source iPhone screenshots, the 6.1-inch simulator is usually the easiest starting point because it reduces manual image adjustment inside the frames.
Install
Using npx skills
npx skills add ParthJadhav/app-store-screenshotsInstall globally:
npx skills add ParthJadhav/app-store-screenshots -gInstall for a specific agent:
npx skills add ParthJadhav/app-store-screenshots -a claude-codeThis works with Claude Code, Cursor, Windsurf, OpenCode, Codex, and other agents supported by skills.
Manual install
git clone https://github.com/ParthJadhav/app-store-screenshots ~/.claude/skills/app-store-screenshotsUsage
Once installed, ask your coding agent for store screenshots:
Build App Store and Google Play screenshots for my app.The skill guides the agent to ask for your app context, source screenshots, platforms, locales, visual direction, and slide count before generating the editor project.
Example Prompts
Build App Store screenshots for my habit tracker.
The app helps people stay consistent with simple daily routines.
I want 6 slides, clean minimal style, warm neutrals, and a calm premium feel.Generate App Store screenshots for my personal finance app.
The main strengths are fast expense capture, clear monthly trends, and shared budgets.
I want a sharp modern style with high contrast and 7 slides.Build App Store screenshots for my language learning app.
I need English, German, and Arabic screenshot sets.
Use two reusable themes: clean-light and dark-bold.
Make sure Arabic slides feel RTL-native, not just translated.Better Prompt Tips
- Say what the app does in one sentence
- List the top 3-5 features in priority order
- Mention the platforms and devices you need
- Describe the visual style you want
- Say how many slides you want
- Mention required locales or RTL languages
- Provide source screenshot paths, app icon, and style references when available
What Gets Scaffolded
If starting from an empty folder, the skill creates a Next.js project like this:
project/
โโโ public/
โ โโโ mockup.png
โ โโโ app-icon.png
โ โโโ screenshots/
โ โโโ apple/
โ โ โโโ iphone/{locale}/01.png
โ โ โโโ ipad/{locale}/01.png
โ โโโ android/
โ โโโ phone/{locale}/01.png
โ โโโ tablet-7/portrait/{locale}/01.png
โ โโโ tablet-10/landscape/{locale}/01.png
โ โโโ feature-graphic/{locale}/01.png
โโโ app-store-screenshots.json
โโโ src/app/
โ โโโ layout.tsx
โ โโโ page.tsx
โโโ src/components/editor/
โ โโโ screenshot-editor.tsx
โ โโโ toolbar.tsx
โ โโโ sidebar.tsx
โ โโโ inspector.tsx
โ โโโ preview-stage.tsx
โ โโโ slide-canvas.tsx
โ โโโ screenshot-picker.tsx
โ โโโ device-frames.tsx
โโโ src/lib/
โโโ constants.ts
โโโ defaults.ts
โโโ storage.ts
โโโ image-cache.ts
โโโ types.tsThe template README inside skills/app-store-screenshots/template/README.md documents the editor internals in more detail.
Editor Workflow
- Capture real app screenshots from a simulator, emulator, or device.
- Ask your agent to scaffold or migrate the screenshot project.
- Run the dev server and open the editor.
- Use the sidebar to organize screens and the inspector to edit copy, layouts, screenshots, and elements.
- Choose Connected or Isolated mode depending on whether elements should cross screen boundaries.
- Click Export bundle to download store-ready PNGs.
Uploaded files are saved under public/screenshots/uploaded/, and the canonical deck state is saved in app-store-screenshots.json. Commit both to make the deck reproducible after a fresh clone.
Export Sizes
Apple App Store
| Display | Resolution |
|---|---|
| 6.9" | 1320 x 2868 |
| 6.5" | 1284 x 2778 |
| 6.3" | 1206 x 2622 |
| 6.1" | 1125 x 2436 |
Google Play Store
| Device | Resolution |
|---|---|
| Phone portrait | 1080 x 1920 |
| 7" tablet portrait | 1200 x 1920 |
| 7" tablet landscape | 1920 x 1200 |
| 10" tablet portrait | 1600 x 2560 |
| 10" tablet landscape | 2560 x 1600 |
| Feature graphic | 1024 x 500 |
Screenshots are designed at the largest size for each platform and scaled down for smaller exports. Android frames are CSS-rendered, while iPhone uses the included mockup.png bezel.
Project State
app-store-screenshots.jsonis the source of truth for app name, active platform, active device, locales, theme, connected-canvas mode, slides, screenshot paths, and transforms.- Runtime uploads are written to
public/screenshots/uploaded/<hash>.png. - The editor reads
localStoragefirst for fast paint, then reconciles with the project file. - Older project files are migrated to schema v2 on load while keeping legacy decks isolated unless connected mode was already enabled.
- Custom themes live in
src/lib/constants.ts; unknown theme ids fall back toclean-light.
Design Standards
- Screenshots are ads, not documentation
- Each slide should sell one clear user outcome
- Headlines should pass the one-second thumbnail test
- Adjacent slides should vary layout and device placement
- Cross-screen elements should never split required text or critical UI
- Exported crops must still work as standalone screenshots
Tech Stack
| Dependency | Purpose |
|---|---|
| Next.js | Dev server and app shell |
| React | Editor UI |
| TypeScript | Project and slide state safety |
| Tailwind CSS | Styling |
| shadcn/ui + Radix | Controls, dialogs, selects, tooltips |
| html-to-image | Exact PNG rendering |
| JSZip | Bundle downloads |
| dnd-kit | Screen reordering |
| react-rnd | Draggable and resizable canvas elements |
Requirements
- Node.js 18+
- One of bun, pnpm, yarn, or npm
Contributing
Contributions are welcome, especially around export reliability, screenshot design guidance, migrations, and cross-agent compatibility. Start with CONTRIBUTING.md.
License
MIT
File: skills/app-store-screenshots/template/README.md
App Store Screenshots โ Editor Template
A pre-built Next.js + ShadCN editor for generating App Store and Google Play screenshots. Scaffolded by the app-store-screenshots skill.
Quick start
bun install # or pnpm / yarn / npm
bun dev # http://localhost:3000What's inside
- Connected canvas editor (
src/components/editor/) โ every screen sits on one horizontal canvas, so phones, captions, and other elements can be dragged across screen boundaries and exported as split crops when Connected mode is enabled. - Screen controls โ drag-to-reorder screens, click-to-edit text, screenshot drop targets, per-screen layout switcher, dark/light toggle.
- Device frames (
src/components/editor/device-frames.tsx) โ iPhone (PNG mockup), iPad, Android phone, Android tablet (portrait + landscape), feature graphic. - Auto-save (git-trackable) โ every change is persisted within ~600ms to
app-store-screenshots.jsonat the project root (via/api/project) and mirrored tolocalStorageas an instant-paint cache. Commitapp-store-screenshots.jsonand you cangit cloneto another machine and resume exactly where you left off. - Multi-device decks โ iOS and Android slide decks live side by side; switching the platform tab preserves both.
- One-click export โ bulk PNG export at any required App Store / Play Store resolution using
html-to-image; each PNG is rendered from the current connected or isolated deck mode. - Project migration โ older
app-store-screenshots.jsonfiles are migrated on load. Existing per-slide transforms remain valid, and connected crops become available without rewriting the deck by hand. - Legacy-safe mode โ pre-v2 projects opened directly in the editor start in isolated-screen mode first, then can opt into connected crops with the toolbar's Connected/Isolated control. Skill-run in-place migrations keep legacy decks isolated unless the project had already explicitly opted into connected canvas.
Adding screenshots
Two ways:
- Drop a file in the inspector โ drag-and-drop or click Pick. The file is sent to
/api/upload, hashed, and written topublic/screenshots/uploaded/<hash>.png. The slide stores the resulting/screenshots/uploaded/...path, so commit those files alongsideapp-store-screenshots.jsonand the screenshots survive agit clone. - Reference a static file โ put PNGs under
public/screenshots/{platform}/{device}/{locale}/and reference them by path. Default sample slides expect:public/screenshots/apple/iphone/en/...public/screenshots/android/phone/en/...public/screenshots/apple/ipad/en/...
Update the matching screenshot fields in app-store-screenshots.json to point at whatever filenames you choose.
Exporting
The toolbar dropdown lists every Apple/Google-required size for the current device. Click Export bundle to download a zip. In Connected mode, each PNG is clipped from the connected canvas, so an element that straddles two screens appears split exactly where you placed it. In Isolated mode, each screen clips its own elements and legacy offscreen content cannot leak into neighboring exports.
Customizing
| Where | What |
|---|---|
src/lib/constants.ts |
Canvas dimensions, export sizes, frame ratios, themes, locales |
app-store-screenshots.json |
Canonical starter project: app name, current device, connected-canvas mode, slide copy, screenshots, and transforms |
src/lib/defaults.ts |
Fallback/reset state used when no project file or local cache exists |
src/components/editor/slide-canvas.tsx |
Add new layouts and connected-canvas element rendering |
src/components/editor/device-frames.tsx |
Tweak device chrome (bezel radii, camera dots) |
src/app/layout.tsx |
Swap the font (next/font/google) |
Notes
mockup.pngis the iPhone bezel overlay; replacing it requires re-measuring thePHONE_SCREENconstants.- Image preloading converts every static path to a base64 data URI before exports run, and export retries paths that were previously missing โ this prevents the html-to-image race where some slide screenshots come out black.
- Reset via the toolbar's circular arrow icon clears in-memory state and reloads the default screens. To wipe disk state too, delete
app-store-screenshots.json. - Persistence model โ the canonical state lives in
app-store-screenshots.json(git-tracked). On load, the editor reads localStorage first for instant paint, then overwrites with the file contents if present; if the file endpoint is unavailable, autosave is blocked so stale cache cannot overwrite disk. On save, both are written. If you ever see a conflict, the file always wins. - Migration model โ schema v1 projects do not need a manual conversion. On first load, the editor upgrades localized text and transform records, writes
schemaVersion: 2, preserves all existing screens, and keepsconnectedCanvas: falseso old offscreen/clipped elements export exactly as isolated screens. Turn on Connected in the toolbar when you want elements to cross screen edges. Explicit skill migrations preserve an existingconnectedCanvaschoice, otherwise they keep legacy decks isolated too. - Custom themes โ if a project file references a theme id that is not present in
src/lib/constants.ts, the editor falls back toclean-lightand shows a warning. Merge customTHEMESentries during in-place upgrades.