ASO screenshot generator (App Store / Play Store), code-first, inspired by Remotion. Describe your screenshots in React/JSX, the app exports PNGs for every Apple + Google format in a single command.
One-liner (recommended) — clones the repo, swaps the marketing landing for your personal dashboard, and offers to install dependencies:
npx github:RDH36/Lshoot my-app
cd my-app
pnpm devManual — if you prefer cloning yourself:
git clone https://github.com/RDH36/Lshoot.git my-app
cd my-app
node cli/index.mjs . # or skip and just run pnpm install + pnpm dev
pnpm install
pnpm devOpen http://localhost:3000. Click Open dashboard to manage your projects, or Docs for a guided walkthrough.
The full documentation is available inside the app at http://localhost:3000/docs:
- Install & clone — prerequisites, setup, first run
- With Claude Code / Cursor (AI) — automated workflow via the
new-aso-projectskill - Manually — create a project by hand, write screenshots, export
app/ Next.js App Router (landing + dashboard + API + preview + /docs)
components/aso/ Component library for screenshots
projects/{slug}/ User projects (config + screenshots + assets)
lib/ Formats, Puppeteer, export, schemas
exports/ PNG output (gitignored)
.claude/skills/ Claude Code skills
scripts/ Internal scripts (landing protection, etc.)
You are free to modify, fork, and use every file in this repository for your own projects except:
- The landing page (
app/page.tsx) — brand identity of the original author. Protected by a git pre-commit hook via Husky. - The
flipiaproject (projects/flipia/) — personal project of the original author. Export is locked; running it through the Export API or UI requires a developer code.
To modify either, pass the developer code via env var or prompt. Without the code:
- Commits touching
app/page.tsxare refused. - Exports of the
flipiaproject are refused with HTTP 403.
Every other file is yours: screenshots in projects/{your-app}/, components, lib, docs, config — change anything.
| Command | Effect |
|---|---|
pnpm dev |
Local server with Turbopack |
pnpm build |
Production build |
pnpm cli <dir> |
Set up a fresh Lshoot instance in <dir> (clone + customize) |
node scripts/check-landing.mjs |
Manually verify the landing is unchanged |
- PRD.md — what we're building and why
- ARCHI.md — tech stack and ADRs
- CLAUDE.md — conventions for Claude Code
- specs/01-mvp/ — MVP implementation tasks
Puppeteer doesn't download Chromium — pnpm 10 blocks install scripts:
pnpm rebuild puppeteerPort 3000 busy — an orphan persists:
pkill -f "next-server"For anything else, see /docs in the app.