Design App Store and Google Play marketing screenshots on a connected canvas — layouts, device frames, locales, AI translation, and one-click store-ready export.
- Connected canvas editor — every screen sits on one horizontal canvas, so phones, captions, and elements can straddle screen boundaries and export as exact split crops. Isolated mode keeps each screen self-contained.
- Pixel-exact device frames — iPhone 6.9" and iPad 13" vector frames with true screen aspects; screenshots render edge-to-edge.
- Locales done right — per-store folder codes (Apple vs. Google Play), Fastlane/Standard/Flat export layouts, gap-free screen numbering.
- AI translation — bring your own OpenRouter-compatible key; translate one screen, one locale, or every locale at once (5-way concurrent with status).
- One-click export — bulk PNG bundles at store dimensions with automatic retries and verified-complete downloads.
- Git-trackable projects — the project file lives in your workspace folder; commit it and resume on any machine.
- MCP server — drive the editor from Claude/Agents over stdio
(
get_project,lint_deck,render_export,translate_locale, …).
Download the latest StoreShot-…dmg from Releases (universal — Apple Silicon and Intel). Open the DMG, drag StoreShot into Applications, and launch. Builds are Developer ID signed and notarized, so Gatekeeper should not block them.
Web (any platform):
bun install
bun dev # http://localhost:3000Native macOS app (from source):
bun install
bun run dist:mac # → dist/StoreShot-*-arm64.dmgRelease DMGs are signed and notarized locally — see build/macos-signing.md.
Or run the shell against the dev server:
bun dev # terminal 1
bun run electron:dev # terminal 2Other commands: bun run typecheck, bun run lint, bun test (vitest).
| Area | Details |
|---|---|
| Workspaces | The toolbar folder button picks any folder as the active workspace. The app only touches <workspace>/screenshots/ (project JSON + uploads/). Switching flushes pending saves first. |
| Persistence | Autosave (~600ms) writes screenshots/app-store-screenshots.json and mirrors to localStorage for instant paint. On load the file always wins. Saves are shape- and size-validated, written atomically. |
| Locales | Settings → Locales manages App Store Connect codes. en is the editing/translation source; exports use store codes (en-US, sl-SI on Apple vs sl on Play, …). |
| Translate | Keys stay in browser localStorage and go only to your provider — never to this server, git, or logs. |
| Backgrounds | 50 pastel mesh presets (light/dark), custom colors/angle/opacity/blur, or an uploaded image — globally or per screen. |
| MCP | bun run mcp starts the stdio server; bun run mcp:call --list tools explores it. Same localhost-only trust model as the API. |
src/
app/ Next.js routes + /api (project, upload, workspaces)
components/editor/ canvas, toolbar, inspector, dialogs, device frames
components/ui/ shadcn/ui primitives
lib/ constants, locales, fonts, mesh presets, i18n, native bridge
mcp/ opt-in stdio MCP server + client
electron/ main, preload, menu, prefs, updater (macOS shell)
Tweak canvas sizes in src/lib/constants.ts, store folder codes in
src/lib/locale.ts, fonts in src/lib/fonts.ts, mesh presets in
src/lib/mesh-presets.ts.
Local-only tool, document-only by design: the /api/* endpoints accept any
absolute workspace path with no authentication — do not expose the server
beyond localhost, do not run it for multiple users. See
SECURITY.md for the full policy and how to report
vulnerabilities.
Small, focused PRs merge fastest. See CONTRIBUTING.md, and please follow the Code of Conduct.
Built by Stackwares — founded by Oliver Martinez.
MIT © 2026 Oliver Martinez
