storebound/examples/demo-app/README.md
CRT 7e26941ffc aso: competitors, suggest and audit from official data; ASO card on the Growth tab
- aso competitors: top apps per keyword from the iTunes Search API (name, developer,
  rating count, release / update dates, localized genre), coverage gaps (words of 2+
  developers), new entrants vs the last snapshot (.storebound/aso/competitors/)
- aso suggest: candidates from own text, competitor names, localized category names and
  Apple Ads keyword suggestions (POST /v1/suggestions/keywords/query, relative 0-100
  popularity, only with credentials); 100-byte keyword field per locale as a diff,
  --write marks it a draft that check --aso and aso audit report
- aso audit: check --aso, free keyword room, rank trend arrows, gaps, Play short
  description / density, App Store conversion, PPO / Play experiment ideas, next 3 actions
- MCP: read-only aso_competitors, aso_suggest, aso_audit; desktop ASO card (visx rank chart)
- docs: README, aso-basics, store-pitfalls (Search API order, no Play search API), CHANGELOG;
  demo-app listing files; tests on recorded Search API and mocked Ads answers
2026-10-12 04:09:34 +08:00

28 lines
2 KiB
Markdown

# Tidy Lists (demo app)
A tiny fictional list app made only to show storebound's **app profile** and the **app screenshot style** (calm
gradient, a clean device frame, headline + subline, no sparkles or badges). One static page with sample data and the
switches a real app needs for store captures: `lang` and `screen` (`lists`, `list`, `share`, `account`). The ids and
URLs in `storebound.config.ts` are placeholders; nothing here talks to a store.
From this folder (needs Bun, ffmpeg, and Playwright's Chromium or Google Chrome):
```sh
bun serve.ts & # the app on http://127.0.0.1:8741
bun ../../cli/index.ts shots capture # raw frames: 2 languages x phone + tablet
bun ../../cli/index.ts shots fonts # Inter subset for the copy
bun ../../cli/index.ts shots render --size ios69,play,feature
bun ../../cli/index.ts shots gallery # store/renders/index.html
bun ../../cli/index.ts check # profile checks: delete-account URL, demo account, terms URL
bun ../../cli/index.ts play data-safety --dry # the Data safety CSV Play imports, from dataSafety in the config
bun ../../cli/index.ts aso audit # offline ASO report over store/appstore.md + store/listing.md
bun ../../cli/index.ts aso suggest --offline # keyword field proposals as a diff (nothing written)
```
`bun ../../cli/index.ts scan` (offline rejection-risk scan) finds four things that are true for a fictional app and
are accepted on purpose in `scan.ignore` of the config, each with its reason: no App Review demo account and no Play
App access credentials (there is no backend to sign in to), the `com.example` package name (the repo placeholder,
never uploaded), and no Play developer account type (there is no account). A real app with accounts must fix the first
two (`review-access` skill), pick its own package name and set `play.accountType`.
Everything it writes (`store/shots/frames`, `store/renders`, `.storebound`) is gitignored.