Install
$ agentstack add skill-granth16-screenshot-gen-appstore-storeshots ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
StoreShots — App Store & Google Play Screenshot Studio
Overview
Stand up a pre-built, local-first Next.js studio so the user can design and ship App Store and Google Play listing screenshots. Think of every frame as a tiny ad: it should land one clear payoff with a strong headline, an optional eyebrow line, and a device mockup — not a raw UI screenshot.
The studio already ships with the hard parts solved:
- A live stage rendered at the surface's true resolution and scaled to fit.
- CSS-rendered device shells (no PNG bezels) for iPhone, iPad, and Android phones/tablets.
- Drag, resize, and rotate for copy and devices, plus layering and rotation controls.
- A per-surface storyboard with drag-to-reorder, duplicate, and delete.
- Per-locale copy so one project can carry several language sets.
- Local-first autosave: instant paint from
localStorageplus astoreshots.project.jsonon disk. - Drop-to-upload captures (
POST /api/media→public/captures/uploads/.png). - One-tap bulk export to a zip of deterministic PNGs at every required store size.
Surfaces available out of the box:
- iPhone (portrait) — App Store
- iPad (portrait) — App Store
- Android Phone (portrait) — Google Play
- Android 7" Tablet (portrait + landscape) — Google Play
- Android 10" Tablet (portrait + landscape) — Google Play
- Feature Graphic (1024×500 banner) — Google Play listing header
Core Principle
A store screenshot is a pitch, not a manual. Each frame should carry exactly one idea — a payoff, a feeling, or a pain point removed. Lean on the studio to iterate on copy and layout quickly, and don't hand-build page.tsx, the device shells, or the export pipeline — they are already in the template.
What This Skill Does
- Copies the pre-built app from
template/(alongside thisSKILL.md) into the user's working directory. - Installs dependencies with the user's package manager.
- Places the user's screenshots under
public/captures/...and their app icon inpublic/. - (Optionally) seeds
storeshots.project.jsonwith the user's product name, starter copy,
and capture paths so the first load already shows something real.
- Boots the dev server and points the user to the editor in their browser.
Do NOT re-implement the editor, device shells, layout blueprints, or export pipeline by hand.
Step 0: Probe for an Existing StoreShots Project
Before asking the Step 1 questions, inspect the working directory for an existing install.
test -f package.json && sed -n '1,80p' package.json
test -f storeshots.project.json && sed -n '1,120p' storeshots.project.json
rg -n "storeshots|StudioDoc|scenesBySurface|runDeckExport|device-shell|/api/document" package.json src 2>/dev/null
find public -maxdepth 4 -path "*/captures*" -print 2>/dev/null
If a StoreShots project already exists, do not re-scaffold. Ask whether to (a) update copy / captures in the existing storeshots.project.json, or (b) leave it and just run the dev server. Edit storeshots.project.json with JSON tooling — never regex-edit it.
Step 1: Gather Context (New Project)
Ask the user, in one message:
- What does the app do? One sentence.
- Top 3–5 features, in priority order (these become individual frames).
- Which surfaces? (iPhone, iPad, Android phone, 7"/10" tablet, feature graphic.)
- Locales? Default
en. Mention any RTL needs. - Visual direction? Maps to a palette:
ink(dark),frost(cool light),clay(warm),lagoon(teal). - How many frames per surface? Default 3–6.
- Asset paths? Source screenshots and an app icon, if available.
If the user gives little detail, proceed with sensible defaults and note assumptions at the end.
Step 2: Scaffold
- Copy everything from
template/into the target directory (an empty folder, or a new
subfolder named after the app). Do not copy node_modules, .next, or any *.project.json from the template.
- Install deps with the detected package manager:
``bash npm install # or pnpm install / yarn / bun install ``
- Place screenshots under
public/captures/{store}/{surface}/{locale}/wherestoreis
apple or google. Place an app icon at public/app-icon.png if provided.
Step 3: Prefill the Project (Optional but Preferred)
Write storeshots.project.json at the project root so the first load shows the user's content. Shape (only productName and scenesBySurface are essential):
{
"productName": "Acme",
"paletteId": "ink",
"locales": ["en"],
"locale": "en",
"surface": "ios-phone",
"orientation": "portrait",
"productIcon": "",
"scenesBySurface": {
"ios-phone": [
{
"id": "sc_intro",
"composition": "beacon",
"label": { "en": "WELCOME" },
"headline": { "en": "Stay consistent,\nevery day." },
"capture": "/captures/apple/ios-phone/en/01.png"
}
]
}
}
Field rules:
- surface: one of
ios-phone,ios-tablet,play-phone,play-tablet-7,
play-tablet-10, play-banner.
- composition: one of
beacon,plinth,canopy,duet,manifesto,column,
marquee. Vary it across frames for rhythm. marquee is only for play-banner; column reads best in landscape; manifesto is copy-only.
- paletteId:
ink,frost,clay, orlagoon. - label / headline: per-locale maps.
headlinehonors\nas line breaks. - capture: a path under
/captures/...(may include{locale}), or""to leave empty. - dark: optional
truefor a dark frame variant. - Provide a deck for each surface the user picked. Each scene needs a unique
id.
Design guidance when authoring copy:
- One outcome per frame; lead with the strongest feature on frame 2 (frame 1 is welcome/brand).
- Keep headlines readable at thumbnail size (a few words, 1–2 lines).
- Vary composition and device placement between adjacent frames.
Step 4: Run
npm run dev
Tell the user to open http://localhost:3000, then:
- Pick a surface from the top picker.
- Drop captures into the inspector, edit eyebrow + headline.
- Reorder frames in the storyboard, fine-tune position/rotation on the canvas.
- Click Export to download a zip of every required size for that surface.
Export Reference
Frames are authored at the largest size per surface and uniformly downscaled. Exports land in a zip organized by store/surface/locale/x/.
- Apple: iPhone 1320×2868, 1284×2778, 1206×2622, 1125×2436; iPad 2064×2752, 2048×2732.
- Google: Phone 1080×1920; 7" 1200×1920 / 1920×1200; 10" 1600×2560 / 2560×1600; Feature Graphic 1024×500.
Notes
- Everything runs locally; there is no backend service or account.
- Uploaded captures and
*.project.jsonare git-ignored in the template so working files
don't leak into the user's repo. Commit storeshots.project.json only if the user wants the deck reproducible after a clone.
- If the user just wants to use the tool without an agent, they can clone the repo,
cdinto
skills/storeshots/template, and run it directly.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: granth16
- Source: granth16/screenshot-gen-appstore
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.